Drupal: Создать пункт меню для представления

Создаю небольшую систему бронирования. вы можете создавать узлы типа, которые можно зарезервировать, например, проектор. У меня есть календарный вид с обычными дисплеями. Я добавляю аргумент для ссылки на узел, но у меня проблемы с определением обратного вызова страницы. Кто-нибудь может мне помочь?

Теперь я хочу создать пункты меню для разных узлов.

function your_module_menu() {
$nodeid //semantic, node is loaded right
    $items['reservate/nodeid/$year-w$week'] = array( // semantic, url is built right
        'title' => t('Your Module Name'),
        'description' => t('Menu's description.'),
        'page callback' => 'page_callback_funtion',
        'page arguments' => array('page callback arguments'),
        'access callback' => 'your_module_access',           // the function that validates access based on the user's role(s).
        'access arguments' => array(array(role1', 'role2')), // list of roles authorized - note nested array.
        'type' => MENU_NORMAL_ITEM,
    );
    return $items;
}

@редактировать

ок, может я не очень хорошо объяснил :). У меня есть тип контента: блок, который можно зарезервировать. для каждого создаваемого мной модуля я хочу создать пункт меню (я могу выполнить перестройку меню при сохранении или обновлении узла). меню должно быть связано с представлением с идентификатором узла (единицей) в качестве аргумента в URL-адресе.


person Nealv    schedule 20.09.2010    source источник


Ответы (3)


Я не уверен, что именно вы пытаетесь сделать, но если ваша цель - создать пункт меню, а не новую страницу, которую вы определяете в своем настраиваемом модуле, вам следует использовать систему меню в Drupal. Вы можете создавать пункты меню, указывающие на любой URL-адрес, существующий на вашем сайте.
Для узлов это особенно просто, так как вы можете сделать это прямо в форме редактирования / создания узла.

Drupal кэширует меню, поэтому вы не можете создавать пункты меню с динамическими частями в них, например, идентификатор пользователя и т. Д. Если вы хотите сделать что-то подобное, вы должны создать общий обратный вызов, который либо перенаправляет пользователя на динамический URL-адрес, либо отображать контент в зависимости от пользователя.

Обновить

Вместо того, чтобы перестраивать систему меню каждый раз при создании или удалении узла, что не будет очень масштабируемым, вы можете вместо этого просто создать новый пункт меню с помощью _ 1_ и удалите его при удалении.

  • Для его создания вы можете использовать menu_link_save
  • Чтобы удалить его, вы можете использовать menu_link_delete
person googletorp    schedule 21.09.2010
comment
ок, может я не очень хорошо объяснил :). У меня есть тип контента: блок, который можно зарезервировать. для каждого создаваемого мной модуля я хочу создать пункт меню (я могу выполнить перестройку меню при сохранении или обновлении узла). меню должно быть связано с представлением с идентификатором узла (единицей) в качестве аргумента в URL-адресе. - person Nealv; 21.09.2010

Если я правильно понимаю, вы пытаетесь автоматически создавать пункт меню каждый раз, когда добавляется новый узел содержимого типа «unit». Если это верно, я бы предложил использовать правила модуля и небольшой фрагмент PHP для создания настраиваемого пункта меню при различных системных событиях, таких как создание контента. Вы можете найти руководство, которое я написал по этой теме, полезным:

http://jan.tomka.name/blog/programmatically-creating-menu-items-drupal

Идея проста: настроить правило в модуле Rules для действия, которое будет запускаться при создании или удалении узла, и использовать вызовы API Drupal, упомянутые googletorp, для фактического управления элементами меню.

person Jan Tomka    schedule 17.01.2011

Я нашел очень простой способ сделать это, я просто создал блок просмотра, который создает ссылки с некоторыми фильтрами.

просто и именно то, что мне нужно, не могу понять, почему я не подумал об этом раньше

person Nealv    schedule 06.10.2010