這篇文章介紹的內容是關於phpcms搜尋功能實現,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
最近在做一個門戶網站,用到了phpcms的搜尋功能,之前一直想要實現這方面功能,但苦於靜不下來心研究phpcms的實現原理,今天通過這個部落格記錄下我分析的過程,網上的資料相對比較零散,看的總是雲裡霧裡的,這裡做一個比較系統的總結。
與搜尋功能有關的檔案
phpcms搜尋功能的後台模板位於:phpcms\modules\search路徑下,該路徑下存在一個名為index.php的檔案,該檔案中存在一些用於展示搜尋結果的方法,比如我們常用的init方法,從index.php的構造方法
$this->db =pc_base::load_model(‘search_model’);可以發現,index.php用到了資料庫首碼_search名字的表
phpcms搜尋功能的前端模板位於:phpcms\templates\default\search,在該路徑下存在四個檔案,分別是index.html,footer.html,header.html以及list.html,這裡的index.html表示沒有搜尋結果的時候調用的展示頁面,header.html以及footer.html表示輸出搜尋結果的header以及footer部分,list.html表示搜尋到結果之後調用的展示頁面
修改後端模板
對於phpcms的搜尋功能,主要使用的是mysql的match against模糊查詢功能,但是這個功能對於查詢包含中文資訊的內容方面並不正確,支援並不好,因此我把這部分代碼屏蔽掉了,具體屏蔽方法為,開啟phpcms\modules\search\index.php檔案,找到大概84行,將下面代碼注釋掉:
//如果分詞結果為空白if(!empty($segment_q)) { $sql = "`siteid`= '$siteid' AND `typeid` = '$typeid' $sql_time AND MATCH (`data`) AGAINST ('$segment_q' IN BOOLEAN MODE)";} else { $sql = "`siteid`= '$siteid' AND `typeid` = '$typeid' $sql_time AND `data` like '%$q%'";}
在這段代碼後面添加下面代碼即可:
$sql = "`siteid`= '$siteid' AND `typeid` = '$typeid' $sql_time AND `data` like '%$q%'";
修改前端代碼
前端代碼的修改我們可以參考phpcms\templates\default\search\index.html檔案,查看原先的index.html檔案,找到與查詢功能表單提交相關聯的代碼如所示:
<form name="search" type="get"> <input type="hidden" name="m" value="search"/> <input type="hidden" name="c" value="index"/> <input type="hidden" name="a" value="init"/> <input type="hidden" name="typeid" value="{$typeid}" id="typeid"/> <input type="hidden" name="siteid" value="{$siteid}" id="siteid"/> <p class="sr_frm"> <p class="sr_frm_box"> <p class="sr_frmipt"><input type="text" name="q" id="q" class="ipt"> <p class="sp" id="aca"> </p><input type="submit" class="ss_btn" value="搜 索"> </p> </p> <p id="sr_infos" class="wrap sr_infoul"> </p> </p></form>
該部分代碼中input的type屬性為hidden的內容均是在提交表單的時候預設添加到網址中的,該部分內容不是我們通過表單的方式提交的,比如以我自己為例,我包含搜尋按鈕的網址為:http://localhost/startwill/index.php?m=content&c=index&a=lists&catid=41,當我在搜尋方塊中輸入產品兩個字之後,跳轉後的網址為:http://localhost/startwill/index.php?m=search&c=index&a=init&typeid=3&siteid=1&q=產品 ,其中m、c以及a、typeid、siteid的值都是我們通過hidden的方式提交的,而q的值是通過搜尋方塊輸進去的,我們在自己的頁面使用的時候,可以仿照上面這段代碼進行。
修改顯示代碼
phpcms的顯示代碼可以參考phpcms\templates\default\search\list.html來實現,在list.html中,可以通過{loop
r}的方式擷取搜尋到的結果值,$data裡面儲存的內容欄位如下所示:
有了這些欄位資訊,我們就可以在自己的list.html顯示頁面為所欲為了。
這裡需要特別注意的是,我們在自己的list.html裡面編寫代碼的時候,可以使用loop迴圈,但是不要用data儲存了自己遍曆到的值的話,那就把通過搜尋賦值的值覆蓋掉了,整個頁面將展示你自己賦值到的值。