2013-06-05 3 views
0

나는 간단한 모듈이 :드루팔 : 페이지 인수로 패스 기능 이름은

나는 'cabinet_mysettings'

function cabinet_mysettings() { 
debug('call settings'); 
global $user; 

$cabinet = user_load($user->uid); 
return $cabinet; 
} 

function cabinet_page($cabinet) { 
debug($cabinet); 
} 

'cabinet_page'에서 디버그라는 함수 '페이지 인수'에 전달하려는

function cabinet_menu() { 
$items['cabinet'] = array(
    'title' => 'cabinet', 
    'title callback' => 'cabinet_title', 
    //'title arguments' => array(1), 
    'page arguments' => array('cabinet_mysettings'), 
    'page callback' => 'cabinet_page', 
    'access arguments' => array('access content'), 
    'type' => MENU_NORMAL_ITEM, 
); 

return $items; 
} 

"cabinet_mysettings"문자열 만 표시합니다.

왜 메뉴 훅은 페이지 인수가 함수 이름이 아니라 스팅인지 이해하지 못합니까?

UPD : (STABLE) 모듈 hook_menu :

$items['devel/reinstall'] = array(
'title' => 'Reinstall modules', 
'page callback' => 'drupal_get_form', 
'page arguments' => array('devel_reinstall'), 
'description' => 'Run hook_uninstall() and then hook_install() for a given module.', 
'access arguments' => array('access devel information'), 
'file' => 'devel.pages.inc', 
'menu_name' => 'devel', 

);

'devel_reinstall'은 기능이라고 생각합니다.

누군가 이러한 콜백이 작동하는 방식을 알고 있습니까?

답변

0

페이지 인수는 무언가를 수행하도록 설계되지 않았습니다. 그것들을 사용하여 URL에 넣음으로써 페이지 콜백에 인수를 전달합니다.

'page arguments'=> array ('cabinet_mysettings')와 같이 페이지 인수에 문자열을 넣으면 해당 문자열 만 전달됩니다. 이 문제를 해결할 방법이 없습니다. 더 자세한 설명은 hook_menu documentation을 참조하십시오.

function cabinet_menu() { 
    $items['cabinet/%'] = array(
    'title' => 'cabinet', 
    'title callback' => 'cabinet_title', 
    'page arguments' => array(1), 
    'page callback' => 'cabinet_page', 
    'access arguments' => array('access content'), 
    'type' => MENU_NORMAL_ITEM, 
); 

    return $items; 
} 

function cabinet_mysettings() { 
    debug('call settings'); 
    global $user; 

    $cabinet = user_load($user->uid); 
    return $cabinet; 
} 

function cabinet_page($my_param_name) { 
    $cabinet = cabinet_mysettings($my_param_name); 
    debug($cabinet); 
} 

이 도움을합니까 :

따라서, 귀하의 경우이 같은 뭔가를 고려할 것?

+0

m1n0, 나에게 분명합니다. 하지만 모듈이 'cabinet_title'및 'cabinet_page'함수에서 생성 한 데이터를 공유하려고합니다. URL에 wildchar이 없습니다. 전에 'cabinet_title'및 'cabinet_page'라는 함수가 필요합니다. 모듈 데이터를 생성해야합니다. – menelai

+0

모든 기능에서 'cabinet_mysettings'를 호출해야합니까, 아니면 올바른 방법이 있습니까? – menelai

+0

네, 데이터를 필요로하는 모든 함수에서 'cabinet_mysettings'를 호출하는 것이 가능합니다 ... 또한 데이터를 저장하는 정적 객체 또는 세션 변수를 고려하는 것이 좋습니다. 특정 경우이지만, 광범위한 처리를 수행하거나 데이터베이스에서 데이터를로드하는 경우 해당 함수를 여러 번 호출하지 않아도됩니다. 내가 가장 좋아하는 옵션은 정적 객체이다. 그러나 그것은 꽤 우아한 해결책이지만 완전히 "drupal way"가 아니다. – m1n0