我想通过编写自己的模块来修改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”页面的“页面回调”也不会改变。
非常感谢您提前
答案 0 :(得分:0)
尝试在HOOK_menu_alter()实现结束时执行* var_dump *或类似操作,并检查是否正确看到更改
答案 1 :(得分:0)
好的,经过几个小时的测试和玩耍后,我发现了自己的错误。我将类型定义为String,但它似乎是一个常量。我的天啊!