Аргумент передачи Drupal на страницу
У меня есть пользовательский модуль Drupal, отображающий некоторые данные в таблице. Каждая строка имеет ссылку, которая при нажатии удалит соответствующую строку. В частности, когда ссылка нажата, она приведет пользователя к странице подтверждения. Эта страница действительно просто форма drupal, которая говорит "Вы уверены" с двумя кнопками: "да", "нет". Я полагаю, что мне нужно будет передать rowID на страницу подтверждения.
мой вопрос: каков типичный способ передачи данных на новую страницу в Drupal 7? Наверное, я ... можно просто добавить rowID в URL-адрес и использовать $_GET[] со страницы подтверждения... Я не думаю, что это очень безопасно, и мне было интересно, есть ли лучший способ "Drupal".
спасибо!
3 ответов
вы бы использовали что-то вроде следующего
<?php
function yourmod_menu() {
// for examlple
$items['yourmod/foo/%/delete'] = array(
'title' => 'Delete a foo',
'page callback' => 'drupal_get_form',
'page arguments' => array('youmode_foo_delete_confirm', 2), // 2 is the position of foo_id
'access arguments' => array('delete foo rows'),
'type' => MENU_CALLBACK,
);
return $items;
}
function yourmod_foo_delete_confirm($form, &$form_state, $foo_id) {
// load the row
$foo = yourmod_get_foo($foo_id);
// build your form, if you need to add anything to the confirm form
// ....
// Then use drupal's confirm form
return confirm_form($form,
t('Are you sure you want to delete the foo %title?',
array('%title' => $foo->title)),
'path/to/redirect',
t('Some description.'),
t('Delete'),
t('Cancel'));
}
?>
вы можете посмотреть здесь примеры как основные модули это делают (посмотрите на node_delete_confirm)
самым простым решением было бы использовать существующий модуль, созданный для этой цели:
- http://drupal.org/project/entityreference_prepopulate (по сущности)
- http://drupal.org/project/nodereference_url (для ссылок на узлы)
- http://drupal.org/project/prepopulate (для других значений формы)
вы можете настроить, какие значения формы могут быть установлены из URL, затем перепишите поля, отображаемые в таблице, чтобы создать необходимые ссылки.
Если данные являются узлами, вы можете сделать узел связи / % / delete, где % является nid. Drupal знает, как обрабатывать страницу удаления, как ее основной путь. Затем подтверждение удаления следует за остальной частью системы и очень "Drupal".
Я не уверен, изменилось ли это вообще в Drupal 7, но это то, что я сделал для бесчисленных модулей.