Opencart 1.5.x: индикация текущей категории в главном меню
Опубликовано: 31 июля 2011.
Рубрика: Howto | Web development | OpenCart.
Просмотров: 2484.
Подписаться на комментарии по RSS.
Добавляем визуальную индикацию текущей выбранной категории в главном меню магазина. Учитывается только первая указанная в пути категория, возможные альтернативы не обрабатываются.
Модифицируемые файлы:
catalog/controller/common/header.php catalog/view/theme/default/stylesheet/stylesheet.css catalog/view/theme/default/template/common/header.tpl
В файле catalog/controller/common/header.php ищем
// Level 1
$this->data['categories'][] = array(
'name' => $category['name'],
'children' => $children_data,
'column' => $category['column'] ? $category['column'] : 1,
'href' => $this->url->link('product/category', 'path=' . $category['category_id'])
);
}
}
изменяем:
// Level 1
$this->data['categories'][] = array(
'name' => $category['name'],
'children' => $children_data,
'column' => $category['column'] ? $category['column'] : 1,
'href' => $this->url->link('product/category', 'path=' . $category['category_id']),
'category_id' => $category['category_id'] // http://rb.labtodo.com/opencart-15x-show-current-category-in-menu
);
}
}
// http://rb.labtodo.com/opencart-15x-show-current-category-in-menu :: BEGIN
if (isset($this->request->get['path'])) {
$parts = explode('_', (string)$this->request->get['path']);
} else {
$parts = array();
}
if (isset($parts[0])) {
$this->data['category_id'] = $parts[0];
} else {
$this->data['category_id'] = 0;
}
// http://rb.labtodo.com/opencart-15x-show-current-category-in-menu :: END
В файле catalog/view/theme/default/stylesheet/stylesheet.css ищем
#menu > ul > li:hover {
background: #000;
}
добавляем:
#menu > ul > li:hover {
background: #000;
}
#menu > ul > li > a.active {
background: #000;
}
В файле catalog/view/theme/default/template/common/header.tpl ищем
<div id="menu">
<ul>
<?php foreach ($categories as $category) { ?>
<li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a>
изменяем:
<div id="menu">
<ul>
<?php foreach ($categories as $category) { ?>
<li><?php if ($category['category_id'] == $category_id) { ?>
<a href="<?php echo $category['href']; ?>" class="active"><?php echo $category['name']; ?></a>
<?php } else { ?>
<a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a>
<?php } ?>
Еще записи по теме
- Opencart 1.5.1.x: Указание размеров картинок в product/category
- Opencart: чем отличаются купоны и подарочные сертификаты?
- Хотите грохнуть репозиторий на Google Code, но не знаете как?
- Как модифицируются способы оплаты для использования с QCPM.1513
- Opencart 1.5.x (admin): показ в списке категорий их SEO Keyword
- Opencart 1.5.x: (catalog) Как добавить сортировку по производителю в каталоге товаров
- Задумались, как пускать в админку сторонних людей (редакторов)




Комментариев: 13
А вы не могли бы подсказать, как вывести меню третьего уровня в стандартном горизонтальном меню ocStore v1.0.1, излазил практически весь интернет но решения так и не нашёл. Прошу извинить если проблема всего лишь в моей невнимательности
По умолчанию не предусмотрен вывод всех подкатегорий. Чтобы добавить ещё, надо в контроллере и шаблоне добавлять информацию о третьем уровне, и ещё позаботиться о стилях меню.
catalog/controller/common/header.php
catalog/view/theme/default/template/common/header.tpl
catalog/view/theme/default/stylesheet/stylesheet.css
Подробней не смотрел.
Вы знаете Руслан, к сожалению я всего лишь любитель, и пока ещё код для, меня как тёмный лес. Возможно в будущем всё изменится.
Если вам будет интересно самому - и вы найдёте немного времени "разжевать и в рот положить" ;) это поможет не только мне одному, тема поднимается часто но решения нет как нет. Возможно вам Руслан сделать это будет под силу ?
Под силу, реализация там несложная, у меня она займёт 1-2 часа. Но всё упирается в ресурсы и приоритеты. Я сейчас не успеваю справляться с двумя очень важными для меня проектами, которые кормят, а список задач (если отбросить неважные и несрочные) состоит из 184 пунктов. Из них 118 - важные.
То есть для того, чтобы эта задача попала в список ближайших кандидатов на исполнение, она должна успешно конкурировать с сотней других. И хоть Опенкарт входит в число этих 2 "горящих" проектов, вопрос наличия 3-го уровня меню для меня сейчас неактуален: по этому проекту у меня есть масса других забот. Поэтому шансы на переключение на эту задачу пока минимальны.
Да, конечно, семью надо кормить, это основной и безусловный приоритет. Спасибо за ответ Руслан.
Алексей, я добавил сегодня заметку о том, как сделать в главном меню вывод ещё одного уровня категорий. См. в рубрике OpenCart.
Надеюсь, формат diff-ов не вызовет затруднений, там вроде бы всё понятно: имена файлов указаны, где найти, что убрать и что добавить (плюсики, минусы) - мне кажется, интуитивно понятно.
Блестяще, Руслан! Огромное вам спасибо!
Руслан, могу ли я как то пропиарить ваш труд ? (Извиняюсь что пишу не из своего аккаунта, куда то пароль затерял :( )
Конечно! Я буду только рад любому пиару, ссылкам и мешкам денег :)
Авторство комментария поправил, а пароль зарегистрированного пользователя можно восстановить, найдя себя среди старых комментариев или на странице http://rb.labtodo.com/users/
А возможно ли выделить скажем жирным или большим шрифтом категории, чтоб при этом подкатегории остались прежними?
Да, конечно. Стили у них разные, что в меню, что в модуле категорий, поэтому достаточно их найти и изменить. Зависит от темы. Добавить что-то вроде text-transform:uppercase;
Для модуля категорий я так понимаю нужно искать в файле
\catalog\view\theme\....\template\module\category.tpl
или все таки category.php
Нет, в стилях. Обычно stylesheet.css в соответствующей теме. Если тема не сильно отличается от default - ищите там стили для
.box-category > ul > li > a
Спасибо дальше сам разберусь, удачи в начинаниях!