Получить узел, который будет отображаться под пунктом меню View - PullRequest
2 голосов
/ 12 августа 2009

Итак, у меня есть тип контента «Новости», а затем вид, который показывает список узлов новостей в виде пункта меню.

Есть ли способ выделить представление новостей в дереве меню при просмотре узла новостей?

Я вроде знаю, почему это не работает, и почему это может быть хакерским, но должен быть способ иметь элемент меню «по умолчанию» или что-то, под чем может отображаться узел.

Ответы [ 4 ]

1 голос
/ 13 августа 2009

На самом деле, я нашел модуль, который в основном выполняет то, что делает ответ template.php выше, позволяя вам назначить элемент меню по умолчанию по типу контента.

Это называется Меню Trails . Вот выдержка из его страницы проекта:

... добавляет удобство использования системы меню в Drupal

  • Меню Trails реализует первичные / вторичные ссылки, которые сохраняют текущее меню «активным» или выделенным. Удобный фрагмент, готовый для перехода в ваш template.php.
  • Модуль предоставляет возможность широкой категоризации узлов (по типу или таксономии) как попадающих «под» известный пункт меню. Эти узлы не добавляются в дерево меню (сохраняя в здравом уме систему администрирования меню), но при запуске они вызывают приведенную выше функциональность - сохранение состояния навигации для пользователя.
  • Новое для 6.0: меню Trails также может устанавливать панировочные сухари для узлов, синхронизируя их с тропой.
  • Новое в 6.0: меню Trails теперь известно для органических групп, поэтому узлы можно назначить так, чтобы они попадали "под" первый узел группы, к которому они принадлежат.
  • Новое для 6.0: токен открыт для pathauto (и других модулей, поддерживающих токен), что позволяет использовать след меню при автоматическом создании псевдонимов пути.
0 голосов
/ 29 октября 2009

Я обнаружил, что у вас больше контроля, если вы делаете что-то подобное в hook_nodeapi ().

// this code worked for me
$somenode = menu_get_item();
$somenode['href'] = 'node/5';
menu_set_item(NULL, $somenode);

Возможно, вам придется установить вес вашего пользовательского модуля так, чтобы он был тяжелее основных модулей: не менее 1

0 голосов
/ 13 августа 2009

если Menutrails не работает (для меня это не сработало), вы можете сделать это самостоятельно, например:

$somenode = menu_get_item('node/5');

menu_set_item($somenode);

0 голосов
/ 12 августа 2009

Предполагая, что ответ на мой комментарий выше "да", это то, что вы можете сделать с помощью файла template.php в папке вашей темы

Окончательное решение будет зависеть от ваших настроек, но, как правило, большая часть действия будет происходить внутри phptemplate_preprocess_page

// Simplified, and untested in this form
    function phptemplate_preprocess_page(&$vars) {                        
      if (isset($vars['node'])) { // if we're looking at a node
        $body_classes[] = (($vars['node']->type == 'News') || (arg(0) == 'News')) ? 'news_page' : '';             // Page is news page
      }
      else if (arg(0) == 'taxonomy') {
        // ... Special handling for news taxonomy pages, if you want
      } else {
        $body_classes[] = "page-type-" . arg(0);
      }
      $body_classes = array_filter($body_classes); // Out! Out! Damn empty elements!
      $vars['body_classes'] = implode(' ', $body_classes);  
    }

Это даст вам класс стиля body.news_page для работы, и вы можете комбинировать его со стилем блока новостей, чтобы он выглядел так, как вам нравится.

...