PHPCMS V9 按浏览次数排行调用文章
?
作者:匿名 來(lái)源:老者工作室 瀏覽:1841次 2011-6-22 14:59:05 字號(hào):大 中 小 [摘要]PHPCMS V9(簡(jiǎn)稱V9)采用PHP5+MYSQL做為技術(shù)基礎(chǔ)進(jìn)行開(kāi)發(fā)。V9采用OOP(面向?qū)ο?#xff09;方式進(jìn)行基礎(chǔ)運(yùn)行框架搭建。模塊化開(kāi)發(fā)方式做為功能開(kāi)發(fā)形式。框架易于功能擴(kuò)展,代碼維護(hù),優(yōu)秀的二次開(kāi)發(fā)能力,可滿足所有網(wǎng)站的應(yīng)用需求。在用PHPCMS做下載站時(shí)候,比較頭疼的就是目前的V9版竟然沒(méi)有下載次數(shù)統(tǒng)計(jì),而只能使用瀏覽次數(shù)來(lái)忽悠瀏覽者,呵呵,管他了,反正一般來(lái)訪者都不會(huì)太注意。現(xiàn)在只能忍著了,剛從DeDeCMS轉(zhuǎn)過(guò)來(lái),好歹人家都有下載次數(shù)統(tǒng)計(jì)的。畢竟沒(méi)有十全十美的東西……
做下載總得有個(gè)下載排行吧,按照一般的邏輯,進(jìn)入某欄目,顯示的是某欄目的下載排行,而在首頁(yè)呢,應(yīng)該顯示的是全站所有軟件條目的下載排行。
雖說(shuō)PHPCMS V9是新開(kāi)發(fā)的,架構(gòu)比較好,但是錯(cuò)誤也不少,好多標(biāo)簽一同時(shí)使用后就出現(xiàn)異常了,頭都大了,也懶得整理放到官方論壇給他們修正,自己先避開(kāi),能不用就不用。
而我要說(shuō)的就是,PHPCMS V9的標(biāo)簽竟然不支持重復(fù)調(diào)用多個(gè)欄目,例如我想顯示某兩個(gè)欄目的下載排行,V9就做不到了,而之前的2008版卻是可以支持的。令人費(fèi)解,只能認(rèn)為是新架構(gòu),還沒(méi)來(lái)得及完善了。
更難理解的是,瀏覽次數(shù)的表里面,與相關(guān)文章或下載內(nèi)容關(guān)聯(lián)的是一個(gè)叫“hitsid”的字段,同時(shí)也是該表的主鍵。存儲(chǔ)的字段內(nèi)容如“c-2-5”一 類的,而不是普通的整型數(shù)字,不能簡(jiǎn)單的與文章表或者下載表里面的條目的“id”號(hào)直接關(guān)聯(lián)就得到相關(guān)的瀏覽次數(shù),這個(gè)另類的“x-y-z”的方式令不少 SQL語(yǔ)句的生手望而生畏,包括本人。
不過(guò)還好,這個(gè)“x-y-z”的格式是有規(guī)律可循的,于是乎,我查看了相關(guān)的文檔,想到了用字符 串的形式,因?yàn)槲易龅氖窍螺d站,“x-y-”這段字符串是固定的,就是“c-2-”,第一個(gè)“c”是什么不知道,第二個(gè)“2”應(yīng)該是內(nèi)容模型,“2”是下 載模型,“1”是文章模型,可以到模型管理里面查看id號(hào)。最后那個(gè)數(shù)字就是對(duì)應(yīng)的文章表或下載表里的條目id了,所以,也不是沒(méi)有方法的,我想到的就是 在SQL語(yǔ)句里,將固定的“c-2-”和字段id合在一起,得到的就是諸如“c-2-5”一類的字符串,然后在用條件比對(duì)即可。
但是限于本人水平有限,這個(gè)字符串加了半天,沒(méi)有能夠成功。于是乎在網(wǎng)上漫無(wú)邊際的搜尋著,無(wú)意發(fā)現(xiàn)了IT民工x宅男寫(xiě)的文章《Phpcms V9 替換頂級(jí)欄目頁(yè)面為列表頁(yè)及BUG修復(fù)》,從中找到了另一個(gè)方法,就是使用SQL語(yǔ)句的“substring”,我恍然大悟,這個(gè)方法也行得通的啊。先附上這位同學(xué)給出的方法:
頻道總排行調(diào)用方法
<div class="box"><h5 class="title-2">頻道總排行</h5>{pc:get sql="select a.id,a.title,a.url,a.catid,b.hitsid,b.views from v9_news a left join v9_hits b on a.id=substring(b.hitsid,5) where a.catid in ($arrchildid) order by b.views desc" num="10" cache="3600"}<ul class="content digg">{loop $data $r}<li> <a href="{$r[url]}" title="{$r[title]}"?target="_blank">{str_cut($r[title],36,'...')}</a></li>{/loop}</ul>{/pc} </div>
頻道月排行調(diào)用方法
這個(gè)就是兩個(gè)很好的例子。當(dāng)然我只用到了前一個(gè)例子中的SQL語(yǔ)句中的substring方法。Substring是截取字符串的作用,具體Substring的解釋詳見(jiàn)《SQL語(yǔ)句Substring用法》。
經(jīng)過(guò)上述例子學(xué)習(xí)后改進(jìn),雖然我的方法跟上面的多表聯(lián)查不一樣,但同樣得到了最后的調(diào)用全站所有文章排行的方法:
<div class="idxTopApps contents"> <ul class="indexIcns"> {pc:get sql="SELECT a.id,a.url,a.thumb,a.status,b.hitsid,b.views FROM v9_download a, v9_hits b WHERE a.status=99 and a.id=substring(b.hitsid,5) ORDER BY b.views DESC" num="6"} {loop $data $r} <li><a href="{$r['url']}"><img src="{$r['thumb']}" /></a></li> {/loop} {/pc} </ul> </div>
可以看到 “substring(b.hitsid,5)”是截取hitsid字段,從左往右數(shù)第5個(gè)字符串,即“c-2-5”從左往右數(shù),1個(gè)“c”,1個(gè) “2”,2個(gè)“-”,第5個(gè)字符就是“5”,截取后只剩下了第2個(gè)“-”后的id,到達(dá)了最終提取id的目的。當(dāng)然,其中我還加入了另一個(gè)條件 “status=99”,這個(gè)表示已經(jīng)審核通過(guò)的文章,這個(gè)可有可無(wú)。
轉(zhuǎn)載于:https://www.cnblogs.com/gzmg/p/3222976.html
總結(jié)
以上是生活随笔為你收集整理的PHPCMS V9 按浏览次数排行调用文章的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AjaxPro新发现-错误处理
- 下一篇: nginx php-fpm 下的php.