2012-01-10 34 views
1

我有一个钩子菜单hook_menu发出

$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

回答

1

编辑

我有另一个去......

的唯一参数(S),你需要传递给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传递一个参数到一个回调函数时,你可以简单地将它作为页面参数之一包含'index'。此索引来自分隔符(/)分隔的路由器路径的从零开始的数组。

在这个例子中的路径的三个部分:

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() documentation尽力解释所有这些,我可以理解为什么它很难理解。

希望有所帮助。

+0

好吧,恐怕我给了一个不好的例子:)我不瞄准删除选项。这只是一个例子。实际上,这是我自定义模块中的自定义功能。它与删除无关:) – Michiel 2012-01-10 16:15:57

+0

啊!我已经编辑了一个全新的答案上面的答案,希望它的窍门:) – Clive 2012-01-10 18:01:43

+0

神圣的废话,这是一些巨大的答案!但是它确实帮助我做了更多的Drupal文档。太感谢了!再次... :)但还有两个问题。我在'_mymodule_delete'函数中加载节点时需要做些什么? “访问回调”参数的真正功能是什么?你给了'access'和'content',但是这些项目的可能性和功能是什么? – Michiel 2012-01-10 20:38:21