聯(lián)系官方銷售客服
1835022288
028-61286886
poscms系統(tǒng)本身有一個(gè)在查詢頁(yè)(search頁(yè)面)實(shí)現(xiàn)的查詢分頁(yè)功能,基于系統(tǒng)封裝的php函數(shù)dr_search_url()
但是今天的需求除了導(dǎo)航欄、列表頁(yè)、詳情頁(yè)都實(shí)現(xiàn)查詢功能外,關(guān)鍵是有兩個(gè)不同的模塊,模塊不同,如果用
系統(tǒng)的search的話,那就得弄兩個(gè)search頁(yè)面出來(lái),其實(shí)搜索結(jié)果頁(yè)面完全就是照搬列表頁(yè),所以,我為什么不
直接用列表頁(yè)作為模板呢,不去走系統(tǒng)的search控制器。下面上列表頁(yè):
1.篩選條件的獲取以及查詢頁(yè)的路徑拼接
<div => <span>排序方式:</span> <a = href=>裝載日期</a> <a = href=>承運(yùn)量從高到低</a> <a = href=>承運(yùn)量從低到高</a> <a = href=>有效天數(shù)</a> </div> <script type= charset=> rtype = $( cylf = $().val()?$().val(): cylt = $().val()?$().val(): = $().val()?$().val(): to = $().val()?$().val(): title = $().val()?$().val(): starttimef = $().val()?parseInt( Date($().val()).getTime())/: starttimet = $().val()?parseInt( Date($().val()).getTime())/:= ++rtype++cylf+ +cylt++++to++title++ starttimef++starttimet++</script>
頁(yè)面是前端小姐姐寫的,日歷點(diǎn)擊之后,獲取的值為字符串 2018-08-27 的形式,我得要把它轉(zhuǎn)成 int 型的時(shí)間戳
才能用于后面的查詢比較;
看到那些三元表達(dá)式后面flase賦值為0或者9999999999么,這是根據(jù)該字段在數(shù)據(jù)庫(kù)中的實(shí)際值范圍而取的,數(shù)據(jù)
庫(kù)中時(shí)間戳為10位數(shù),所以我這里設(shè)置了一個(gè)不選定時(shí)間上限時(shí)的查詢條件值(9999999999);
另外,當(dāng)前列表頁(yè)路由是 /index.php?s=goodsplate&c=category&id=2 ,所以可以看出js將查詢條件直接提交到當(dāng)前
頁(yè)面;
當(dāng)點(diǎn)擊不同排序條件時(shí),將執(zhí)行對(duì)應(yīng)的函數(shù),此時(shí)將排序條件通過(guò)函參的方式拼接到路徑中;
2.php腳本獲取地址欄查詢條件參數(shù)
點(diǎn)擊查詢條件之后,將跳轉(zhuǎn)到拼有查詢條件的路由(不難看出還是這個(gè)列表頁(yè)),接下來(lái)通過(guò)php腳本獲取地址欄參數(shù)
先來(lái)看路徑(出貨港、卸貨港、貨品名稱沒(méi)有填):
/index.php?s=goodsplate&c=category&id=&=%E5%%%E6%B2%B3&=&=&=&=&= &=&=&=cyl_desc
所以,你可以很直觀地看到一些篩選條件(分類-內(nèi)盒、承運(yùn)量范圍-2~9999999999、裝載日期范圍-1535328000~
15356736000、排序方式-承運(yùn)量降序)
<?php $data = $_GET; $rtype = $data['rtype']?$data['rtype']:null; $cylf = $data['cylf']?$data['cylf']:0; $cylt = $data['cylt']?$data['cylt']:9999999999; $from = $data['from']?$data['from']:null; $to = $data['to']?$data['to']:null; $title = $data['title']?$data['title']:null; $starttimef = $data['starttimef']?$data['starttimef']:0; $starttimet = $data['starttimet']?$data['starttimet']:9999999999; $order = $data['order']?$data['order']:null;?>
注:poscms的list標(biāo)簽查詢的時(shí)候,對(duì)于查詢條件值為null的會(huì)過(guò)濾掉,也就是不會(huì)寫到sql里去。
3.list標(biāo)簽查詢
在上面的腳本后面,就需要根據(jù)拿到的條件來(lái)寫list標(biāo)簽的語(yǔ)法了:
{list action=module module=goodsplate catid= pagesize= page=/list}
中間加粗的字體就是查詢的主要條件,用到了模糊查詢(LIKE_)、范圍查詢(BW_)和排序(order)
這樣就根據(jù)條件實(shí)現(xiàn)了list標(biāo)簽的了查詢,順便來(lái)看一下生成的sql:
SELECT * FROM `imt_1_goodsplate` WHERE `imt_1_goodsplate`.`rtype` = AND `imt_1_goodsplate`.`title` LIKE AND `imt_1_goodsplate`.`` LIKE AND `imt_1_goodsplate`.`to` LIKE AND `imt_1_goodsplate`.`cyl` BETWEEN AND AND `imt_1_goodsplate`.`starttime` BETWEEN AND AND `imt_1_goodsplate`.`catid` = AND `imt_1_goodsplate`.`status` = ORDER BY `imt_1_goodsplate`.`cyl` DESC LIMIT ,
4.分頁(yè)功能
其實(shí)分頁(yè)功能的實(shí)現(xiàn)依據(jù)是一個(gè)page值,通過(guò)在路徑中添加page=number,來(lái)實(shí)現(xiàn)后端LIMIT參數(shù)的改變
注意:poscms有個(gè)很坑爹的地方就是這個(gè)limit,我們一般要實(shí)現(xiàn)從第10項(xiàng)開始,往后查5項(xiàng),都會(huì)這么寫:
limit(10,5),但是poscms卻是這么寫的:$this->db->limit(5,10),這個(gè)源程序的開發(fā)者怕是故意和大家作對(duì)
吧。
之前查詢結(jié)果很多的話,就得分頁(yè)了,那1、2、3頁(yè)的路徑怎么獲取呢,首先我封裝了一個(gè)一行的php函數(shù)
方便頁(yè)面里面調(diào)用:
function dr_cururl(){ return $_SERVER['REQUEST_URI']; }
這個(gè)方法返回地址欄的全部地址(其實(shí)這塊有個(gè)小bug,但是不影響使用,就是當(dāng)頁(yè)面處于第二頁(yè)的時(shí)候,
地址欄會(huì)有查詢條件參數(shù)+&page=2,此時(shí)第三頁(yè)的地址應(yīng)該是通過(guò)dr_cururl()函數(shù)獲取的地址截去page參數(shù)
加上page=3,不截去的話就變成了條件參數(shù)+&page=2&page=3,這也是我剛剛想到的,明天去完善一下這個(gè)
函數(shù))
在這里我用了一個(gè)同事以前提供的判斷上一頁(yè)下一頁(yè)page值的腳本,之前的腳本a標(biāo)簽的地址是寫死的,我后期
通過(guò)上面的函數(shù)完善了一下,這里貼上代碼:
{if empty($get.page)} {php $page=1;} {else} {php $page=$get.page;} {/if} <!--上一頁(yè)--> {if $page > 1} {php $pra = $page-1;} {else} {php $pra=1;} {/if} <!--下一頁(yè)--> <!--$nums為最大頁(yè)碼--> {if $page==$nums} {php $next = $nums;} {else} {php $next = $page+1;} {/if} {if $nums==1} <div class="inner" style="text-align:center;margin-top:20px;"> <a>共{$nums}頁(yè)</a> </div> {else} <div class="inner" style="text-align:center;margin-top:20px;"> <a>共{$nums}頁(yè)</a> <a href="{dr_cururl()}&page=1">首頁(yè)</a> <a href="{dr_cururl()}&page={$pra}">上一頁(yè)</a> <a href="{dr_cururl()}&page={$next}">下一頁(yè)</a> <a href="{dr_cururl()}&page={$nums}">尾頁(yè)</a> </div> {/if}
注意:$nums是poscms系統(tǒng)開啟分頁(yè)(list標(biāo)簽中有page=1時(shí)開啟分頁(yè))后返回的最大頁(yè)數(shù)
至此,就完成了在列表頁(yè)實(shí)現(xiàn)的查詢、分頁(yè)功能,注意,除了dr_cururl()這個(gè)函數(shù)是寫在公共函數(shù)庫(kù)文件里面,
其他所有上面列出的代碼都是寫在列表頁(yè)的,所有的東西都是寫在這個(gè)頁(yè)面(list頁(yè)面)的,不需要去動(dòng)系統(tǒng)的
控制器,不需要去建search頁(yè)面,所有的一切只需要在這個(gè)頁(yè)面就可以完成!
無(wú)法閱讀,太傷眼睛了