繁体   English   中英

hook_menu问题

[英]hook_menu issues

我有一个挂钩菜单

$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) {
...
}

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

编辑

我再去...

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

$form = drupal_get_form('_mymodule_delete', $the_node);

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

$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属性,这会使您的页面无法访问(403状态),因此我在access content的“标准”访问参数中添加了。 您可能需要根据自己的需要进行更改。

字符串node/%node/delete (路由器路径)和页面参数数组是您可能对此感兴趣的位。 当您要将参数从URL传递给回调函数时,只需将其“索引”作为页面参数之一包含在内。 当由分隔符( / )分割时,该索引来自路由器路径的从零开始的数组。

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

0 => 'node',
1 => '%node',
2 => 'delete'

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

只是使其变得更复杂一点,通过路径传递的变量在传递给page callback函数之前也可以传递给加载函数。 由于某种原因,Drupal中的命名约定是,在函数名称后附加_load的函数将是被调用函数的名称。

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

加载函数是可选的,如果您的路径是node/%/delete则传递给表单回调的参数将是URL中的确切字符串(在本例中为节点ID)。

我敢肯定您已经看过了,但是hook_menu()文档尽了最大的努力来解释所有这一切,但是我可以理解为什么很难理解它。

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM