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.

3 ответа

Решение

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

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

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

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

Обновить

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

  • Для его создания вы можете использовать menu_link_save
  • Чтобы удалить его вы можете использовать menu_link_delete

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

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

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

Другие вопросы по тегам