Drupal: создать пункт меню для представления - PullRequest
0 голосов
/ 21 сентября 2010

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

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

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;
}

@ edit

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

Ответы [ 3 ]

1 голос
/ 17 января 2011

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

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

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

1 голос
/ 21 сентября 2010

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

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

Обновление

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

  • Чтобы создать его, вы можете использовать menu_link_save
  • Чтобы удалить его, вы можете использовать menu_link_delete
0 голосов
/ 06 октября 2010

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

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

...