phpcms搜尋功能實現

來源:互聯網
上載者:User

這篇文章介紹的內容是關於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儲存了自己遍曆到的值的話,那就把通過搜尋賦值的值覆蓋掉了,整個頁面將展示你自己賦值到的值。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.