2010-08-09 6 views
1

나는 모듈을 다루고 있었고, url 인수를 전달하기 위해 hook_menu를 잘 알고 있었다. 예를 들어 : 그 인수() 함수 옆에URL에있는 로케일 모듈과 언어 접두어

function webtv_playlist_form($form_state, $fifth_arg, $second_arg){ 
... 
} 

$items['webtv/block/%/playlist/edit/%'] = array(
    ... 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('webtv_playlist_form', 5, 2), 
    ... 
); 

및 콜백의 위치에 따라 URL 인수를 얻을 수있는 또 다른 유틸리티입니다.

$second_arg = arg(2); 
$fifth_arg = arg(5); 

로캘 모듈을 사용하여 웹을 다국어로 설정하면 URL은 언어 기호로 접두어로 분류됩니다. 예 : (예)에 따라

en/webtv/block/%/playlist/edit/% 

또는

nl/webtv/block/%/playlist/edit/% 

이 일이 바로 지금, 인수의 정확한 위치 인수의 논리 위치를 변위는 다음과 같습니다

$second_arg = arg(3); 
$fifth_arg = arg(6); 

방법 인수 배치 문제와 무관 한 설치 모듈?

답변

1

Drupal 핵심 코드 (예 : node_menu())를 보면 locale.module이 활성화되어있을 때 메뉴 자리 표시자를 사용하는 메뉴 콜백이 조정되지 않으며 local.module이 다른 모듈에서 정의 된 메뉴를 변경하지 않습니다.

case LANGUAGE_NEGOTIATION_PATH_DEFAULT: 
case LANGUAGE_NEGOTIATION_PATH: 
    // $_GET['q'] might not be available at this time, because 
    // path initialization runs after the language bootstrap phase. 
    $args = isset($_GET['q']) ? explode('/', $_GET['q']) : array(); 
    $prefix = array_shift($args); 
    // Search prefix within enabled languages. 
    foreach ($languages as $language) { 
    if (!empty($language->prefix) && $language->prefix == $prefix) { 
     // Rebuild $GET['q'] with the language removed. 
     $_GET['q'] = implode('/', $args); 
     return $language; 
    } 
    } 

코드는 URL에 전달 된 언어 ID를 제거하고 : 드루팔 부트 스트랩에라는 사실, language_initialize()에서 다음 코드가 포함되어 있습니다. locale.module을 올바르게 설정하면 모듈을 사용할 때 메뉴 콜백 정의를 변경하면 안됩니다.