最近在一个多语言网站上把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 版本