2012-12-18 3 views
0

나는이 예제를 전부 조사했지만 어떤 것도 찾지 못했습니다. profile과 같은 쿼리 인수를 포함하는 path의 별칭을 만들려고합니다? arg1 = 113.Drupal 7 쿼리 인수가있는 path_save

path_save()에 경로의 일반 문자열 표현을 제공하거나, url()을 제공하면 문제가되지 않습니다.

url('profile', array('query' => array('arg1' => $uid))) 

어느 쪽이든, ?=은 URL 별칭 관리 페이지에 이스케이프 문자로 표시됩니다. 이는 경로를 찾을 수 없다는 것을 의미합니다.

어떻게 보관할 수 있습니까? 그리고 도망친 것?

12/19/12 편집 1 : 더 큰 맥락은 Profile2 프로필이 저장 될 때 내가 별칭을 설정 (즉, mymodule_profile2_presave에()) 시도하고 있다는 것입니다 - 내가해야 할 때 그건 별칭을 프로그래밍 방식으로 설정하는 데 필요한 모든 정보

12/19/12 편집 2 : 그냥 삽입 문제가 아니라는 것을 알았습니다. url_alias 테이블에는 실제로 이스케이프 처리되지 않은 문자가 있습니다. 문제는 Drupal이 경로를 사용하기 전에 urldecode하지 않는다는 것입니다 ...

12/20/12 편집 3 : 경로 별명 대신 Redirect을 사용하여 해결책을 찾았습니다. Redirect는 쿼리 문자열을 적절하게 디코딩합니다!

답변

0

별칭의 대상에 쿼리 문자열을 첨부 할 수 없습니다. drupal_path_initialize()에서 실행 된 코드는 쿼리 문자열을 올바르게 처리하지 않습니다.

이 함수에는 다음 코드가 포함되어 있습니다.

$_GET['q'] = drupal_get_normal_path($_GET['q']); 

는 점 경로 별칭으로 "예"을 "? 노드/93 UID = 1"이 있다고 가정; 해당 코드는 $_GET['q']'node/93?uid=1'으로 설정하고 $_GET['q']'node/93', $_GET['uid']1으로 설정합니다.

다음 코드와 유사한 코드를 사용하여 hook_inbound_alter()을 구현할 수 있습니다. 빠른 답변

function mymodule_url_inbound_alter(&$path, $original_path, $path_language) { 
    list ($path, $query) = explode('?', $path); 
    $_GET += drupal_get_query_array($query); 
} 
+0

덕분에, @kiamlaluno,하지만 불행히도, hook_inbound_alter는() 나는 path_save()를 호출 할 때 내가 만드는거야 별칭으로 호출되지 않습니다 - 적어도, 문맥에있는 내가 전화 했어 그것. 더 큰 컨텍스트는 [Profile2] (http://drupal.org/project/profile2) 프로필이 저장 될 때 (즉, mymodule_profile2_presave()) 별칭을 설정하려고 할 때입니다. 별칭을 프로그래밍 방식으로 설정하는 데 필요한 모든 정보가 있습니다. mymodule_url_inbound_alter()를 추가했지만 프로필을 저장할 때 사용자 프로필을 편집하기위한 경로와 함께 호출됩니다. – LEN

+0

죄송합니다. 나는 그 부분에서 분명하지 않았습니다. 'hook_inbound_alter()'는 URL을 Drupal에서 사용하기 전에 변경하는데 사용됩니다. 내가 사용하고있는 코드는 node/93? uid = 1과 같은 경로를 node/93으로 변경하고'$ _GET [ 'uid']를 1로 설정하는 데 사용된다. path_save() 저장하지만 노드/93과 같은 경로를 피합니까? 93? uid = 1은 ID가 93? uid = 1 인 노드를 찾는 데 사용됩니다. – kiamlaluno

+0

문제 없습니다. 원래 게시물을 만들었을 때 더 큰 컨텍스트를 제공 했어야했습니다 (지금 해당 정보를 게시물에 추가 할 것입니다). – LEN