2014-04-01 1 views
0

고유 한 모듈을 작성하여 webform 모듈의 메뉴 설정을 수정하고 싶습니다. webform 코드를 해킹하여 원하는 것을 얻었지만 내 모듈을 작성하여이 작업을 수행 할 수는 없었습니다.hook_menu_alter를 사용하여 웹 양식 모듈의 페이지 콜백을 무시하십시오.

내 목표는 특정 결과를 사용자가 모든 결과에 액세스하지 않고 모듈에서 제공하는 분석 페이지에 액세스 할 수있는 방식으로 webform 4를 재정의하는 것입니다.

<?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'; 
} 

그러나 코드는 아무것도되지 않습니다 들어있는 contrib 모듈

$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, 
); 

내 모듈의 코드 webform_menu()에서 촬영

입니다. 내가 캐시를 비웠다. 무엇이 잘못 되었나요? "webform-results"페이지의 "page callback"조차도 변경되지 않습니다.

답변

0

는 *를 위해서 var_dump를 시도하여 사전에 대단히 감사 * 또는 올바르게

+0

감사합니다. 웹 페이지를 갈 때마다 전체 메뉴 배열의 7 배를 얻습니다 (메뉴 쉐이크를 지우면 훅이 한 번만 호출된다고 생각했습니다). 변경 내용이 적용됩니다. – user3486983

0

확인 변경 사항을 볼 경우 시험 시간 후, 확인하여 HOOK_menu_alter() 구현과의 끝에 유사한 놀아, 나는 내 실수를 발견했다. 유형을 String으로 정의했지만 Constant로 보입니다. 세상에!

관련 문제