在早些年的教程Phpcms V9 点击量排行调用方法、Phpcms V9 栏目列表调用文章点击量及评论数量方法中,讲到了Phpcms v9点击率文章的调用方法,但不能很好地调用全站文章的排行榜,今天CMSYOU在这里与大家分享Phpcms v9自定义全站多模型调用排行榜文章方法。
Phpcms v9默认调用排行榜文章的方法:
{pc:content action="hits" catid="6" num="10" order="views DESC"}{loop $data $r}<li><a href="{$r[url]}" target="_blank">{$r[title]}</a></li>{/loop}{/pc}
使用的是hits标记,而这一个方法需要指定栏目catid,根据栏目获取模型modelid,从而调用指定表的数据,于是局限了栏目模型、局限了数据表。
今天CMSYOU在这里分享Phpcms v9自定义全站多模型调用排行榜文章方法,是从源头修改,找到\phpcms\modules\content\classes\content_tag.class.php文件,在public function hits($data) {***}函数之后增加一个自定义函数hits_all($data):
/*** 全站不限模型排行榜标签 @cmsyou.com* @param $data*/public function hits_all($data) {$this->hits_db = pc_base::load_model('hits_model');$sql = $desc = $ids = '';$array = $ids_array = array();$order = $data['order'];$sql = "";if(isset($data['day'])) {$updatetime = SYS_TIME-intval($data['day'])*86400;$sql .= " AND updatetime>'$updatetime'";}$hits = array();$ids_array = array();$result = $this->hits_db->select($sql, '*', $data['limit'], $order);foreach ($result as $r) {$pos = strpos($r['hitsid'],'-',2) + 1;$ids_array[]['id'] = $id = substr($r['hitsid'],$pos);$temparr = explode("-",$r['hitsid']);$ids_array[]['modelid'] = $temparr[1];$hits[$id] = $r;}foreach ($ids_array as $r) {if($r['id']) {$sql = "status=99 AND id IN ($r[id])";} else {$sql = '';}$this->set_modelid($r['modelid']);$result = $this->db->select($sql, '*', $data['limit'],'','','id');if($result[$r['id']]['title']!='') {$array[$r['id']] = $result[$r['id']];$array[$r['id']] = array_merge($array[$r['id']], $hits[$r['id']]);}}return $array;}
以上语句函数是最近CMSYOU实际项目中改造而成,经过测试。
前台模板具体调用方法:
{pc:content action="hits" num="10" order="views DESC"}{loop $data $r}<li><a href="{$r[url]}" target="_blank">{$r[title]}</a></li>{/loop}{/pc}
参数只需要控制num数量就好,其他的参数order规则不变,可以调用views、yesterdayviews、dayviews、weekviews、monthviews等字段的desc、asc。
不时研究CMS分享在此,坚持分享更多自定义phpcms方法在此,多谢大家几年来的关注与关照!
点击加载更多