EDIT
Я еще раз попытать ...
Единственный аргумент (ы) вам необходимо пройти drupal_get_form
, кроме названия самой формы, являются аргументы, специфичные для этой формы функции; $form
и $form_state
автоматически добавляются. Так что если вы хотите, чтобы вызвать форму с подписью _mymodule_delete($form, $form_state, $node)
вы бы использовать этот код:
$form = drupal_get_form('_mymodule_delete', $the_node);
При применении этого к маршрутизатору меню, все, что вы хотите сделать, это пройти загруженную $node
через как Аналогичным образом аргумент равен drupal_get_form
. Ваша деталь маршрутизатора будет выглядеть следующим образом:
$items['node/%node/delete'] = array(
'title' => 'Title',
'page callback' => 'drupal_get_form',
'page arguments' => array('_mymodule_delete', 1),
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
'weight' => -4,
);
Вашего оригинальный пример отсутствует атрибут access arguments
/access callback
, который сделает вашу страницу недоступной (403 статуса), поэтому я добавил в «стандартных» аргументах доступа access content
. Вероятно, вы захотите изменить это для своих нужд.
Строка node/%node/delete
(путь маршрутизатора) и массив аргументов страницы являются битами, которые вы, вероятно, интересуетесь здесь. Если вы хотите передать аргумент из URL-адреса в функцию обратного вызова, вы просто включаете его как «индекс» в качестве одного из аргументов страницы. Этот индекс исходит от нулевого массива пути маршрутизатора при разделении разделителем (/
).
В этом примере три части пути являются:
0 => 'node',
1 => '%node',
2 => 'delete'
Как изменяемый элемент пути находится в позиции индекса 1
, это число мы переходим к page arguments
массива.
Просто, чтобы сделать его немного более сложным, переменная передается через путь также может быть передан в функцию нагрузки перед тем она передается функции page callback
. По какой-то причине соглашение об именах в Drupal заключается в том, что функция с именем переменной с добавленным к ней _load
будет именем вызываемой функции.
Так что в этом случае вызывается node_load
. Если ваш маршрут маршрутизатора был, например, books/%book
, тогда вызывалась функция с именем book_load
для подготовки переменной, которая должна быть передана функции page callback
.
Функция загрузки является необязательной, если ваш путь был node/%/delete
, тогда аргумент, переданный вашему обратному вызову формы, будет точной строкой (в данном случае идентификатором узла) из URL-адреса.
Я уверен, что вы его видели, но hook_menu()
documentation изо всех сил пытается объяснить все это, я могу понять, почему это было бы сложно понять.
Надеюсь, что это поможет.
Хорошо, боюсь, я дал плохой пример :) Я не нацелен на вариант удаления. Это был просто пример. Фактически, это настраиваемая функция в моем настраиваемом модуле. Это не имеет никакого отношения к удалению :) – Michiel
Ах! Я отредактировал ответ выше с совершенно новым, надеюсь, что он делает трюк :) – Clive
Святое дерьмо, это какой-то массивный ответ! Но это помогло мне намного больше, как документация Drupal. Бесконечно благодарен! Опять ... :) Еще два вопроса. Что мне нужно сделать, чтобы внести изменения в загруженный узел в функции '_mymodule_delete'? И какова реальная функция аргументов «обратного вызова»? Вы дали «доступ» и «контент», но каковы возможности и функции этих элементов? – Michiel