使用hook_menu_alter覆盖Web表单模块的页面回调

时间:2014-04-01 21:55:43

标签: drupal hook-menu

我想通过编写自己的模块来修改webform模块的菜单设置。虽然我通过侵入webform的代码实现了我想要的东西,但我无法通过编写自己的模块来实现这一目标。

我的目标是以某种方式覆盖webform 4,特定用户可以访问模块提供的分析页面,而不会让他们访问所有结果。

取自contrib模块的webform_menu()

  $items['node/%webform_menu/webform-results'] = array(
    'title' => 'Results',
    'page callback' => 'webform_results_submissions',
    'page arguments' => array(1, FALSE, '50'),
    'access callback' => 'webform_results_access',
    'access arguments' => array(1),
    'file' => 'includes/webform.report.inc',
    'weight' => 2,
    'type' => MENU_LOCAL_TASK,
    'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
  );
  $items['node/%webform_menu/webform-results/submissions'] = array(
    'title' => 'Submissions',
    'page callback' => 'webform_results_submissions',
    'page arguments' => array(1, FALSE, '50'),
    'access callback' => 'webform_results_access',
    'access arguments' => array(1),
    'file' => 'includes/webform.report.inc',
    'weight' => 4,
    'type' => MENU_DEFAULT_LOCAL_TASK,
  );
  $items['node/%webform_menu/webform-results/analysis'] = array(
    'title' => 'Analysis',
    'page callback' => 'webform_results_analysis',
    'page arguments' => array(1),
    'access callback' => 'webform_results_access',
    'access arguments' => array(1),
    'file' => 'includes/webform.report.inc',
    'weight' => 5,
    'type' => MENU_LOCAL_TASK,
  );

我模块的代码是:

<?php
function webformanalysis_permission() {
  return array(
    'access all webform results analysis' => array(
      'title' => t('Access all webform results Analysis'),
      'description' => t('Grants access to the "Analysis" tab on all webform content.'),
    ),
  );
}

function webformanalysis_menu_alter(&$items) {
    $items['node/%webform_menu/webform-results']['access arguments'] = array('access all webform results analysis');
    $items['node/%webform_menu/webform-results']['page callback'] = 'webform_results_analysis';
    $items['node/%webform_menu/webform-results']['page arguments'] = array(1);
    unset($items['node/%webform_menu/webform-results']['access callback']);

    $items['node/%webform_menu/webform-results/analysis']['access arguments'] = array('access all webform results analysis');
    $items['node/%webform_menu/webform-results/analysis']['type'] = 'MENU_DEFAULT_LOCAL_TASK';
    unset($items['node/%webform_menu/webform-results/analysis']['access callback']);

    $items['node/%webform_menu/webform-results/submissions']['type'] = 'MENU_LOCAL_TASK';
}

但代码没有做任何事情。因为我清除了缓存。 出了什么问题。甚至“webform-results”页面的“页面回调”也不会改变。

非常感谢您提前

2 个答案:

答案 0 :(得分:0)

尝试在HOOK_menu_alter()实现结束时执行* var_dump *或类似操作,并检查是否正确看到更改

答案 1 :(得分:0)

好的,经过几个小时的测试和玩耍后,我发现了自己的错误。我将类型定义为String,但它似乎是一个常量。我的天啊!