我创建了一个Drupal模块,其中我有多个配置阶段。我维护一个变量来存储它所处的状态(INITIAL,SECOND等)。根据阶段,我想向管理员显示不同的配置表单。我在 hook_menu :
中尝试了以下代码function mymodule_ldap_menu(){
$current_status = variable_get('mymodule_status', 'SETUP');
if($current_status == 'SETUP'){
$items['admin/config/people/mymodule'] = array(
'title' => 'Configure Module',
'page callback' => 'drupal_get_form',
'page arguments' => array('mymodule_setup_form'),
'access arguments' => array('administer users'),
'type' => MENU_NORMAL_ITEM,
);
} else if ($current_status == 'SECOND'){
$items['admin/config/people/mymodule'] = array(
'title' => 'Configure Module: II',
'page callback' => 'drupal_get_form',
'page arguments' => array('mymodule_second_form'),
'access arguments' => array('administer users'),
'type' => MENU_NORMAL_ITEM,
);
} else if ($current_status == 'THIRD'){
$items['admin/config/people/mymodule: III'] = array(
'title' => 'Configure Module',
'page callback' => 'drupal_get_form',
'page arguments' => array('mymodule_third_form'),
'access arguments' => array('administer users'),
'type' => MENU_NORMAL_ITEM,
);
}
return $items;
}
最初,我收到了 SETUP 的表单。我提交第一个表单时,我将 mymodule_status 的值设置为 SECOND 。即使在我单击第一个表单中的提交按钮后,我也会看到第一个表单。我必须清除缓存才能看到第二个表单。可能是什么原因?这是一个缓存问题吗?如果是,我需要做些什么来阻止缓存?
答案 0 :(得分:0)
我不认为hook_menu
是此任务的正确函数,因为hook_menu
已缓存,对该函数的任何更改都需要您清除缓存。也许你应该为你的任务寻找另一个钩子。
答案 1 :(得分:0)
看起来你要做的就是表单向导,你可以在http://www.sitepoint.com/building-multi-page-wizard-like-form-drupal/(或使用CTools http://internetdevels.com/blog/ctools-multistep-wizard-example)看到一些例子。
无论如何,正如@ xurshid29所说,hook_menu
已被缓存,因此您需要在表单中处理它。