Улучшаем модуль Категории для Joomla 3 часть 2

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

Сам алгоритм вывода дерева категорий в данном модуле построен по принципу лупинга или looping. В нашем случае шаблон отображения элементов пробегает по каждому элементу(категории) $item в объекте $list, а когда нужно отобразить вложенную категорию и она существует, то он получает их список по родительской категории и производит на лету подмену предварительно сохраненного в $temp объекта $list, после чего возвращает все на свои места и идет дальше по родительским категориям опять.  Все изменение описанные ниже я проделал в файле default_items.php уже с моей улучшенной версий модуля из ссылки в интро. 

Улучшаем модуль Категории для Joomla 3 часть 2

Для того, чтобы реализовать задуманное мне понадобилось получить ID активной категории из input`a Joomla 3, добавилась строка 17:

$bc     = $params->get('catid');

Чтобы немного изменить стиль отображения активной категории в модуле, в моем случае она становится черной, строку номер 22 привел к виду:

 <a <?php if ($id == $item->id && $view == 'category' && $option == 'com_content' or $cid == $item->id && $view == 'article') echo 'style="color: #fff; background: #000; left: 3px; text-decoration: none"'; ?> href="/<?php echo JRoute::_(ContentHelperRoute::getCategoryRoute($item->id)); ?>">

Теперь если вы откроете категорию где нибудь в меню, или перейдете прямо в материал, то категория к которой он относится раскроется и станет активной в модуле. Далее чтобы моя первоначальная задумка работала, пришлось обратиться к еще одному циклу foreach и пробежаться по вложенным категориям до обращения к лупингу, добавляем строки 32,33,34:

 <?php $children = $item->getChildren(); ?>
<?php foreach ($children as $child) : ?>
<?php if ($id == $item->id || $id == $child->id || $cid == $child->id) : ?>

Ну и в 45 строке закрываем новые foreach и if:

<?php endif; ?><?php endforeach; ?>

 Как обычно скачать уже измененный файлы для простой ручной замены вы можете по ссылке ниже:

Скачать файл mod_articles_categories-v2.zip (6kb)
Уже скачали 6 раз

Просто замените файл default_items.php из скаченного архива выше в папке  templates/ваш-шаблон/html/mod_articles_categories/, а файл mod_articles_categories.xml поместить в /modules/mod_articles_categories/ заменив им родной.

 

Если пост тебе помог - поделись с друзьями. Это будет наилучшая поддержка для меня!

Для того чтобы задать вопрос или оставить комментарий вы можете авторизоваться через любую социальную сеть ниже:

Добавить комментарий