搞定thinkphp帶參分頁
來源:程序員人生 發(fā)布時(shí)間:2014-03-08 22:42:20 閱讀次數(shù):3218次
thinkphp是什么就不用多說了,一個(gè)輕量級(jí)的PHP MVC框架;前幾天搞搞這個(gè)東西,做了個(gè)相冊(cè),發(fā)現(xiàn),它的分頁很讓我糾結(jié),特別是帶參分頁。
按照它的手冊(cè)來吧,沒多大效果;后來,直接看它的分頁類,也不是很復(fù)雜。搞明白了它的原理,只不過就是將$where數(shù)組中的參數(shù),分離,以GET的方式,傳遞到分頁類中,然后再將這些參數(shù)又組合到查詢語句中,實(shí)現(xiàn)帶參分頁。然后,才發(fā)現(xiàn),在$where數(shù)組中傳遞的,和表單中的name值要一致,才能這樣做。否則的話,傳遞過來,到了下一頁,是收不到的。
還有一個(gè)問題,$where數(shù)組中,是可以再有數(shù)組的,好比有$p=array('eq',$kid),這個(gè)變量$p再添加到$where中的話,直接按手冊(cè)上的來分離參數(shù),似乎也沒效果。解決這個(gè)問題時(shí),又寫了個(gè)函數(shù),判斷是不是數(shù)組,然后再分離,相當(dāng)于一個(gè)遞歸。
還有個(gè)問題就是,分頁連接的時(shí)候,會(huì)自動(dòng)加上本頁的操作名,就是說,本來是/Index/Pager/的話,分頁后,會(huì)變成/Index/Pager/Pager,這也讓我糾結(jié),不知道原因在哪里。
最后呢,還是沒有按照手冊(cè)上的方法弄好。想了想,不就是把參數(shù)傳遞過去嘛,需要那么糾結(jié)嘛。改裝了一下它的show()函數(shù),去掉了URL參數(shù)過濾這個(gè)功能,直接就是分頁,比如說,頁面是/Index/Pager,那么,使用ushow("/Index/Pager")(改裝后的),得到的就是/Index/Pager/&p=2,很明顯p=2就是第二頁。這個(gè)也可以用于不帶參的分頁。實(shí)際上,我就是覺得它這個(gè)分頁有點(diǎn)糾結(jié),在還沒有寫到帶參分頁的時(shí)候,我就改裝了這個(gè)函數(shù),正好,這里用上了。然后呢,就是把需要的參數(shù)在Action里面組裝一下,傳遞到前臺(tái),到前臺(tái)哪里呢,肯定是javascript里面。然后再將這個(gè)參數(shù),添加到分頁后的<a>標(biāo)簽里面;部分代碼:
$show = $Page->ushow(__URL__."/".$_REQUEST[C(VAR_ACTION)]."/");(調(diào)用組裝后的分頁函數(shù),實(shí)際上,就是將它封裝好的,又打開,自己處理。)
$output="/KID/".$kid."/spbegintime/".$p["spbegintime"]."/spendtime/".$p["spendtime"]."/spname/".$p["spname"];(Action里面,組裝分頁參數(shù);也可以用&來區(qū)分參數(shù)。)
$this->assign('outpager',$output);綁定頁面變量。
$("#pager a").click(function(){
var i=$("#pager a").index(this);
$("#pager a").eq(i).attr("href",$("#pager a").eq(i).attr("href")+"{$outpager}");
});前臺(tái)修改連接地址,將參數(shù)加進(jìn)來。
最近TP出2.1了,還沒去看,嘿嘿。感覺吧,有時(shí)候用這樣的框架,會(huì)不習(xí)慣,似乎就是少了一種感覺。用JQ也一樣,有時(shí)候就習(xí)慣性的$("form").submit();而其實(shí)頁面中就一兩處用到了JS,都沒把JQ加載進(jìn)來;我都在想,會(huì)不會(huì)使用JQ,讓我把普通JS給忘了?這也許就是JQ的目標(biāo)之一吧,哈哈。當(dāng)然,作為開發(fā)者的話,不能只局限于一個(gè)框架,一種語言。
最近上班改ccmall.cn也糾結(jié),常常就是本地改好了,上傳到服務(wù)器上,就沒用了;沒辦法,服務(wù)器我沒權(quán)限修改,我得將改好的往上傳,上面的人再修改服務(wù)器上的。咳。。
有時(shí)候在想,像ccmall.cn這樣的大型B2B,B2C網(wǎng)站,做成功了,每天至少是要經(jīng)受上萬IP,數(shù)十萬次PV的,像這樣一個(gè)課題,弄到實(shí)際運(yùn)用中去,會(huì)不會(huì)有問題?畢竟大學(xué)里面的課題和實(shí)際運(yùn)用的項(xiàng)目,差距是非常大的。還有,項(xiàng)目中,將大量的,本來最基本的html標(biāo)簽,封裝成那么復(fù)雜的服務(wù)端控件,生成大量的ViewState,然后修改的時(shí)候,就N麻煩。有必要么?在修改的過程中,經(jīng)常就發(fā)現(xiàn),有時(shí)候,花大力氣寫的一個(gè)服務(wù)端控件,就一個(gè)地方用到了,要實(shí)現(xiàn)的功能,完全可以幾句很基本的JS和簡(jiǎn)單的HTML標(biāo)簽搞定。咳。。
看了看一些PHP項(xiàng)目,覺得還是那種簡(jiǎn)單明了,簡(jiǎn)潔,不臃腫。。微軟就喜歡把別人當(dāng)傻瓜,什么都封裝好。(這里僅僅指asp.net)。當(dāng)然了,也不是說asp.net一無是處哈,只是覺得,好多人都沒有正確的運(yùn)用asp.net就是。其實(shí),.net的強(qiáng)類型,編譯型,以及泛型,Ado.net等都是非常不錯(cuò)的,還有后來推出的asp.net MVC,包括.net3.0之后推出來的一些新特性,像SQL CLR,這樣重邏輯的數(shù)據(jù)庫操作,還是挺實(shí)用的。
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)