0

我已经到处搜索了这个例子,但我没有找到任何例子。我正在尝试为包含查询参数的路径创建别名,例如 profile?arg1=113。

如果我提供path_save()路径的纯字符串表示形式,或者我是否提供url().

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

无论哪种方式,=在 URL 别名管理页面上显示为转义字符,这自然意味着找不到路径。

我怎样才能保持?和=被逃脱?

2012 年 12 月 19 日编辑 1:更大的背景是我试图在保存Profile2配置文件时设置别名(即在 mymodule_profile2_presave() 中)——那时我将拥有我需要的所有信息以编程方式设置别名。

2012 年 12 月 19 日编辑 2:我刚刚意识到问题不在于插入端 - url_alias 表中实际上有未转义的字符。问题是 Drupal 在使用它之前不会对路径进行 urldecode ......

2012 年 12 月 20 日编辑 3:找到使用重定向而不是路径别名的解决方案。重定向正确解码查询字符串!

4

1 回答 1

0

您不能将查询字符串附加到别名的目的地。从drupal_path_initialize()执行的代码没有正确处理查询字符串。

该函数包含以下代码。

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

假设您有“example”作为指向“node/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);
}
于 2012-12-19T08:18:00.737 回答