【问题标题】:Drupal pass argument to pageDrupal 将参数传递给页面
【发布时间】:2010-06-12 17:26:57
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: drupal drupal-7


    【解决方案1】:

    你会使用类似下面的东西

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

    【讨论】:

    • 另请注意,对于 Drupal 7,有一个实体系统。因此,如果您的“行”是域实体,您应该考虑使用 Entity api,因为它可以简化很多编码,特别是如果您依赖此模块 drupal.org/project/entity
    • 谢谢,这帮助我走上了正轨。我在这里找到了一个很好的教程:akchauhan.com/…
    • 我在这个视频教程中找到了一个很棒的例子:buildamodule.com/video/…
    • 对于 Drupal 6,它的工作原理几乎相同,但确认功能将是 function yourmod_foo_delete_confirm($form_state, $foo_id)
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 它基本上是 MySQL 表中的一行,而不是一个节点......所以我认为这不是我要找的东西
      • 与节点无关的数据如何进入系统?无论如何,您只需将 mymodule/%/delete 组成一个菜单挂钩,其中 % 是行 ID。该页面将使用确认表单调用 drupal_get_form,然后 hook_submit 处理。
      • 它有点像一个应用程序,使用 Drupal 来处理诸如用户管理和主题之类的繁琐工作。数据通过插入语句进入。
      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2013-06-01
      • 2010-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多