如何获取phpcms全部栏目的最新内容

更新时间:2022-07-03 18:28:12 来源:互联网 作者:青锋建站
  由于默认的phpcms模板标签无法获取多个栏目的最新文章,因为青锋建站给大家分享的通过phpcms自定义模板标签来实现获取全部栏目的最新内容。content_tag.class.php 是系统定义标签的文件,这个文件中定义的标签在模板中可直接调用,如 lists、position 等。这里我们通过新增自定义标签 "newcontent"来实现调用多个栏目的最新文章。

调用多个栏目的最新文章实现步骤

  打开 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 就可以在模板中直接使用。如要获取特定几个栏目下的所有新闻的排序:
	<h3 class="widget-title">最近新闻</h3>
	<ul>
{pc:content action="newcontent" num="10" $catid="11,12"}
{loop $data $r}
		<li>
			<a href="{$r[url]}" title="{$r[title]}">{$r[title]}</a>
		</li>
{/loop}
{/pc}
	</ul>
  这里指定的是获取 catid 为 11、12 两个栏目下的新闻。如果不指定参数 catid,则获取整个站点下所有栏目的内容(不一定是新闻栏目);默认的排序方式为 id 降序,可指定参数 order 设置多种排序方式,如时间升序、降序等,参加函数代码。以上是青锋建站给大家分享的如何获取phpcms全部栏目的最新内容的实现方法,青锋建站承接网站建设服务,包括织梦建站,phpcms建站,wordpress建站,CMS系统开发,SEO网站优化,网络营销推广,企业邮箱,400电话。
文章来源:https://my.oschina.net/codercpf/blog/1620575

转载请注明来源网址:青锋建站-http://www.sjzphp.com/kaifazhe/phpcms/latest_1410.html

电话 15632335515 | 邮箱 943703539@qq.com | QQ 943703539 | 微信 qingfengjianzhan

Copyright © 2016-2026 青锋建站 版权所有