Walker_Nav_Menu вложенное меню

473
06 января 2017, 08:51
class mainMenuWalker extends Walker_Nav_Menu {
  //для начала зададим класс для вложенного пункта меню тегу ul
  //функция start_lvl формирует превую строчку в шаблоне вывода списка, это нам и нужно.
  function start_lvl( & $output, $depth = 0, $args = array()) {
      $indent = str_repeat("\t", $depth);
      $output. = "\n$indent<ul class=\"menu__sub\">\n"; // указываем нужный нам класс, теперь все вложенные теги ul будут иметь указанный класс.
    }
    // если необходимо обозначить тег li, что он является родительским элементом вложенного списка модифицируем немного функцию display_element.
  function display_element($element, & $children_elements, $max_depth, $depth = 0, $args, & $output) {
      //получим  id элемента пункта меню
      $parent_elem = $this - > db_fields['id'];
      //         проверим есть ли в нем вложенный список
      if (!empty($children_elements[$element - > $parent_elem])) {
        // запишем в массив classes необходимый нам класс и присвоим элементу списка
      }
      Walker_Nav_Menu::display_element($element, $children_elements, $max_depth, $depth, $args, $output);
    }
    //Ну а здесь уже приведем в нужный нам вид классы li элемента
  function start_el( & $output, $item, $depth, $args) {
    // назначаем классы li-элементу и выводим его
    //для этого добавим наш класс в массив classes

    $item - > classes['li_class'] = 'menu__item main-text';
    // и напрямую укажем какие классы из массива мы хотим использовать.
    $class_names = ' class="menu__item main-text"';
    $output. = '<li '.$class_names.
    '>';
    // назначаем атрибуты a-элементу
    $attributes. = !empty($item - > url) ? ' href="'.esc_attr($item - > url).
    '" class="hover__link"  ': '';
    $item_output = $args - > before;
    // проверяем, на какой странице мы находимся
    $current_url = (is_ssl() ? 'https://' : 'http://').$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    $item_url = esc_attr($item - > url);
    $item_output. = '<a'.$attributes.
    '>'.$item - > title.
    '</a>';

    // заканчиваем вывод элемента
    $item_output. = $args - > after;
    $output. = apply_filters('walker_nav_menu_start_el', $item_output, $item, $depth, $args);
  }
}

Мне нужно вложенное меню. Я переписал Walker_Nav_Menu. Проблема вот в чем. Когда я нахожусь в <ul class=\"menu__sub\">\n" мне нужно подставлять в методе start_el совершенно другие классы. Как мне сделать проверку нахожусь ли я в блоке menu__sub (это блок вложенного меню, появляется при наведении на родителя и использует совершенно другие классы) или нет?

READ ALSO
Как обновлять DataTable через Ajax jQuery?

Как обновлять DataTable через Ajax jQuery?

Есть html форма вутри нее находится datatable c tr и td-вкоторых хранятся значения полученный из БдКак обновлять таблицу допустим через каждые 5 секунд...

303
Код не находит кнопки [требует правки]

Код не находит кнопки [требует правки]

Всё работало нормальноНи с того ни с сего VisualStudio начал выдавать ошибку: A namespace cannot directly contain members such as fields or methods

333
Вывод текста в TextBox WPF

Вывод текста в TextBox WPF

Есть переменная, которая получает значение вычисляемое методом при поступлении новых данных с потокаКак сделать программное изменение...

1134
Как конвертировать SolidColorBrush в Hex?

Как конвертировать SolidColorBrush в Hex?

Это приводит к странному результату: #FF-80-80-0080-80-0080-0000

357