Как найти, к какому меню принадлежит узел в drupal? - PullRequest
4 голосов
/ 06 февраля 2010

В настоящее время на моем сайте настроены узлы, и каждый узел принадлежит определенному меню (а не первичным или вторичным предварительно созданным меню).

Как узнать, к какому меню относится узел?

Ответы [ 4 ]

10 голосов
/ 15 апреля 2011

Может быть, это то, что вы имеете в виду:

$trail        = menu_get_active_trail();
$lastInTrail  = end($trail);
$menu_name    = $lastInTrail['menu_name'];

menu_get_active_trail () возвращает массив, похожий на крошки, последний крошка представляет текущий узел.

Cheers, Лорен Мёрс, Роттердам

3 голосов
/ 06 февраля 2010

Я нуб, так что не ругайте меня, если то, что я собираюсь написать, бесполезно болтать.

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

Информация об узле хранится в «узле» таблицы SQL и идентифицируется просто по NID (идентификатор узла, который является номером узла, который появляется после /? Q = узла / в адресе). Их псевдонимы, если таковые имеются, хранятся в таблице «url_alias», где вы можете найти столбцы «src» и «dst», идентифицирующие исходный и псевдонимный путь (например, src = 'node / 123', dst = 'my / URL / псевдоним). Ссылки меню можно найти в таблице «menu_links», где вы можете найти столбцы «menu_name» (машинное имя меню) и «link_path» (либо узел / ..., либо псевдоним).

Итак, вам нужно сделать следующее:

  1. получить NID текущего узла
  2. запросить "url_alias", если есть псевдоним для узла / NID, и извлечь его, в противном случае оставить узел / NID
  3. запросить в таблице «menu_links» определенный вами путь и получить «none» или машиночитаемое имя меню

Затем вы также можете запросить таблицу «menu_custom», чтобы проверить, какое понятное человеку имя меню вы определили.

В любом случае, это сложный запрос (несколько запросов?), И я не знаю MySQL, поэтому я не могу помочь вам с реальным кодом, который вам нужно будет использовать для проверки всего этого: P.

0 голосов
/ 24 августа 2010

http://drupal.org/node/584984

Обновлено: извините, ребята, даже не подозревал, что я разместил эту ссылку. Я думаю, что я задумал это как черновик и просто разместил его при закрытии вкладок. Тем не менее, Минго (выше) это правильно. Моя ссылка на функцию menu_get_active_menu_name (), которая появляется, чтобы предоставить вам массив, содержащий активное меню для текущей страницы. Как я полагаю, это то, для чего вы его используете, это был бы хороший способ абстрагироваться от вызовов базы данных, которые могут вызвать проблемы в будущем. Я сам никогда не пробовал, поэтому, вероятно, я не стал подробно рассказывать и публиковать. ну ... по крайней мере, не публиковать специально.

0 голосов
/ 06 февраля 2010

Это не прямое решение, и я вижу из вашего ответа на предыдущий ответ, что вы не хотели самое простое из возможных решений, но я подумал, что упомяну этот вариант. Модуль API узла меню *1001* поддерживает таблицу, которой нет в Drupal, таблицу отношений между узлами и меню.

Модуль ничего не делает сам по себе, но, похоже, есть дополнительные модули, основанные на этом, поэтому в зависимости от того, насколько сложна ваша проблема, это может быть отправной точкой.

...