Walker

Класс для отображения различных древовидных структур
Класс WordPress
INT 2.1.0
WordPress Icon

Описание класса

Класс «Walker» представляет собой класс для отображения различных древовидных структур. Он является абстрактным классом, который используется в WordPress для создания пользовательских классов, отображающих древовидные структуры, такие как меню, категории, метки и т. д.

Этот класс предоставляет методы, которые можно переопределить в пользовательских классах-наследниках, чтобы настроить отображение элементов древовидной структуры. Он обеспечивает гибкость и расширяемость для разработчиков, позволяя им изменять поведение отображения элементов в соответствии с их потребностями.

Методы

  • display_element — Обходит элементы для создания списка из элементов.
  • end_el — Завершает вывод элемента, если это необходимо.
  • end_lvl — Завершает список после добавления элементов.
  • get_number_of_root_elements — Рассчитывает общее количество корневых элементов.
  • paged_walk — Создает страницу вложенных элементов.
  • start_el — Начинает вывод элемента.
  • start_lvl — Начинает список перед добавлением элементов.
  • unset_children — Удаляет все дочерние элементы для заданного элемента верхнего уровня.
  • walk — Отображает массив элементов иерархически.

Каждый из этих методов может быть переопределен в пользовательском классе-наследнике, чтобы изменить поведение отображения элементов древовидной структуры. Методы предоставляют доступ к различным этапам обхода элементов, таким как начало и конец вывода элемента, начало и конец списка, а также возможность настройки вывода элементов.

Методы

display_element()

Метод display_element() является частью класса Walker и используется для обхода элементов и создания списка из этих элементов. Он принимает объект данных, список элементов для продолжения обхода, максимальную глубину обхода, текущую глубину элемента, массив аргументов и строку вывода. Метод позволяет создавать и настраивать вывод элементов в древовидной структуре.

Метод display_element() работает следующим образом: он принимает объект данных, который содержит информацию об элементе, и список элементов, которые нужно обойти. Затем метод проверяет, достигнута ли максимальная глубина обхода, и если нет, он продолжает обходить дочерние элементы. В процессе обхода метод вызывает другие методы класса Walker, чтобы создать и настроить вывод элементов. Наконец, метод добавляет созданный вывод к строке вывода.

Walker::display_element( object $element, array $children_elements, int $max_depth, int $depth, array $args, string $output )

$element (объект, обязательный): Объект данных элемента.

$children_elements (массив, обязательный): Список элементов для продолжения обхода (передается по ссылке).

$max_depth (целое число, обязательное): Максимальная глубина обхода.

$depth (целое число, обязательное): Глубина текущего элемента.

$args (массив, обязательный): Массив аргументов.

$output (строка, обязательная): Используется для добавления дополнительного содержимого (передается по ссылке).

<?php
/**
 * Пример использования метода display_element()
 *
 * @param object $element            Объект данных элемента.
 * @param array  $children_elements  Список элементов для продолжения обхода (передается по ссылке).
 * @param int    $max_depth          Максимальная глубина обхода.
 * @param int    $depth              Глубина текущего элемента.
 * @param array  $args               Массив аргументов.
 * @param string $output             Используется для добавления дополнительного содержимого (передается по ссылке).
 */
function example_display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
    // Ваш код обработки элемента
}
?>

end_el()

Метод end_el() является частью класса Walker и используется для завершения вывода элемента, если это необходимо. Он вызывается после вывода содержимого элемента и может быть переопределен в подклассах Walker.

Метод end_el() работает следующим образом: после того, как содержимое элемента было выведено с помощью метода start_el(), метод end_el() вызывается для завершения вывода элемента. Это может включать в себя добавление дополнительного содержимого или закрытие тегов.

Метод end_el() используется в различных структурах, таких как списки, меню, навигационные панели и другие древовидные структуры.

Walker::end_el( string $output, object $data_object, int $depth, array $args = array() )

Метод end_el() принимает следующие параметры:

$output (строка, обязательный) — используется для добавления дополнительного содержимого (передается по ссылке).

$data_object (объект, обязательный) — объект данных, который будет использоваться для вывода элемента.

$depth (целое число, обязательный) — глубина элемента.

$args (массив, необязательный) — массив дополнительных аргументов. По умолчанию: array().

<?php
/**
 * Пример использования метода end_el()
 *
 * @param string $output       Используется для добавления дополнительного содержимого (передается по ссылке).
 * @param object $data_object  Объект данных, который будет использоваться для вывода элемента.
 * @param int    $depth        Глубина элемента.
 * @param array  $args         Массив дополнительных аргументов. По умолчанию: array().
 */
function my_end_el( &$output, $data_object, $depth, $args ) {
    // Ваш код для завершения вывода элемента
}
?>

end_lvl()

Метод end_lvl() является частью класса Walker в WordPress и используется для завершения списка после добавления элементов. Он вызывается после того, как все элементы текущего уровня списка были добавлены.

Метод end_lvl() позволяет разработчикам внести дополнительный контент в конец списка или выполнить другие действия, связанные с завершением уровня списка.

Walker::end_lvl( string $output, int $depth, array $args = array() )

Метод end_lvl() принимает три параметра:

  • $output (обязательный) — используется для добавления дополнительного контента в конец списка (передается по ссылке).
  • $depth (обязательный) — глубина элемента списка.
  • $args (необязательный) — массив дополнительных аргументов.

/**
 * Завершает список после добавления элементов.
 *
 * @param string $output Используется для добавления дополнительного контента (передается по ссылке).
 * @param int $depth Глубина элемента.
 * @param array $args Массив дополнительных аргументов. По умолчанию: array().
 */
function end_lvl( &$output, $depth = 0, $args = array() ) {
    // Ваш код здесь
}

В приведенном выше примере кода показана структура метода end_lvl() с комментариями, описывающими каждый параметр.

get_number_of_root_elements()

Метод get_number_of_root_elements() класса Walker используется для вычисления общего количества корневых элементов в структурах дерева.

Walker::get_number_of_root_elements( array $elements ): int

Метод get_number_of_root_elements() принимает один обязательный параметр $elements, который представляет собой массив элементов, которые необходимо перечислить.

$elements (array) (обязательный): Элементы для перечисления.

Метод get_number_of_root_elements() возвращает целое число, представляющее общее количество корневых элементов.

<code>$elements</code> = array(
    array(
        'id' => 1,
        'parent' => 0,
        'name' => 'Element 1'
    ),
    array(
        'id' => 2,
        'parent' => 0,
        'name' => 'Element 2'
    ),
    array(
        'id' => 3,
        'parent' => 1,
        'name' => 'Element 3'
    ),
    array(
        'id' => 4,
        'parent' => 1,
        'name' => 'Element 4'
    ),
);
$walker = new Walker();
$number_of_root_elements = $walker->get_number_of_root_elements( $elements );
// Выводит количество корневых элементов
echo $number_of_root_elements;

В данном примере мы создаем массив $elements, содержащий несколько элементов с различными идентификаторами, родительскими элементами и именами. Затем мы создаем экземпляр класса Walker и вызываем метод get_number_of_root_elements(), передавая ему массив $elements. Метод возвращает общее количество корневых элементов, которое мы выводим на экран.

paged_walk()

Метод paged_walk() является частью класса Walker и используется для создания страницы вложенных элементов. Он позволяет разбить длинный список элементов на несколько страниц и отобразить только определенную страницу.

Метод работает следующим образом: он принимает массив элементов, максимальную глубину и номер страницы, а также количество элементов на странице. Затем он обрабатывает массив элементов и генерирует XHTML-код только для элементов, относящихся к указанной странице. Это позволяет разбить длинный список на более управляемые части и улучшить производительность.

Walker::paged_walk( array $elements, int $max_depth, int $page_num, int $per_page, mixed $args ): string

Метод paged_walk() принимает следующие параметры:

  • $elements (обязательный) — массив элементов.
  • $max_depth (обязательный) — максимальная глубина иерархии.
  • $page_num (обязательный) — номер страницы, начиная с 1.
  • $per_page (обязательный) — количество элементов на странице.
  • $args (необязательный) — дополнительные аргументы.

Метод возвращает строку XHTML для указанной страницы элементов.


/**
 * Пример использования метода paged_walk()
 */
// Массив элементов
$elements = array(
  'Элемент 1',
  'Элемент 2',
  'Элемент 3',
  'Элемент 4',
  'Элемент 5',
  'Элемент 6',
  'Элемент 7',
  'Элемент 8',
  'Элемент 9',
  'Элемент 10'
);
// Максимальная глубина иерархии
$max_depth = 2;
// Номер страницы
$page_num = 2;
// Количество элементов на странице
$per_page = 3;
// Дополнительные аргументы (необязательно)
$args = array(
  'arg1' => 'значение1',
  'arg2' => 'значение2'
);
// Вызов метода paged_walk()
$result = Walker::paged_walk($elements, $max_depth, $page_num, $per_page, $args);
// Вывод результата
echo $result;

В данном примере метод paged_walk() будет обрабатывать массив элементов и сгенерирует XHTML-код для элементов, относящихся к второй странице (так как $page_num равно 2) с максимальной глубиной иерархии 2 и 3 элементами на странице. Результат будет выведен на экран.

start_el()

Метод start_el() является частью класса Walker в WordPress и используется для вывода элемента деревоподобной структуры. Он вызывается при начале вывода каждого элемента и позволяет настроить вывод элемента в соответствии с требованиями разработчика.

Метод start_el() принимает на вход несколько параметров, включая строку $output, объект $data_object, глубину элемента $depth, массив дополнительных аргументов $args (по умолчанию пустой массив) и идентификатор текущего элемента $current_object_id (по умолчанию 0).

Метод start_el() используется для настройки вывода элемента деревоподобной структуры, например, для добавления классов, атрибутов или оберток вокруг элемента. Он позволяет разработчику полностью контролировать вывод элементов и создавать кастомные шаблоны.

Walker::start_el( string $output, object $data_object, int $depth, array $args = array(), int $current_object_id )

$output (строка, обязательный) — используется для добавления дополнительного контента (передается по ссылке).

$data_object (объект, обязательный) — объект данных.

$depth (целое число, обязательный) — глубина элемента.

$args (массив, необязательный) — массив дополнительных аргументов. По умолчанию: пустой массив.

$current_object_id (целое число, необязательный) — идентификатор текущего элемента. По умолчанию: 0.

<?php
/**
 * Пример использования метода start_el()
 *
 * @param string $output          Используется для добавления дополнительного контента (передается по ссылке).
 * @param object $data_object     Объект данных.
 * @param int    $depth           Глубина элемента.
 * @param array  $args            Массив дополнительных аргументов. По умолчанию: пустой массив.
 * @param int    $current_object_id Идентификатор текущего элемента. По умолчанию: 0.
 */
function custom_start_el( &$output, $data_object, $depth = 0, $args = array(), $current_object_id = 0 ) {
    // Ваш код здесь
}
?>

start_lvl()

Метод start_lvl() является частью класса Walker и используется для начала списка перед добавлением элементов. Он вызывается автоматически при выводе структуры дерева.

Метод принимает три параметра: $output, $depth и $args. Параметр $output используется для добавления дополнительного контента (передается по ссылке). Параметр $depth указывает глубину элемента в дереве. Параметр $args является массивом дополнительных аргументов.

Walker::start_lvl( string $output, int $depth, array $args = array() )

Метод start_lvl() вызывается автоматически и не требует явного вызова в коде. Он используется для начала списка перед добавлением элементов. При вызове метода передается строка $output, которая может быть изменена внутри метода. Также передается глубина элемента $depth и массив дополнительных аргументов $args.

$output (string) — Обязательный. Используется для добавления дополнительного контента (передается по ссылке).

$depth (int) — Обязательный. Глубина элемента в дереве.

$args (array) — Опционально. Массив дополнительных аргументов. По умолчанию: array().

<code>$output</code> = 'Some additional content';
<code>$depth</code> = 2;
<code>$args</code> = array('arg1' => 'value1', 'arg2' => 'value2');
Walker::start_lvl( <code>$output</code>, <code>$depth</code>, <code>$args</code> );
// Внутри метода start_lvl() можно изменять значение <code>$output</code> и использовать переданные параметры <code>$depth</code> и <code>$args</code>.

В данном примере показано, как вызывается метод start_lvl() с передачей параметров. Переменная $output содержит строку с дополнительным контентом. Переменная $depth содержит значение 2, указывающее на глубину элемента в дереве. Переменная $args содержит массив с двумя дополнительными аргументами.

unset_children()

Метод unset_children() класса Walker используется для удаления всех дочерних элементов для заданного элемента верхнего уровня.

Этот метод работает путем перебора массива дочерних элементов и удаления каждого элемента из массива.

Метод unset_children() может быть использован, например, для удаления всех дочерних элементов меню или списка категорий.

Walker::unset_children( object $element, array $children_elements )

Метод unset_children() принимает два обязательных параметра:

  • $element (объект) — элемент верхнего уровня, для которого нужно удалить дочерние элементы.
  • $children_elements (массив) — массив дочерних элементов.

$element (объект, обязательный): Элемент верхнего уровня. Это объект, для которого нужно удалить дочерние элементы.

$children_elements (массив, обязательный): Массив дочерних элементов. Это массив, содержащий все дочерние элементы для заданного элемента верхнего уровня.


/**
 * Удаление дочерних элементов для заданного элемента верхнего уровня.
 *
 * @param object $element           Элемент верхнего уровня.
 * @param array  $children_elements Массив дочерних элементов.
 */
Walker::unset_children( $element, $children_elements );

walk()

Метод walk() является частью класса Walker в WordPress и используется для отображения иерархических структур массива элементов. Он отображает элементы массива в виде древовидной структуры.

Walker::walk( array $elements, int $max_depth, mixed $args ): string

Метод walk() принимает три параметра: массив элементов $elements, максимальную глубину иерархии $max_depth и дополнительные аргументы $args. Он возвращает строку, представляющую иерархический элемент.

$elements (array) — Обязательный. Массив элементов, которые нужно отобразить.

$max_depth (int) — Обязательный. Максимальная глубина иерархии.

$args (mixed) — Опционально. Дополнительные аргументы.

Метод walk() возвращает строку, представляющую иерархический элемент.

<?php
$elements = array(
    array(
        'id' => 1,
        'name' => 'Element 1',
        'children' => array(
            array(
                'id' => 2,
                'name' => 'Element 2',
                'children' => array(
                    array(
                        'id' => 3,
                        'name' => 'Element 3'
                    )
                )
            )
        )
    )
);
$max_depth = 3;
$args = array(
    'option1' => 'value1',
    'option2' => 'value2'
);
$output = Walker::walk( $elements, $max_depth, $args );
echo $output;
?>

В данном примере у нас есть массив элементов $elements, содержащий иерархическую структуру. Мы также устанавливаем максимальную глубину иерархии $max_depth равной 3 и передаем дополнительные аргументы $args. Затем мы вызываем метод walk() класса Walker с этими параметрами и сохраняем результат в переменную $output. Наконец, мы выводим результат на экран.

Примеры использования

Создание списка элементов


class My_Walker extends Walker {
    function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
        // Создание списка элементов
    }
}

Метод display_element используется для создания списка элементов. Он принимает следующие параметры:

  • $element — текущий элемент
  • $children_elements — массив дочерних элементов
  • $max_depth — максимальная глубина вложенности
  • $depth — текущая глубина вложенности
  • $args — дополнительные аргументы
  • $output — ссылка на строку вывода

Отображение элемента


class My_Walker extends Walker {
    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
        // Отображение элемента
    }
}

Метод start_el используется для отображения каждого элемента. Он принимает следующие параметры:

  • $output — ссылка на строку вывода
  • $item — текущий элемент
  • $depth — текущая глубина вложенности
  • $args — дополнительные аргументы
  • $id — идентификатор элемента

Начало списка


class My_Walker extends Walker {
    function start_lvl( &$output, $depth = 0, $args = array() ) {
        // Начало списка
    }
}

Метод start_lvl используется для начала списка перед добавлением элементов. Он принимает следующие параметры:

  • $output — ссылка на строку вывода
  • $depth — текущая глубина вложенности
  • $args — дополнительные аргументы

Конец списка


class My_Walker extends Walker {
    function end_lvl( &$output, $depth = 0, $args = array() ) {
        // Конец списка
    }
}

Метод end_lvl используется для завершения списка после добавления элементов. Он принимает следующие параметры:

  • $output — ссылка на строку вывода
  • $depth — текущая глубина вложенности
  • $args — дополнительные аргументы

Постраничный вывод элементов


class My_Walker extends Walker {
    function paged_walk( $elements, $max_depth, $page_num, $per_page, $args = array() ) {
        // Постраничный вывод элементов
    }
}

Метод paged_walk используется для постраничного вывода элементов. Он принимает следующие параметры:

  • $elements — массив элементов
  • $max_depth — максимальная глубина вложенности
  • $page_num — номер текущей страницы
  • $per_page — количество элементов на странице
  • $args — дополнительные аргументы

Удаление дочерних элементов


class My_Walker extends Walker {
    function unset_children( &$elements, $parent, $max_depth ) {
        // Удаление дочерних элементов
    }
}

Метод unset_children используется для удаления дочерних элементов. Он принимает следующие параметры:

  • $elements — массив элементов
  • $parent — родительский элемент
  • $max_depth — максимальная глубина вложенности

Вопросы и ответы

Как создать собственный класс Walker?

Для создания собственного класса Walker в WordPress необходимо создать новый класс, который будет наследоваться от класса Walker. В этом классе можно определить свои методы для обработки и отображения элементов дерева.

Пример создания собственного класса Walker:


class My_Walker extends Walker {
    // Код вашего класса
}

Как использовать метод display_element?

Метод display_element используется для обхода элементов дерева и создания списка из этих элементов. Он вызывается для каждого элемента дерева.

Пример использования метода display_element:


class My_Walker extends Walker {
    function display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output ) {
        // Код обработки элемента
    }
}

Как использовать метод end_el?

Метод end_el вызывается после вывода каждого элемента дерева. Он позволяет добавить дополнительный код после каждого элемента.

Пример использования метода end_el:


class My_Walker extends Walker {
    function end_el( &$output, $item, $depth = 0, $args = array() ) {
        // Код после вывода элемента
    }
}

Как использовать метод end_lvl?

Метод end_lvl используется для завершения списка после добавления элементов. Он вызывается автоматически внутри метода walk.

Пример использования метода end_lvl:


class My_Walker extends Walker {
    function end_lvl( &$output, $depth = 0, $args = array() ) {
        $output .= "</ul>n";
    }
}

Как использовать метод get_number_of_root_elements?

Метод get_number_of_root_elements используется для подсчета общего количества корневых элементов. Он возвращает число.

Пример использования метода get_number_of_root_elements:


class My_Walker extends Walker {
    function get_number_of_root_elements( $elements ) {
        return count( $elements );
    }
}

Как использовать метод paged_walk?

Метод paged_walk используется для создания страницы вложенных элементов. Он принимает массив элементов и параметры.

Пример использования метода paged_walk:


class My_Walker extends Walker {
    function paged_walk( $elements, $max_depth, $page_num, $per_page, $args ) {
        // код метода
    }
}

Как использовать метод start_el?

Метод start_el используется для начала вывода элемента. Он принимает два параметра: $output и $item.

Переменная $output содержит текущий вывод элемента, а переменная $item представляет элемент, который будет выведен.

Пример использования метода start_el:


class My_Walker extends Walker {
    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
        $output .= "<li>" . $item->title . "</li>";
    }
}

Как использовать метод start_lvl?

Метод start_lvl используется для начала вывода списка перед добавлением элементов. Он принимает два параметра: $output и $depth.

Переменная $output содержит текущий вывод списка, а переменная $depth представляет уровень вложенности списка.

Пример использования метода start_lvl:


class My_Walker extends Walker {
    function start_lvl( &$output, $depth = 0, $args = array() ) {
        $output .= "<ul class='sub-menu'>";
    }
}

Как использовать метод unset_children?

Метод unset_children используется для удаления всех дочерних элементов для заданного элемента верхнего уровня. Он принимает один параметр: $top_element_id.

Пример использования метода unset_children:


class My_Walker extends Walker {
    function unset_children( $top_element_id ) {
        unset( $this->children[ $top_element_id ] );
    }
}

Класс Walker представляет собой инструмент для отображения различных древовидных структур. Он содержит методы для управления выводом элементов и списков. Методы start_el, start_lvl и unset_children позволяют настраивать вывод элементов и списков в соответствии с требованиями проекта. Использование класса Walker позволяет создавать гибкие и мощные структуры для отображения данных в WordPress.

Обсуждение