欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  程序教程

PHPCMS V9调用全站最新文章内容列表

程序员文章站 2021-12-12 21:44:46
...

PHPCMS V9并没有自带全站最新文章的标签,通过PHPCMS v9自带的标签只能调用当前栏目下的最新文章,在首页或者其他非栏目页面时,就无法调用到最新的文章了。为了保持页面一定的更新度,调用全站的最新文章就显得非常重要。

给大家分享两种调用全站最新文章的方法,原理上来说,都是差不多的。一种是通过PHPCMS v9的SQL标签来实现最新文章的调用;另一种是自定义一个最新文章的标签。

SQL标签调用PHPCMS最新文章

通过SQL标签调用PHPCMS V9的最新文章,关键点就是SQL语句的书写,这里提供以下的代码示范:

{pc:get sql="SELECT a.title, a.catid, b.catid, b.catname, a.url as turl ,b.url as curl,a.id FROM `v9_news` a, `v9_category` b WHERE a.catid = b.catid ORDER BY `a`.`id` DESC " num="15" cache="300"}
{loop $data $r}
<h6><font class="cate"><a href="{$r[curl]}">[{$r[catname]}] {str_cut($r['title'],26)}{/loop}
{/pc}

不过这段代码只能调用文章模型的最新文章,如果还需要调用其他模型的文章,则需要修改SQL语句。

自定义标签调用PHPCMS最新文章

通过自定义标签调用PHPCMS最新文章的方法,弥补了上面方法的一些不足,增加了一些参数,提高了灵活度,不过对应的也加大了修改的难度。修改phpcms\modules\content\classes文件夹下的content_tag.class.php文件,在最后面的}上面添加如下代码:

public function newcontent($data){
	$num = intval($data['limit']) ? intval($data['limit']) : '20';
	// 设置排序
	switch($data['order']){
	case '1':
	$order = ' `id` ASC ';
	break;
	case '2':
	$order = ' `id` DESC ';
	break;
	case '3':
	$order = ' `inputtime` ASC ';
	break;
	case '4':
	$order = ' `inputtime` DESC ';
	break;
	case '5':
	$order = ' `updatetime` ASC ';
	break;
	case '6':
	$order = ' `updatetime` DESC ';
	break;
	default:
	$order = ' `id` DESC ';
	}
	if($data['catid']){
	$catids = explode(',', $data['catid']);
	foreach($catids as $catid){
	$catid = intval($catid);
	if(empty($catid))continue;
	$this->set_modelid($catid);
	$where = $this->category[$catid]['child'] ? ' `catid` IN ('.$this->category[$catid]['arrchildid'].')' : " `catid` = $catid";
	$datas = $this->db->select($where, '*', $num, $order);
	$data[$catid]['data'] = $datas;
	// 记录本次的文章数
	$data['num'][] = count($datas);
	$model_num++;
	}
	}else{
	$models = getcache('model', 'commons');
	foreach($models as $model){
	$this->db->set_model($model['modelid']);
	$datas = $this->db->select('', '*', $num, $order);
	$data[$model['modelid']]['data'] = $datas;
	// 记录本次的文章数
	$data['num'][] = count($datas);
	$model_num++;
	}
	}
	if($data){
	// 获取每个模型应该截取的条数
	$num = ceil($num/$model_num);
	// 循环条数记录用于找出条数不满足的数量然后进行平均
	$w_num = $w_num_t = '';
	foreach($data['num'] as $num_t){
	if($num_t < $num){
	$w_num += $num-$num_t;
	$w_num_t++;
	}
	}
	// 判断是否有不满足平均数的 如果有那么就增加平均值
	if($w_num_t){
	$num += ceil($w_num/($model_num-$w_num_t));
	}
	$datas = array();
	foreach($data as $r){
	$r_n = '';
	if(is_array($r['data']))
	foreach($r['data'] as $r_t){
	$datas[] = $r_t;
	if(++$r_n == $num)break;
	}
	}
	return $datas;
	}else{
	return false;
	}
}

本段代码作用是增加了一个newcontent的标签,调用的时候使用和默认的文章列表调用差不多:

{pc:content action="newcontent" }

该标签可使用的参数说明如下:

catid: 可有可无 加了就只调用指定栏目的信息 多个栏目请使用英文半角的 ,间隔

order:排序 参数值:1-7 具体的含义在代码里面很容易看明白 不祥述

num:调用数量 不指定默认调用20条

以上两种调用PHPCMS最新文章的方法还是不理想,最好是能在PHPCMS默认列表标签的基础上进行扩展。不过PHPCMS最大的好处就是方便二次开发,感兴趣的朋友可以自行研究。