开发笔记📐 发现👽 人物👮 趣闻💦
phpcms后台实现文章列表按点击量排序记录

phpcms后台实现文章列表按点击量排序记录
2018-08-20 17:32:09   点击:

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>

大功告成。更新缓存即可使用。

phpcms 后台 PHP 排序

上一篇:翻译:VSCode2018年7月(版本1.26)更新日志中文版
下一篇:PHPCMS移动版静态架构逻辑实现 手机版同步PC版