在配置drupal模块期间有多种形式

时间:2015-08-12 06:02:35

标签: drupal

我创建了一个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 。即使在我单击第一个表单中的提交按钮后,我也会看到第一个表单。我必须清除缓存才能看到第二个表单。可能是什么原因?这是一个缓存问题吗?如果是,我需要做些什么来阻止缓存?

2 个答案:

答案 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已被缓存,因此您需要在表单中处理它。