phpcms v9如何调用全站最新文章?多种方法

发布时间:2019-11-12编辑:脚本学堂
有关phpcms v9调用全站最新文章的方法,在phpcms v9中调用栏目最新文章很方便,但调用全站最新文章则需要一些技巧,一起来了解下。

phpcms v9全站最新文章调用方法

修改 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;
}
}
 
 

然后,在需要调用全站最新的页面中调用标签:
 

{pc:content action=”newcontent”num=15}
<ul >
{loop $data $r}<li><span class=”date”>{date(‘m-d’,$r[inputtime])}</span> <a href=”{$r['url']}” target=”_blank”>{str_cut($r[title],57,”)}</a></li>{/loop}
</ul>
{/pc}
 

这样就可以获取到全站最新的15条数据。
默认是调用20条最新,如果不设置。
catid: 可有可无加了就只调用指定栏目的信息多个栏目请使用英文半角的 ,间隔
order:排序 参数值:1-7具体的含义在代码中很容易看明白
num:调用数量不指定默认调用20条
还有一种方案,代码放置的位置是不一样的。
V9的模型使用分表储存,调用多个模型下的最新内容使用GET来IN catid却要连表查询十分麻烦,所以使用以下办法即可:

第一步:
phpcms/libs/functions/extention.func.php

其中添加:
 

function news($limit="",$modelid="",$where="")
{
$db=pc_base::load_model('content_model');
if((strpos($modelid,",")>=0))
{
 $modelid=explode(",",$modelid);
 $midarr=$dot='';
 foreach($modelid as $mid)
 {
$midarr=$midarr.$dot.$mid;
$dot=',';
 }
 $sq="`modelid` IN ({$midarr})";
}
else
{
 $sq="`modelid`={$modelid}";
}
$db->table_name='v9_model';
$models=$db->select($sq,"tablename");
$sql='';
$lianhe='';
foreach($models as $name)
{
 $sql=$sql.$lianhe."SELECT id,catid,title,url,inputtime FROM v9_{$name['tablename']}";
 $lianhe=' UNION ALL ';
}
 
$time=time();
$sql=$sql." ".$where." order by inputtime desc limit".$limit;
 
$allnews=$db->query($sql);
while($r = $db->fetch_array($allnews))
{
 if($keyfield)
 {
$key = $r[$keyfield];
$array[$key] = $r;
 }
 else
 {
$array[] = $r;
 }
}
return $array[0];
}
 

 
以上代码,注意其中表前缀,这里是V9,使用时改成自己的表前缀,默认是V9。
第二步:
调用方式:
 

<?php $recent=news(“0,8“,”1,12“);?>
{loop $recent $r}
<li><a href=”{$r['url']}” target=”_blank” title=”{$r['title']}”>{str_cut($r[title],54,”)}</a></li>
{/loop}
{/pc}

解释:
红色数字是调用条数,从0开始调用8条
蓝色数字模型ID,不是栏目的ID,多个模型用,分开。