0

我想通过编写自己的模块来修改 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”页面的“页面回调”也没有改变。

非常感谢您提前

4

2 回答 2

0

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

于 2014-04-02T01:56:06.133 回答
0

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

于 2014-04-03T13:49:39.093 回答