Приветствую. Есть необходимость создания страницы похожих на текущую нод по определенным критериям, при этом путь должен быть что то типо nodes-same-[cur_node_title], пробую создавать эти страницы через hook_menu. Для теста пробую записать в адрес хотя бы nid ноды, пишу примерно так:
<?php
/**
* Implements hook_menu().
*/
function anyg_same_nodes_menu() {
$current_node = menu_get_object();
$items = array();
if ($current_node->type == 'article'){
$page_path = 'same-games-'.$current_node->nid;
$items[$page_path] = array(
'title' => 'Custom page',
'page callback' => 'starting_drupal_dev_custom',
'access arguments' => array('access content'),
);
}
return
$items;
}
/**
* Custom callback function.
*/
function starting_drupal_dev_custom() {
return '<p>Hello world</p>';
}?>
Но ничего не выходит, видимо я не понимаю как это работает. Может кто то подсказать что тут не так, в какую сторону копать?
Комментарии
hook_menu() НЕ выполняется в реалтайме, он выполняется при перестройке меню, например, во время сброса кеша.
Кусок кода:
$items = array();
if ($current_node->type == 'article'){
$page_path = 'same-games-'.$current_node->nid;
Лишён смысла.
Вам нужно создать роут с аргументом, типа
'page callback' => 'mymodule_abc_edit',
'page arguments' => array(
1,
),
);
Пример из доки, адаптируете сами.
В % передавать уже заголовок, в page callback - выхватывать заголовок и делать нужную магию.
Единственное, что я не уверен, что хук меню обработает адреса вида
nodes-same-%, но попробуйте для начала хотя бы со слешем
nodes-same/%
А дальше есть минимум два решения этой проблемы
Спасибо, стало немного попонятнее, только немного непонятно - page callback в каком случае вызывается? При открытии страницы?
Да, при открытии страницы
Хук _menu работает так что выполняется при сбросе кеша. Если надо создать страницы для имеющихся материалов типа article, то надо
- Получить запросом все требуемые nid из базы
- В цикле для них создать $items
- Сбросить кеш.
Сайт-то будет работать после такого совета?
Или только если три ноды?
Если выбирать только идшинки, а не как некоторые node_load делать, то всё будет пучком и оптимально.
Проблема в том что при таком подходе в любом случае надо будет делать node_load, так как похожие должны формироваться на основе нескольких словарей тегов каждой ноды
Не обязательно, можно использовать таблицу taxonomy_index
Да хоть дырку без бублика выбирай.
Система меню друпала очень плохо прожёвывает большое количество (десятки тысяч) пунктов.
А если нода добавилась, то ей ждать перестройки меню?
вот что за подход? ТС изначально фигню задумал. А по сути node_clone нужен
Выбор варианта, на самом деле зависит от экосистемы сайта как идеры так и % имеют право на жизнь.