Ruslan Brest, rb.labtodo.com

Разработка ПО, сайтов и веб-сервисов. CodeIgniter, PHP, MySQL, W3C CSS/XHTML, MaxSite CMS, OpenCart, PrestaShop

Opencart 1.5.x: индикация текущей категории в главном меню

Опубликовано: 31 июля 2011.
Автор: Ruslan Brest.

Рубрика: 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 } ?>
twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru digg.com friendfeed.com liveinternet.ru livejournal.ru yandex.ru del.icio.us

Комментариев: 13

  1. 03.09.2011 в 11:03:27 | #1

    А вы не могли бы подсказать, как вывести меню третьего уровня в стандартном горизонтальном меню ocStore v1.0.1, излазил практически весь интернет но решения так и не нашёл. Прошу извинить если проблема всего лишь в моей невнимательности

  2. Ruslan Brest
    03.09.2011 в 14:03:26 | #2

    По умолчанию не предусмотрен вывод всех подкатегорий. Чтобы добавить ещё, надо в контроллере и шаблоне добавлять информацию о третьем уровне, и ещё позаботиться о стилях меню.

    catalog/controller/common/header.php

    catalog/view/theme/default/template/common/header.tpl

    catalog/view/theme/default/stylesheet/stylesheet.css

    Подробней не смотрел.

  3. 03.09.2011 в 14:30:50 | #3

    Вы знаете Руслан, к сожалению я всего лишь любитель, и пока ещё код для, меня как тёмный лес. Возможно в будущем всё изменится.

    Если вам будет интересно самому - и вы найдёте немного времени "разжевать и в рот положить" ;) это поможет не только мне одному, тема поднимается часто но решения нет как нет. Возможно вам Руслан сделать это будет под силу ?

  4. Ruslan Brest
    04.09.2011 в 13:07:33 | #4

    Под силу, реализация там несложная, у меня она займёт 1-2 часа. Но всё упирается в ресурсы и приоритеты. Я сейчас не успеваю справляться с двумя очень важными для меня проектами, которые кормят, а список задач (если отбросить неважные и несрочные) состоит из 184 пунктов. Из них 118 - важные.

    То есть для того, чтобы эта задача попала в список ближайших кандидатов на исполнение, она должна успешно конкурировать с сотней других. И хоть Опенкарт входит в число этих 2 "горящих" проектов, вопрос наличия 3-го уровня меню для меня сейчас неактуален: по этому проекту у меня есть масса других забот. Поэтому шансы на переключение на эту задачу пока минимальны.

  5. 04.09.2011 в 18:55:33 | #5

    Да, конечно, семью надо кормить, это основной и безусловный приоритет. Спасибо за ответ Руслан.

  6. Ruslan Brest
    12.09.2011 в 10:52:10 | #6

    Алексей, я добавил сегодня заметку о том, как сделать в главном меню вывод ещё одного уровня категорий. См. в рубрике OpenCart.

    Надеюсь, формат diff-ов не вызовет затруднений, там вроде бы всё понятно: имена файлов указаны, где найти, что убрать и что добавить (плюсики, минусы) - мне кажется, интуитивно понятно.

  7. 20.09.2011 в 09:39:24 | #7

    Блестяще, Руслан! Огромное вам спасибо!

    Руслан, могу ли я как то пропиарить ваш труд ? (Извиняюсь что пишу не из своего аккаунта, куда то пароль затерял :( )

  8. Ruslan Brest
    20.09.2011 в 10:17:20 | #8

    Конечно! Я буду только рад любому пиару, ссылкам и мешкам денег :)

    Авторство комментария поправил, а пароль зарегистрированного пользователя можно восстановить, найдя себя среди старых комментариев или на странице http://rb.labtodo.com/users/

  9. 06.12.2011 в 17:28:42 | #9

    А возможно ли выделить скажем жирным или большим шрифтом категории, чтоб при этом подкатегории остались прежними?

  10. Ruslan Brest
    06.12.2011 в 18:43:16 | #10

    Да, конечно. Стили у них разные, что в меню, что в модуле категорий, поэтому достаточно их найти и изменить. Зависит от темы. Добавить что-то вроде text-transform:uppercase;

  11. 06.12.2011 в 20:02:35 | #11

    Для модуля категорий я так понимаю нужно искать в файле

    \catalog\view\theme\....\template\module\category.tpl

    или все таки category.php

  12. Ruslan Brest
    06.12.2011 в 20:16:46 | #12

    Нет, в стилях. Обычно stylesheet.css в соответствующей теме. Если тема не сильно отличается от default - ищите там стили для

    .box-category > ul > li > a

  13. 06.12.2011 в 20:40:36 | #13

    Спасибо дальше сам разберусь, удачи в начинаниях!

Оставьте комментарий!

Гость
Комментатор / хотите им стать

Чтобы стать комментатором, введите email и пароль. Напишите комментарий. В дальнейшем ваша связка email-пароль позволит комментировать, получать уведомления об ответах и редактировать свои данные. Не забудьте про активацию (инструкция придёт на email, указанный при регистрации).

Авторизация: Facebook. MaxSiteAuth. Loginza

(обязательно)