婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 網站建設 > 建站知識 > 織夢前臺搜索和高級搜索簡單分析

織夢前臺搜索和高級搜索簡單分析

POST TIME:2020-04-11 21:47

搜索作為網站上快速查詢內容的工具,必不可少,織夢里面的搜索有好幾種,例如,我們用織夢進行仿站或進行二次開發,經常用到的有高級搜索、前臺搜索和后臺自定義搜索,這個教程主要簡分析一下,前臺搜索功能,織夢前臺搜索功能與自定義搜索功能,大同小異,處理過程也差不多。

前臺搜索和高級搜索如下圖所示。

前臺搜索

高級搜索

前臺搜索可以說是高級搜索的一個簡單化版,言外之意就是處理這二個提交表單的搜索關鍵字程序是一樣的,沒有錯,處理搜索的程序文件都是plus/search.php。前臺搜索模板是織夢模板頭部模板head.htm,高級搜索對應的模板是,織夢模板里面的heightsearch.htm,它們的搜索結果頁都是templets/default/search.htm,測試是不是這一個模板頁,可以查看“搜索視圖類”文件arc.searchview.class.php,在131行,找到:
$tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$GLOBALS['cfg_df_style']."/search.htm";

這里就是定義了,高級搜索和前臺搜索的搜索結果頁模板,知道這個原理,我們就可以在這里自己定義自己喜歡的模板名稱文件了。還可以用另一種方法來測試,高級搜索和這個前臺搜索的結果模板是不是用的這個模板文件,我們只需要在這個模板search.htm里面隨便寫點東西,在我們搜索后,看看有沒有我們剛寫的東西,如果有說明,這二個都是用的同一個搜索結果頁模板文件,這也是一種方法。

我們知道織夢模板都是通過織夢標簽來調用數據的,但是在織夢插件里面,一般都不用織夢標簽,而是用php代碼,這個前后臺搜索也是如此,特別是高級搜索。我們先看一下前臺搜索,下面是搜索代碼form表單。

這個表單里面,只用了{dede:global.cfg_cmsurl/}這么一個標簽,其它都是html原生態的標簽,這些沒有什么好說的,最主要的是看action里面的文件search.php,這是重點,再看一下這個表單的name值,這點非常重要,因為,當用戶輸入關鍵搜索后,這些name值要一起發送到search.php里面的。

再看一下高級搜索模板heightsearch.htm里面的表單,我們會發現完全沒有織夢表單,而是html標簽和php程序,注意,它的action 也是search.php,這就可以肯定了,前臺搜索和高級搜索都是通過search.php來處理,用戶輸入的關鍵字的。

因為前臺搜索是高級搜索的簡化版本,所以,我們只需要分析高級搜索,就可以了。

在分析高級搜索前,我們要注意一個問題:只要在php里require,include等包括了一個模板(或其它php文件),就相當于把這個模板(或其它php文件)里的代碼復制到這個php文件,而模板文件(或其它php文件)就相當于,把這個php文件,通過require,include等作為聯系,從php分害出來的一部分,雖然,分割出來了,但是由于require,include等,使得這個模板文件(或其它php文件)仍然是這個php文件的一部分,只是為了方便處理,才把它們分開的。這在php里面都是通用的,而不是織夢專有的。

就像在我們做模板時,把一個模反分成三部分:頭部、中間和尾部,便于管理,試想如果一個程序文件,不分開的話,有可能,這個文件使它里面的全部代碼,而另一個文件只使用它里面的部分代碼,這樣就使得不使用的代碼也要加載一次,浪費服務器資源,也不方便。

知道上面的原理,我們打開heightsearch.php文件,你會發現只有三行代碼,重點看下面這二個文件:

require_once(DEDEINC.'/typelink.class.php');
require_once(DEDETEMPLATE.'/plus/heightsearch.htm');

第一個是“欄目連接類”typelink.class.php文件,它的作用就是處理欄目的連接,例如像這樣的當前位置: 主頁 > 網頁基礎 > HTML > 連接,以及高級搜索里面的“網站欄目”、“類型”等。對于這個類文件,今天不是我們的重點,我們只需要知道,我們調用里面的一個方法GetOptionArray(0,0,0),這個方法的作用就是:獲得類別列表,這里所說的類別就是欄目。對于這個方法,有興趣的可以去研究一下。

打開高級搜索模板,heightsearch.htm,我們一一分析:

第一項:同站欄目,上面的們分析了用的是GetOptionArray(0,0,0)方法,把數據庫里面的欄目表dede_arctype里面的,所有欄目都篩選出來。

第四項:內容類型,這個是把數據庫里面的模型表dede_channeltype,里面的所有模型都循環出來,這種原生態的php代碼調用在模板插件里面的經常用到,如果現在想調用其它的表里面的數據,我們可以通過種方法來調用。

第二項:關鍵字,不知道大家遇到過這種情況沒有,當我們在網站上搜索時,有時候只輸入了一個符號,例如:只輸入了一個字母a,點搜索后,程序會提示“關鍵字不能小于2個字節!”,有時候我們需要一個字節的搜索,如何改呢?
修改方法:在文件search.php里面的第79行,找到if(($keyword=='' || strlen($keyword)<2) && empty($typeid)),把里面的小于2,改成小于1或者直接把strlen($keyword)<2) && 這一句去掉即可,搜索一個關鍵字節了。

在這個search.php文件里面,上面大部分是處理我們在高級搜索里面的搜索時,選擇的條件,全是為下面這三行代碼服務的:

$sp = new SearchView($typeid,$keyword,$orderby,$channeltype,$searchtype,$starttime,$pagesize,$kwtype,$mid);
$keyword = $oldkeyword;
$sp->Display();

這三行代碼,就是對“搜索視圖類”arc.searchview.class.php進行實例化,即創建對象,然后,把用戶要搜索的關鍵字以及選擇的條件,進行真正的處理,并顯示到搜索結果頁里面。在這個類里面涉及到了數據庫操作,而search.php文件,則只是對搜索提交過來的參考進行基本的檢驗,例如輸入的關鍵字有合不合法等。這個文件不直接與數據庫打交道,而是讓這個文件后面的類,進行數據庫操作,這樣就更加保證了程序的安全性,提高了效率。在php中

mvc里面我們稱search.php為控制器,即里面的c。

這種方法我們在寫程序時,也要參考一下,就是對于search.php接收到的數據,我們首先要處理,然后,再把處理后的數據交給更底層的模塊處理,處理后再還給search.php,通過search.php顯示到用戶前面,這種思想就是mvc。

這個教程只是簡單的分析了一下,高級搜索的處理過程,即對提交的搜索要求進行基本的數據檢驗,然后,提交給實例化的對象進行處理,對象才是真正是數據庫打交道的代碼,而這些代碼往往都比較復雜,看上去,但如果我們細細分析一下,其實也不是多么難。

最后,要說的是,織夢自定義搜索文件是advancedsearch.php,織夢可能寫錯了,這個也叫高級搜索,其實,這個叫自定義搜索文件,它對應的模板是advancedsearch.htm。對于自定義搜索我們會在另一個教程里分析。


收縮
  • 微信客服
  • 微信二維碼
  • 電話咨詢

  • 400-1100-266
主站蜘蛛池模板: 平安县| 玉溪市| 理塘县| 天峨县| 伊春市| 湾仔区| 禹城市| 瓮安县| 临夏市| 五峰| 视频| 原阳县| 白山市| 陵水| 凭祥市| 英德市| 黎城县| 苍溪县| 南召县| 大关县| 巴东县| 永吉县| 静海县| 宁阳县| 仪陇县| 平和县| 临澧县| 象山县| 淮北市| 平舆县| 渑池县| 桓仁| 勃利县| 黄梅县| 易门县| 河间市| 江安县| 灵璧县| 临高县| 恭城| 北碚区|