跳转到主要内容
aloneblood 提交于 4 June 2015

最近在一个多语言网站上把google_appliance换成D7 自带的 search 发现了一个问题,一直搞不明白,直到没办法去看了源码。

问题如标题,具体触发条件为:

1、网站是多语言,这里为Chinese, Simplified,以下简称 zh-hans(默认站点),English,以下简称 en;

2、网站的node都启用了pathauto 来生成url;

3、添加node的时候选择了zh-hans或en,而不是选择Language neutral (就是不限什么语言);

4、当你在zh-hans 网站下搜索一些英文,一般会出现 en 下的一些node,而这些en下的node,它的链接(search-result.tpl.php 的变量 $url)不是你之前定义的alias,如 news/hello ,而是node/232 ,并且不会前网址前加上 /en,同样,在en下搜索中文,也有这种问题。

我查看了源码,主要原因是因为drupal在生成这个$url的时候调用了 

function drupal_get_path_alias($path = NULL, $path_language = NULL)

但第二个变量并没有传进当前node的 language,造成下面处理查询时,条件的错误,也就是只能查到数据 表url_alias 字段language = und 的数据,我们只要传进这个值就行。

我们可以为这个变量增加处理方法,在template文件里增加方法

function THEMENAME_preprocess_search_result(&$variable) {
  $url = drupal_get_path_alias('node/'.$variable['result']['node']->nid, $variable['result']['node']->language);
  if ($variable['result']['node']->language == 'en') {
    $variable['url'] = '/en/' . $url;
  }
  else {
    $variable['url'] = '/' . $url;
  }
}

在运行drush cc all后,url alias就正常了。

Drupal 版本