Просмотр ноды и активный пункт меню.

Главные вкладки

Аватар пользователя ltolean ltolean 29 мая 2008 в 9:50

Разрабатываю каталог продуктов. Столкнулся с проблемой: при просмотре продукта не активируется пункт меню катерии к которой относится продукт.
Меню создается следующим образом:

Products (/products)
Authentication (/products/10 - 10 это ИД категории из таксономии)
Developers tools (/products/11)
.....

Отображение продуктов относящихся к категории работает прекрасно, но при просмотре продукта возникает выше описанная проблема.
Решил ее таким образом:

function products_nodeapi(&$node, $op, $teaser, $page) {
...
case 'view':
if ($node->type == 'products' && $page) {
$breadcrumb[] = l(t('Home'), '');
$breadcrumb[] = l(t('Products'), 'products');
$breadcrumb[] = l($term->name, 'products/'.$term->tid);
...
menu_set_active_item("products/".$term->tid);
...
}

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

Если я убираю вызов menu_set_active_item("products/".$term->tid); появляются и пункты редактирования контента ноды и ссылки relativity.

Возможен ли в такой ситуации компромисс: и отображение всех необходимых ссылок и "подсвечивание" категории к которой относится продукт?

В такой комбинации

Комментарии

Аватар пользователя ltolean ltolean 30 мая 2008 в 9:14

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

Эта проблема встречается сплошь и рядом.
Даже при использовании View для отображения списка элементов совместно с таксономией, при просмотре ноды, меню теряет "фокус".

Аватар пользователя Химический Али Химический Али 30 мая 2008 в 10:24

Чем реализованы ваши категории? Таксономия?
В каком конркетно меню вы хотите подсвечивать пункты? В праймери, навигационном, хлебных крошках?

Модуль menutrails видели?

Аватар пользователя ltolean ltolean 30 мая 2008 в 12:14

Да, категории реализованы на таксономии.
Меню создано стандарным образом. В админке добавил новое меню: Top menu. Оно горизонтальное, многоуровневое. Поэтому я написал свой обработчик для его отображения. Активные пункты подсвечиваются нормально.

Изучал массив в котором содержится меню сайта. Как оказалось у ноды находящейся в $menu['items'] неправильно задан pid. Он указывал на следующую структуру:
array(8) {
["path"]=> string(4) "node"
["title"]=> string(7) "Content"
["access"]=> bool(true)
["type"]=> int(16)
["weight"]=> int(0)
["language"]=> string(0) ""
["pid"]=> int(1)
["children"]=> array(2) {
[0]=> int(9)
[1]=> int(-324)
}
}

В функции products_nodeapi для $op=='view' проделал следующий трюк:

global $_menu;
$menuParent = $_menu["path index"]['products/'.$term->tid];
$nodeMenuItem = $_menu["path index"]['node/'.$node->nid];

$_menu["items"][$nodeMenuItem]["pid"] = (int)$menuParent;

После этого при просмотре ноды продукта стало появляться меню, но не подсвечивается категория продукта к которой относится просматриваемый продукт.

Есть ли более простой путь?

Просмотреть как оно сейчас выглядит можно тут: http://dekart.homeip.net/en/products

Аватар пользователя ltolean ltolean 30 мая 2008 в 13:08

Мне удалось заставить меню работать так как мне нужно. Модуль самописный поэтому могу в рамках разумного манипулировать программныйм кодом.
Результат можно просмотреть тут: http://dekart.homeip.net/en/products/private-disk

Осталась другая нерешенная проблема.
Наглядно можно просмотреть здесь:
http://dekart.homeip.net/en/support/demo
http://dekart.homeip.net/en/content/demo-1

Хотелость бы аналогичного поведения как и в продуктах:
http://dekart.homeip.net/en/products/private-disk
http://dekart.homeip.net/en/products/85

Раздел Демо, сделан при помощи Views. Указан фильтр Demo по Node: Type