PHPCMS的点击量考虑到前端JS动态加载的效率问题,使用的是独立的表。但是这也带来了一些附带的问题,比如同表查询、排序和删除,跨表就比较麻烦,尤其是后端框架下各模型各司其职,交叉使用容易混乱,有时候都想修改模型。
PHPCMS后台文章按照点击量排序是很久前实现的功能,今天小黑同学跑来问实现,发现自己都忘记了。整理一下,以备不虞。
1. 修改init函数增加hitorder参数
phpcms的列表是通过iframe加载的,思路是给列表页增加一个按钮,通过带hitorder参数的链接直接访问排序后的页面。
点击找到内容列表的控制器函数 m=content&c=content&a=init
找到文件 phpcms/moudules/content/content.php
修改init函数,将
$datas = $this->db->listinfo($where,'id desc',$_GET['page']);
$pages = $this->db->pages;
修改为
if($_GET['hitorder']){
$this->hits_db = pc_base::load_model('hits_model');
$array = $ids_array = array();
$hitsid = 'c-'.$modelid.'-%';
$where_r = "hitsid LIKE '$hitsid'";
$where_r .= " AND catid='$catid'";
$hits = array();
$result = $this->hits_db->listinfo($where_r,'views desc',$_GET['page']);
$pages = $this->hits_db->pages;
foreach ($result as $r) {
$pos = strpos($r['hitsid'],'-',2) + 1;
$ids_array[] = $id = substr($r['hitsid'],$pos);
$hits[$id] = $r;
}
$ids = implode(',', $ids_array);
if($ids) { $where .= " AND id IN ($ids)"; }
$datas = $this->db->listinfo($where,'field(id,'.$ids.')');
}else{
$datas = $this->db->listinfo($where,'id desc',$_GET['page']);
$pages = $this->db->pages;
};
2.修改列表模版,增加排序链接
这一步比较简单,找到后台列表模版 /phpcms/modules/content/templates/content_list.tpl.php
大概在71行,找到table中thead中的点击量这一行,可以通过搜索L('hits')快速查询。
把这一行修改为
<th width="40"><a href="/index.php?m=content&c=content&a=init&menuid=<?php echo $menuid;?>&catid=<?php echo $catid;?>&pc_hash=<?php echo $pc_hash;?>&hitorder=1"><?php echo L('hits');?></a></th>
大功告成。更新缓存即可使用。