用織夢實現篩選的功能,其實主要就是運用到了織夢的高級搜索功能,然后用ajax去post替換掉本來的結果就可以了。
其實篩選的話,主要有兩個問題需要解決,一個是前臺的篩選實現,一個是后臺根據前臺的點擊,反饋出相應的結果。
于是在網上搜索了N多的資料了之后,先實現前臺的功能,就是你點了之后會有一個篩選的效果出來,當然,也只是一個效果。具體可以參照:jquery仿京東篩選效果。下面就一步一步用織夢來實現這樣的功能。
首先我們先在后臺自定義模型(自定義模型都不會的同學,可以直接去面壁思過了)
看到參照網站的圖片,可以發現商品的話,主要有下面的幾個字段:品牌,價格,尺寸,平臺,顯卡這五個字段。
其中品牌、平臺、顯卡為option類型,價格為整數類型,尺寸為小數類型,添加模型的時候,記得勾上“使字段可以在列表的底層模板中獲得(自定義字段默認僅能在文檔模板顯示,啟用此選項將使列表查詢變慢,如無必要請不要選擇)”
下面根據我們設置的這些字段,開始直接調用。假如我們的模板目錄為/templets/jingdong,那么我們開始在這個文件夾里面新建三個文件,名稱分別為filter.htm、filter.js、以及filter.css。
filter.htm代碼
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link href="/templets/jingdong/filter.css" rel="stylesheet" type="text/css" />
<script src="http://code.jquery.com/jquery-latest.js" type="text/javascript"></script>
<script src="/templets/jingdong/filter.js" type="text/javascript"></script>
<title>織夢仿京東篩選</title>
</head>
<body>
<div id="filter">
<dl>
<dt>品牌:</dt>
<dd>
<div><a>全部</a></div>
</dd>
<dd>
<div><a>惠普(hp)</a></div>
</dd>
<dd>
<div><a>聯想(Lenovo)</a></div>
</dd>
<dd>
<div><a>聯想(ThinkPad)</a></div>
</dd>
<dd>
<div><a>宏基(acer)</a></div>
</dd>
<dd>
<div><a>華碩</a></div>
</dd>
<dd>
<div><a>戴爾</a></div>
</dd>
<dd>
<div><a>三星</a></div>
</dd>
<dd>
<div><a>索尼</a></div>
</dd>
<dd>
<div><a>東芝</a></div>
</dd>
<dd>
<div><a>Gateway</a></div>
</dd>
<dd>
<div><a>微星</a></div>
</dd>
<dd>
<div><a>海爾</a></div>
</dd>
<dd>
<div><a>清華同方</a></div>
</dd>
<dd>
<div><a>富士通</a></div>
</dd>
<dd>
<div><a>蘋果(Apple)</a></div>
</dd>
<dd>
<div><a>神舟</a></div>
</dd>
<dd>
<div><a>方正</a></div>
</dd>
<dd>
<div><a>優雅</a></div>
</dd>
</dl>
<dl>
<dt>價格:</dt>
<dd>
<div><a>全部</a></div>
</dd>
<dd>
<div><a>1000-2999</a></div>
</dd>
<dd>
<div><a>3000-3499</a></div>
</dd>
<dd>
<div><a>3500-3999</a></div>
</dd>
<dd>
<div><a>4000-4499</a></div>
</dd>
<dd>
<div><a>4500-4999</a></div>
</dd>
<dd>
<div><a>5000-5999</a></div>
</dd>
<dd>
<div><a>6000-6999</a></div>
</dd>
<dd>
<div><a>7000-9999</a></div>
</dd>
<dd>
<div><a>10000以上</a></div>
</dd>
</dl>
<dl>
<dt>尺寸:</dt>
<dd>
<div><a>全部</a></div>
</dd>
<dd>
<div><a>8.9英寸及以下</a></div>
</dd>
<dd>
<div><a>11英寸</a></div>
</dd>
<dd>
<div><a>12英寸</a></div>
</dd>
<dd>
<div><a>13英寸</a></div>
</dd>
<dd>
<div><a>14英寸</a></div>
</dd>
<dd>
<div><a>15英寸</a></div>
</dd>
<dd>
<div><a>16英寸-17英寸</a></div>
</dd>
</dl>
<dl>
<dt>平臺:</dt>
<dd>
<div><a>全部</a></div>
</dd>
<dd>
<div><a>AMD Brazos APU平臺</a></div>
</dd>
<dd>
<div><a>Intel Sandy Bridge平臺</a></div>
</dd>
<dd>
<div><a>Intel平臺</a></div>
</dd>
<dd>
<div><a>AMD平臺</a></div>
</dd>
</dl>
<dl>
<dt>顯卡:</dt>
<dd>
<div><a>全部</a></div>
</dd>
<dd>
<div><a>獨立顯卡</a></div>
</dd>
<dd>
<div><a>集成顯卡</a></div>
</dd>
<dd>
<div><a>核芯顯卡</a></div>
</dd>
</dl>
</div>
</body>
</html>
|
接著昨天晚上的寫,昨天晚上說到了新建一個filter.htm,然后把上個文章的代碼復制進去,現在把filter.css以及flter.js也分別復制好。
filter.css代碼
JS代碼
如果步驟按照織夢多條件篩選功能實現(一)和織夢多條件篩選功能實現(二)來操作的話這時候直接打開filter.htm已經可以看到效果了,那么下面要做的就是在織夢里面,用織夢的東西往里面去套。
我們現在已經在欄目列表里面添加了“仿京東”這個欄目了,這個欄目模型就是使用我們在第一篇中講到的新建的模型。這個欄目的ID為“1”。然后把這個欄目的列表模板設置為我們剛剛添加的那個filter.htm。現在我們可以去更新下“仿京東”這個欄目的文檔了。更新成功,瀏覽下,嗯,可以訪問了。但是怎么跟我們剛剛制作的那個filter.htm一模一樣啊,那是因為我們還沒有在里面添加織夢的模板標簽。現在就可以隨便添加模板標簽了。
我們實際是想直接調用出來我們添加的那些字段。那應該如何操作呢?
這就得看看我們添加的自定義字段在數據庫中的位置了,然后把他們給“弄”出來。嗯,這里我弄出來的方式是采用自定義函數弄出來的。函數代碼如下,有需要的可以直接拿去了,但是記住是放到織夢的/include/extend.func.php里面啊,放其它位置出問題概不負責…
獲得option類型數據的可取值
好了,有這個函數就可以將本來的filter.htm給簡化啦!
下面是簡化后的代碼
織夢多條件篩選功能實現(四)
我們已經在前臺實現了篩選的功能了,雖然價格、尺寸兩個類型沒有添加,這是因為我是要把他們固定做好,因為他們在模型中使用的類型是數字類型,并非其他三個(品牌、平臺以及顯卡)是option類型。
既然前臺已經做好了,那我們就開始后臺的功能了。
具體的后臺我使用的是advancesearch.php這個搜索的功能來實現的。
我們復制一個advancesearch.php的模板出來,默認的advanceserach.php的模板是/templets/default/advancesearch.htm,我們把這個模板,復制到我們的自定義的模板文件夾/templets/jingdong里面,名字就叫做filter_tmp.htm。
然后進入后臺,在“內容模型管理”里面選擇你所需要搜索的模型,然后點擊這個模型后面的放大鏡圖標,在“附件表可供自定義搜索的字段”中,勾選上你需要搜索的字段,自定義搜索結果模板頁,寫上我們剛剛復制的模板名稱,叫做filter_tmp.htm,確定。
這里可以測試一下,能否正常使用搜索。
不過好像是織夢系統自帶的不可以的,我試了好多次都不行,追蹤了一下,好像并沒有查詢附加表,于是在advancesearch.php的218行,原來的代碼是
在type.*的后面添加行一個addon.*,也就是變成如下的代碼
然后還有124行添加 ${$var}=iconv(“utf-8″,”gb2312″,${$var}); 否則會導致中文亂碼。
還有一個就是如果使用()英文括號的話,要小心了,因為會被安全sql過濾掉。
下面,是我簡單的制作了下filter_tmp.htm,大家可以參考使用。
但是我們最終是要把這個頁面“嵌”到filter.htm中,也就是最終的列表頁里面。
現在我們打開filter這個模板文件,在最下面加一個div,id設置為result,這個是用來存放最后篩選出來的結果的地方。
然后打開filter.js,下面重點都是在這個js里面寫的。下面把幾個文件打包了一下,有需要的同學可以下載了。
當然了,下載了出問題概不負責。。
看懂的總歸可以看懂,看不懂的,說的在清楚也看不懂。。
浙公網安備 33010602011771號