2010-06-12 2 views
9

У меня есть собственный модуль Drupal, отображающий некоторые данные в таблице. Каждая строка имеет ссылку, которая при нажатии будет удалять соответствующую строку. В частности, при щелчке ссылки пользователь перейдет на страницу подтверждения. Эта страница на самом деле просто форма drupal, которая говорит «вы уверены» с двумя кнопками: «Да», «Нет». Я полагаю, что мне нужно будет передать rowID на страницу подтверждения.Аргумент аргумента Drupal на странице

Мой вопрос: Каков типичный способ передачи данных на новую страницу в Drupal 7? Наверное, я могу просто добавить rowID к URL-адресу и использовать $ _GET [] со страницы подтверждения ... Я не думаю, что это очень безопасно, и мне было интересно, есть ли лучший способ «Drupal».

Спасибо!

ответ

17

Вы бы использовать что-то вроде следующего

<?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')); 

} 

?> 

Вы можете посмотреть здесь примеры how core modules do it (имеют вид на node_delete_confirm)

+0

Также обратите внимание, что для Drupal 7 существует система сущности. Поэтому, если ваши «строки» являются сущностями домена, вы должны рассмотреть возможность использования Entity api, поскольку это облегчит вашу кодировку, особенно если вы полагаетесь на этот модуль http://drupal.org/project/entity – redben

+0

Спасибо, это помогло получить меня на правильном пути. Я нашел хороший учебник здесь: http://www.akchauhan.com/create-an-action-confirm-form-using-confirm_form-function-in-drupal/ – stotastic

+0

Я нашел потрясающий пример в этом видео учебное пособие: http://buildamodule.com/video/drupal-7-core-concepts-how-to-add-and-manipulate-pages-with-the-menu-system-how-to-use-placehoders-to-to-m- pass-arguments-in-the-middle-of-path –

0

Если данные являются узлами, вы можете сделать узел ссылки /%/delete, где% - это нип. Drupal знает, как обрабатывать страницу удаления, как основной путь. Затем подтверждение удаления следует за остальной частью системы и очень «Drupal».

Я не уверен, что это вообще изменилось в Drupal 7, но это то, что я сделал для бесчисленных модулей.

+0

Его в основном строка в таблице MySQL, а не узел ... так что я не думаю, что то, что я ищу – stotastic

+1

Как данные попадают в систему, если не связан ее узел? В любом случае, вы бы просто составили mymodule /%/delete как крючок меню, где% - идентификатор строки. Эта страница вызовет drupal_get_form с формой подтверждения и hook_submit процессы, которые. – Kevin

+0

это приложение, использующее Drupal для обработки утомительных вещей, таких как управление пользователями и темы. Данные попадают в инструкцию insert. – stotastic

1

Самым простым решением было бы использовать существующий модуль, созданный для этого цель:

Вы можете указать, какие значения формы могут быть установлены из URL, а затем переписать поля, отображаемые в таблице, чтобы сгенерировать необходимые ссылки.

Смежные вопросы