2.4.0 - активный пункт меню не активен:)

#1 9 февраля 2016 в 22:46
Здравствуйте!
Суть — при переходе к записи, не обрабатывается пункт со ссылкой на родительскую категорию (обрабатываетя только пункт со ссылкой на родительский тип контента).
Если встречался кто с проблемой, подскажите, пожалуйста, решение. // все встречались (в коробке недоработка)
Кто решил проблему, подскажите, пожалуйста, решение.
Вроде б поднималась подобная тема. Если так, будьте добры, ткните носом (не могу найти).
Спасибо!
#2 12 февраля 2016 в 13:18


Здравствуйте!
Суть — при переходе к записи, не обрабатывается пункт со ссылкой на родительскую категорию (обрабатываетя только пункт со ссылкой на родительский тип контента).

Олег Васильевич я
Судя по всему проблема в том, что в класс активного пункта меню вываливается array. У себя решил таким образом:
В районе 20 строчки asswts\ui\menu.tpl.php заменл
  1. if ($is_active) { $css_classes[] = 'active';}
на
  1. if ($is_active) { $css_classes[] = 'active'; $css_classes = implode(" ", $css_classes);}
#3 12 февраля 2016 в 13:44
Iceman, спасибо, но так ошибка вываливается:

Fatal error: [] operator not supported for strings in ...\assets\ui\menu.tpl.php on line 23

#4 12 февраля 2016 в 19:50
Да, тоже уже увидел, что вредный совет дал. Помог перенос слияния массива на строку вывода классов (примерно 37):
  1. <li <?php if ($css_classes) { ?>class="<?php echo $css_classes; ?>"<?php } ?>>
на
  1. <li <?php if ($css_classes) { ?>class="<?php echo implode(" ", $css_classes); ?>"<?php } ?>>
Но правда протестировал только вскользь.
#5 12 февраля 2016 в 23:56


на

  1. <li <?php if ($css_classes) { ?>class="<?php echo implode(" ", $css_classes); ?>"<?php } ?>>

Iceman
В 2.4.0 37 строка так и выглядит:)
#6 13 февраля 2016 в 11:24
Ковыряя menu.tpl.php вы данный вопрос никак не решите поскольку для определения активного пункта система ориентируется на текущий url (см содержимое public function menu). Однако если очень хочется, то можно попробовать взять за основу не урл, а те же хлебные крошки, то есть
  1. if ($detect_active_id){
  2. .................
  3. }
Заменить на
  1. if ($detect_active_id){
  2. foreach($this->breadcrumbs as $link){
  3. if($item['url'] == $link['href']){ $active_ids[] = $id; }
  4. }
-----------------------------------------------

Специально для Олега Васильевича
Все ровно то же самое можно сделать не выходя за рамки шаблона😊Для этого достаточно прописать в своем шаблоне маленький javascript
  1.  
  2. var menu = $('ul.menu');
  3. $('#breadcrumbs a').each(function(){
  4. menu.find('a[href="' + $(this).attr('href') + '"]').parent('li').addClass('active');
  5. });
  6.  
#7 13 февраля 2016 в 12:35

то же самое можно сделать не выходя за рамки шаблона

Pasha
Раз можно не выходить, то и не будем.
Думаю, не стоит сообщать тем кто следит за темой, что с "маленьким javascriptом" всё работает как надо, раз его предложил Pasha?
Pasha, спасибо!
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.