在用PHPCMS做下载站时候,较量头疼的就是今朝的V9版竟然没有下载次数统计,而只能利用欣赏次数来忽悠欣赏者,呵呵,管他了,横竖一般来访者都不会太留意。此刻只能忍着了,刚从DeDeCMS转过来,好歹人家都有下载次数统计的。究竟没有浑然一体的对象……
做下载总得有个下载排行吧,凭据一般的逻辑,进入某栏目,显示的是某栏目标下载排行,而在首页呢,应该显示的是全站所有软件条目标下载排行。
虽说PHPCMS V9是新开拓的,架构较量好,可是错误也不少,许多几何标签一同时利用后就呈现异常了,头都大了,也懒得整理放到官方论坛给他们批改,本身先避开,能不消就不消。
而我要说的就是,PHPCMS V9的标签竟然不支持反复挪用多个栏目,譬喻我想显示某两个栏目标下载排行,V9就做不到了,而之前的2008版却是可以支持的。令人费解,只能认为是新架构,还没来得及完善了。
更难领略的是,欣赏次数的表内里,与相关文章或下载内容关联的是一个叫“hitsid”的字段,同时也是该表的主键。存储的字段内容如“c-2-5”一类的,而不是普通的整型数字,不能简朴的与文章表可能下载表内里的条目标“id”号直接关联就获得相关的欣赏次数,这个另类的“x-y-z”的方法令不少SQL语句的生手望而生畏,包罗本人。
不外还好,这个“x-y-z”的名目是有纪律可循的,于是乎,我查察了相关的文档,想到了用字符串的形式,因为我做的是下载站,“x-y-”这段字符串是牢靠的,就是“c-2-”,第一个“c”是什么不知道,第二个“2”应该是内容模子,“2”是下载模子,“1”是文章模子,可以到模子打点内里查察id号。最后谁人数字就是对应的文章表或下载内外的条目id了,所以,也不是没有要领的,我想到的就是在SQL语句里,将牢靠的“c-2-”和字段id合在一起,获得的就是诸如“c-2-5”一类的字符串,然后在用条件比对即可。
可是限于本人程度有限,这个字符串加了半天,没有可以或许乐成。于是乎在网上漫无边际的搜寻着,无意发明白IT民工x宅男写的文章《Phpcms V9 替换顶级栏目页面为列表页及BUG修复》,从中找到了另一个要领,就是利用SQL语句的“substring”,我名顿开,这个要领也行得通的啊。先附上这位同学给出的要领:
频道总排行挪用要领
<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=http://down.chinaz.com/"{$r[url]}" title=http://down.chinaz.com/"{$r[title]}" target="_blank">{str_cut($r[title],36,'...')}</a></li>
{/loop}
</ul>
{/pc}
</div>
频道月排行挪用要领
<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.monthviews desc" num="8" cache="3600"}
<ul class="content rank">
{loop $data $r}
<li><span>{number_format($r[views])}</span><a href=http://down.chinaz.com/"{$r[url]}"{title_style($r[style])} class="title" title=http://down.chinaz.com/"{$r[title]}">{str_cut($r[title],56,'...')}</a></li>
{/loop}
</ul>
{/pc}
</div>
这个就是两个很好的例子。虽然我只用到了前一个例子中的SQL语句中的substring要领。Substring是截取字符串的浸染,详细Substring的表明详见《SQL语句Substring用法》。
颠末上述例子进修后改造,固然我的要领跟上面的多表联查纷歧样,但同样获得了最后的挪用全站所有文章排行的要领:
<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=http://down.chinaz.com/"{$r['url']}"><img src=http://down.chinaz.com/"{$r['thumb']}" /></a></li>
{/loop}
{/pc}
</ul>
</div>