Joomla 1.5.X 無法搜尋中文的問題

近來翻查網頁資料時,
才發現Joomla 的預設搜尋系統有點奇怪,
無法查核單字。

經上網翻查,原來早有高手解決了此項問題,
現放在這裡作一個小紀錄吧。(粗字為本站補充)

以下內容轉載自:http://www.geryang.com/phpbb/viewtopic.php?f=11&t=31

最近使用Joomla 1.5.9版本架設網站的時候,
往往會有人跟我反應說搜尋引擎無法搜尋中文,
或是搜尋中文有問題,
這其中包含了一些原設計者的使用習慣問題點存在,
在這邊提出一些處理方案給大家參考。

記住,無論作什麼修改,記得先要備份哦。
那麼就算出錯了,也可以用原檔覆蓋。
(養成備份的好習慣對你製作網頁非常有用的)

1. 中英文字元長度不同的使用習慣問題

在Joomla 內建的搜尋模組裡面,
由於開發的是外國人,
平台是在英文的使用習慣上來做開發的,
在英文裡面有效的一些單字通常都在三個字元以上,
相信不會有人用 a 這樣的單一個英文字元來做搜尋,
所以在原開發習慣上模組設定了最少3個字元才能做搜尋,
但是在中文裡面一個字或是兩個字通常就構成一個詞了。

例如說:設計、產品、菌、樹這一些字都是有意義的,
但是在Joomla裡面卻無法搜尋,
依照下面的步驟我們來修正這一個問題。

首先到你的ftp伺服器Joomla目錄裡面依照路徑找到下面這一個文件並開啟他,
…/administrator/components/com_search/helpers/search.php

尋找底下代碼,正常應該在63行的位置
if ( $searchword && JString::strlen( $searchword ) < 3 ) {

這邊代碼裡面 3 的意思就是搜尋的字元限制,
假設我們要將他改成最少2個字元,
那麼就將他修改如下:
if ( $searchword && JString::strlen( $searchword ) < 2 ) {

存檔後就可以測試看看輸入兩個字也可以搜尋了

另外在中文的對應文件裡面也需要小小修改一下,
以免當用戶搜尋只輸入一個字的時候,
搜尋提示還是寫「搜尋字詞最少3個字元, 最多20個字元」,
這地方我們需要修改中文對應文件。

在下面位置找當對應文件檔案
….\language\zh-TW\zh-TW.com_search.ini

打開檔案後尋找
SEARCH_MESSAGE=搜尋字詞最少3個字元, 最多20個字元

把他修改成你設定的單字數就可以了。

本站的是使用最少搜尋 1 個字元,
因為中文總會有單詞出現,
總不可能叫訪客特意多配一字來搜尋吧。

2. 瀏覽器相容問題

在現在還是有許多人在使用WINDOWS XP的版本,
而這一個版本內建的瀏覽器通常是IE6的版本,
也因為IE7使用習慣跟有太多問題讓許多人沒有去更新他,
但是在IE6會有一些BUG針對這一個搜尋組件。

因為我的瀏覽器是裝IE8,(本人用的是Google Chrome)
所以這一個問題我一直沒有發現,
一直到我一個朋友跟我說他搜尋一直有問題,
我才發現IE6版本需要處理一些小程序,
注意中文無法搜尋的問題只有在IE6會發生(目前只有發現他),
在IE7、IE8、Firefox等瀏覽器測試都是正常的。

當然我們不可能要求給一個來我們網站的用戶都變更瀏覽器,
所以我們必須修改一下東西。

在下面路徑找到這一個檔案
…./libraries/joomla/environment/uri.php

尋找底下這一段原始碼

$query = $this->getQuery(); //make sure the query is created

$uri = ”;
$uri .= in_array(‘scheme’, $parts)  ? (!empty($this->_scheme) ? $this->_scheme.’://’ : ”) : ”;
$uri .= in_array(‘user’, $parts)   ? $this->_user : ”;
$uri .= in_array(‘pass’, $parts)   ? (!empty ($this->_pass) ? ‘:’ : ”) .$this->_pass. (!empty ($this->_user) ? ‘@’ : ”) : ”;
$uri .= in_array(‘host’, $parts)   ? $this->_host : ”;
$uri .= in_array(‘port’, $parts)   ? (!empty ($this->_port) ? ‘:’ : ”).$this->_port : ”;
$uri .= in_array(‘path’, $parts)   ? $this->_path : ”;
$uri .= in_array(‘query’, $parts)   ? (!empty ($query) ? ‘?’.$query : ”) : ”;
$uri .= in_array(‘fragment’, $parts)? (!empty ($this->_fragment) ? ‘#’.$this->_fragment : ”) : ”;

return $uri;

接下來新增下面這一段參數進去

$query=str_replace(“%2F”, “/”, urlencode($query));
$query=str_replace(“%3D”, “=”, $query);
$query=str_replace(“%26”, “&”, $query);

讓整段看起來像是下面這樣子

$query = $this->getQuery(); //make sure the query is created
$query=str_replace(“%2F”, “/”, urlencode($query));
$query=str_replace(“%3D”, “=”, $query);
$query=str_replace(“%26”, “&”, $query);

$uri = ”;
$uri .= in_array(‘scheme’, $parts)  ? (!empty($this->_scheme) ? $this->_scheme.’://’ : ”) : ”;
$uri .= in_array(‘user’, $parts)   ? $this->_user : ”;
$uri .= in_array(‘pass’, $parts)   ? (!empty ($this->_pass) ? ‘:’ : ”) .$this->_pass. (!empty ($this->_user) ? ‘@’ : ”) : ”;
$uri .= in_array(‘host’, $parts)   ? $this->_host : ”;
$uri .= in_array(‘port’, $parts)   ? (!empty ($this->_port) ? ‘:’ : ”).$this->_port : ”;
$uri .= in_array(‘path’, $parts)   ? $this->_path : ”;
$uri .= in_array(‘query’, $parts)   ? (!empty ($query) ? ‘?’.$query : ”) : ”;
$uri .= in_array(‘fragment’, $parts)? (!empty ($this->_fragment) ? ‘#’.$this->_fragment : ”) : ”;

return $uri;

存檔後測試看看,
問題應該就解決了。

本站管理者沒有IE6 可測試,
所以也不知道會出現這個情況。
不過,IE6 的bug 也太多了,
現在大多數網站都不再支援IE6。

所以,如果你還是用著IE6 的,
就趕快換一個瀏覽器吧!
個人建議Google Chrome是最好的!

Leave a comment 發表回應

TrackBack URL

http://stargazer.nets.hk/joomla-chinese-search-engine-solution/trackback/

PAGE TOP