2012-12-18 56 views
0

我已經遍及搜索這個例子,但我還沒有找到任何。我試圖爲包含查詢參數的路徑創建一個別名,例如profile?arg1 = 113。Drupal 7與查詢參數path_save

如果我提供path_save()與路徑的純字符串表示形式,或者如果我提供url()它沒關係。

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

無論哪種方式,=在URL別名admin頁面上顯示爲轉義字符,這自然意味着無法找到路徑。

我該如何保持?和=從逃脫?

12年12月19日編輯1:的大背景是,我試圖建立別名的時候,被保存在Profile2曲線(即mymodule_profile2_presave()) - 這是當我有我需要以編程方式設置別名的所有信息。

12/19/12編輯2:我剛剛意識到問題不在插入端 - url_alias表中實際上有非轉義字符。問題是,Drupal沒有使用它之前urldecode路徑...

12年12月20日編輯3:發現使用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()'用於在從Drupal使用URL之前更改URL。我使用的代碼是用來改變一個像node/93?uid = 1到node/93的路徑,並將'$ _GET ['uid']設置爲1。它不用於改變'path_save()保存,但是它避免了像node/93這樣的路徑?uid = 1用於查找ID等於93 uid = 1的節點。 – kiamlaluno

+0

沒問題。當我發表我的原始帖子時,我應該提供更大的上下文(我現在將該信息添加到帖子中)。 – LEN