這篇文章介紹的內容是關於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儲存了自己遍歷到的值的話,那就把透過搜尋賦值的值覆掉了,整個頁面將展示你自己賦值到的值。
以上是phpcms搜尋功能實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!