9

我有一个自定义 Drupal 模块在表格中显示一些数据。每行都有一个链接,如果单击该链接将删除相关行。具体来说,当点击链接时,它会将用户带到一个确认页面。这个页面实际上只是一个 Drupal 表单,上面写着“你确定吗”,有两个按钮:“是”、“否”。我想我需要将 rowID 传递给确认页面。

我的问题:在 Drupal 7 中将数据传递到新页面的典型方法是什么?我想我可以将 rowID 添加到 URL 并使用确认页面中的 $_GET[] ...我认为这不是很安全,并且想知道是否有更好的“Drupal”方式。

谢谢!

4

3 回答 3

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

}

?>

您可以在此处查看核心模块如何执行此操作的示例(查看 node_delete_confirm)

于 2010-06-13T12:36:21.107 回答
1

最简单的解决方案是使用为此目的创建的现有模块:

您可以配置可以从 URL 设置哪些表单值,然后重写表中显示的字段以生成必要的链接。

于 2012-12-10T18:57:56.120 回答
0

如果数据是节点,您可以使链接节点/%/删除,其中%是nid。Drupal 知道如何处理删除页面,作为它的核心路径。然后,删除确认跟随系统的其余部分并且非常“Drupal”。

我不确定这在 Drupal 7 中是否发生了变化,但这是我为无数模块所做的。

于 2010-06-12T17:55:34.493 回答