首頁  >  文章  >  後端開發  >  phpcms搜尋功能實現

phpcms搜尋功能實現

不言
不言原創
2018-04-28 09:37:225431瀏覽

這篇文章介紹的內容是關於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裡面儲存的內容欄位如下所示:
phpcms搜尋功能實現
#  有了這些欄位訊息,我們就可以在自己的list.html顯示頁面為所欲為。
這裡要特別注意的是,我們在自己的list.html裡面寫程式的時候,可以使用loop循環,但不要用##data儲存了自己遍歷到的值的話,那就把透過搜尋賦值的值覆掉了,整個頁面將展示你自己賦值到的值。


以上是phpcms搜尋功能實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn