Лучший Ответ Kess , 11 December 2013 - 22:14
1. Я иногда использую такое:
if (JRequest::getVar('category_id') || JRequest::getVar('item_id')) {
$zoo = App::getInstance('zoo');
$catid = JRequest::getInt('category_id');
$itemid = JRequest::getInt('item_id');
if($itemid !== 0) {
$item = $zoo->table->item->get($itemid);
$catid = $item->getPrimaryCategoryId();
}
$catobj=$zoo->table->category->get($catid);
$catalias = $catobj->alias;
}
Этот код нужно вставить в index.php шаблона джумлы. В переменной $catalias будет алиас текущей категории или родительской категории, если мы находимся в товаре. Дальше нужно добавить новый вывод модуля в тот же index.php, как-то так:
<jdoc:include type="modules" name="<?php echo $catalias; ?>" style="html5" />
Получается, что название позиции этого модуля будет зависеть от текущей категории. Останется только вручную для нужного модуля указать название позиции, равное алиасу категории, в которой он должен отображаться:
Для обычных модулей на этом все закончится, с фильтром немного сложнее. При нажатии на поиск мы потеряем привязку к категории или к товару, так что нужно немного изменить модуль поиска, чтобы этого не происходило. Файл modules/mod_jbzoo_search/tmpl/default.php (а лучше использовать оверрайд шаблона, чтобы изменения не пропали после обновления JBZoo). Внизу есть несколько скрытых инпутов, нужно добавить туда еще два:
<input type="hidden" name="category_id" value="<?php echo JRequest::getInt('category_id'); ?>"/>
<input type="hidden" name="item_id" value="<?php echo JRequest::getInt('item_id'); ?>"/>
С помощью этого мы притащим на страницу с результатами поиска id категории или товара, так что модуль не пропадет.
Вот и все, вроде бы ничего не забыл, попробуйте.
2. Такого не делал, пока есть только идея для варианта на основе CSS. С помощью той же $catalias из предыдущего примера можно добавить класс на body или на другой внешний контейнер:
<body class="<?php echo $catalias; ?>">
И сделать новый шаблон для фильтра с разными позициями - по одной для каждой категории. Т.е. все характеристики для музыки - в одну позицию, для видео - в другую. Конечно, у вывода этих позиций должны быть разные классы, на основании которых можно будет показывать их в нужный момент.
Попробую более наглядно объяснить, вот упрощенный пример вывода модуля поиска:
<div class="filter">
<div class="video">
поле фильтра
поле фильтра
поле фильтра
</div>
<div class="music">
поле фильтра
поле фильтра
поле фильтра
</div>
<div class="painting">
поле фильтра
поле фильтра
</div>
</div>
Вот пример css для скрытия/показа нужных полей:
.filter > div {
display: none;
}
body.video .filter > div.video {
display: block;
}
body.video .filter > div.music {
display: block;
}
body.video .filter > div.painting {
display: block;
}
Это все, конечно, не очень удобно - все нужно делать вручную, для каждой категории. По-хорошему, это тоже как-то надо бы сделать с помощью php, но у меня пока нет идей.
Перейти к сообщению


Тема закрыта







