首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hook_menu问题

hook_menu问题
EN

Stack Overflow用户
提问于 2012-01-11 00:03:12
回答 1查看 417关注 0票数 1

我有一个钩子菜单

代码语言:javascript
复制
$items['node/%/delete'] = array(
        'title' => 'Delete',
        'load arguments' => array(3),
        'description' => 'Confirm the action.',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('_mymodule_delete', 1),
        'type' => MENU_CALLBACK,
        'weight' => -4,
    );
return $items;

我需要做什么来确保下面的函数能够工作(并且变量得到它们的值):

function _mymodule_delete ($form, $form_state, $node) {

代码语言:javascript
复制
       `...`

}

换句话说,如何在给定的三个参数($form$form_state$node)中获取值

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-11 00:12:06

编辑

我再试一次...

除了表单本身的名称之外,您需要传递给drupal_get_form的唯一参数是特定于该表单函数的参数;$form$form_state是自动为您添加的。因此,如果你想调用一个签名为_mymodule_delete($form, $form_state, $node)的表单,你可以使用下面的代码:

代码语言:javascript
复制
$form = drupal_get_form('_mymodule_delete', $the_node);

当您将其应用于menu路由器时,您所要做的就是以同样的方式将加载的$node作为参数传递给drupal_get_form。您的路由器项目将如下所示:

代码语言:javascript
复制
$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属性,该属性将使您的页面无法访问(403status),因此我在access content的“标准”访问参数中添加了该属性。您可能希望根据自己的需要更改此设置。

字符串node/%node/delete (路由器路径)和页面参数数组可能是您在这里感兴趣的部分。当你想把一个参数从URL传递给一个回调函数时,你只需要把它的'index‘作为页面参数之一。此索引来自按分隔符(/)拆分的路由器路径的从零开始的数组。

在此示例中,路径的三个部分为:

代码语言:javascript
复制
0 => 'node',
1 => '%node',
2 => 'delete'

由于路径的变量元素位于索引位置1,这就是我们传递给page arguments数组的数字。

更复杂的是,通过路径传递的变量也可以在传递给page callback函数之前先传递给load函数。由于某些原因,Drupal中的命名约定是,后缀有_load的变量名的函数将是被调用的函数的名称。

因此,在本例中,将调用node_load。例如,如果您的路由器路径是books/%book,那么将调用一个名为book_load的函数来准备要传递给page callback函数的变量。

load函数是可选的,如果您的路径是node/%/delete,那么传递给表单回调的参数将是来自URL的确切字符串(在本例中是一个节点ID)。

我相信你已经看过了,但是hook_menu() documentation会尽最大努力解释这一切,我能理解为什么它很难理解。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8806330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档