Разрабатываю каталог продуктов. Столкнулся с проблемой: при просмотре продукта не активируется пункт меню катерии к которой относится продукт.
Меню создается следующим образом:
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.
Возможен ли в такой ситуации компромисс: и отображение всех необходимых ссылок и "подсвечивание" категории к которой относится продукт?
В такой комбинации
Комментарии
Ребята, заданный мой вопрос настолько туп что у вас даже нет желания на него ответить??
Эта проблема встречается сплошь и рядом.
Даже при использовании View для отображения списка элементов совместно с таксономией, при просмотре ноды, меню теряет "фокус".
Чем реализованы ваши категории? Таксономия?
В каком конркетно меню вы хотите подсвечивать пункты? В праймери, навигационном, хлебных крошках?
Модуль menutrails видели?
Да, категории реализованы на таксономии.
Меню создано стандарным образом. В админке добавил новое меню: 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
Мне удалось заставить меню работать так как мне нужно. Модуль самописный поэтому могу в рамках разумного манипулировать программныйм кодом.
Результат можно просмотреть тут: 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
Подскажи "чайнику", как решил задачу? Неделю маюсь, не могу понять...