2009-10-02 3 views
3

모듈별로 _menu()에서 모든 와일드 카드를 처리 할 수 ​​있습니다._menu()에서 드루팔 (Drupal 6 절대 와일드 카드) 가능합니까?

나는

display/page/% 처럼에 대한 특정 와일드 카드를 알고 있지만 그 경로 display/page/3/andOrderBy/Name

작동하지 않습니다 내가

display/page/3/12/45_2/candy/yellow/bmw/turbo

I과 같은 매개 변수의 예상치 못한 액수를 처리하려면 무엇을 _menu() 경로를 사용하여 모든 ARGUMENTS를 처리하고 싶습니다.

어떻게하면됩니까?

답변

3

Drupal은 추가 URL 요소를 hook_menu 콜백 함수에 추가 매개 변수로 전달합니다. 콜백에 func_get_args()을 사용하면 해당 요소를 가져올 수 있습니다. 또한 'andOrderBy'및 암시 추가 것과 같은 '이름'

그래서 당신은 하나의 와일드 카드 display/page/%를 등록하면,하지만 실제 요청은 명시 적 매개 변수로, 콜백이 전달됩니다 '3'이 개 추가 요소 display/page/3/andOrderBy/Name을 가지고 있지만.

예 콜백 :

function yourModuleName_display_callback($page_number) { 
    // Grab additional arguments 
    $additional_args = func_get_args(); 
    // Remove first one, as we already got it explicitely as $page_number 
    array_shift($additional_args); 
    // Check for additional args 
    if (!empty($additional_args)) { 
    // Do something with the other arguments ... 
    } 
    // other stuff ... 
} 
0

아) 당신은 바로 여기

내가 그것을 해결하는 방법입니다했다.

function mysearch_menu() { 
$items['mysearch/%'] = array(
'page callback' => 'FN_search', 
'access callback' => TRUE, 
); 
return $items; 
} 


function FN_search() 
{ 
    return print_r(func_get_args(),true); 
}; 
+2

BTW, 그것은, 그래서 만약 당신의 모듈은, 'mysearch'라고 콜백이'mysearch_search' 또는'mysearch_FN_search' 이름을 지정해야합니다 이름 충돌을 방지하기 위해 모듈 이름을 가진 모든 기능을 접두사하는 드루팔의 표준 관행이다 . 그렇지 않으면 기존 인스턴스에 새 모듈을 추가하면 사이트가 중단 될 수 있습니다. –