A-A+

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

2019年04月24日 我爱编程 暂无评论

在网上随便看了一下有很多这类的文章,几乎每一种方法都有它的可用之处了,下文我整理了我觉得还不错的全站最新文章调用方案,大家一起参考.

修改 phpcms/modules/content/classes/content_tag.class.php  在最后面的 },上面添加以下代码:

  1. public function newcontent($data){
  2.   $num = intval($data['limit']) ? intval($data['limit']) : '20';
  3.   // 设置排序 
  4.   switch($data['order']){
  5.   case '1':
  6.   $order = ' `id` ASC ';
  7.   break;
  8.   case '2':
  9.   $order = ' `id` DESC ';
  10.   break;
  11.   case '3':
  12.   $order = ' `inputtime` ASC ';
  13.   break;
  14.   case '4':
  15.   $order = ' `inputtime` DESC ';
  16.   break;
  17.   case '5':
  18.   $order = ' `updatetime` ASC ';
  19.   break;
  20.   case '6':
  21.   $order = ' `updatetime` DESC ';
  22.   break;
  23.   default:
  24.   $order = ' `id` DESC ';
  25.   }
  26.   if($data['catid']){
  27.   $catids = explode(','$data['catid']);
  28.   foreach($catids as $catid){
  29.   $catid = intval($catid);
  30.   if(emptyempty($catid))continue;
  31.   $this->set_modelid($catid);
  32.   $where = $this->category[$catid]['child'] ? ' `catid` IN ('.$this->category[$catid]['arrchildid'].')' : " `catid` = $catid";
  33.   $datas = $this->db->select($where'*'$num$order);
  34.   $data[$catid]['data'] = $datas;
  35.   // 记录本次的文章数 
  36.   $data['num'][] = count($datas);
  37.   $model_num++;
  38.   }
  39.   }else{
  40.   $models = getcache('model''commons');
  41.   foreach($models as $model){
  42.   $this->db->set_model($model['modelid']);
  43.   $datas = $this->db->select('''*'$num$order);
  44.   $data[$model['modelid']]['data'] = $datas;
  45.   // 记录本次的文章数 
  46.   $data['num'][] = count($datas);
  47.   $model_num++;
  48.   }
  49.   }
  50.   if($data){
  51.   // 获取每个模型应该截取的条数 
  52.   $num = ceil($num/$model_num);
  53.   // 循环条数记录用于找出条数不满足的数量然后进行平均 
  54.   $w_num = $w_num_t = '';
  55.   foreach($data['num'as $num_t){
  56.   if($num_t < $num){
  57.   $w_num += $num-$num_t;
  58.   $w_num_t++;
  59.   }
  60.   }
  61.   // 判断是否有不满足平均数的 如果有那么就增加平均值 
  62.   if($w_num_t){
  63.   $num += ceil($w_num/($model_num-$w_num_t));
  64.   }
  65.   $datas = array();
  66.   foreach($data as $r){
  67.   $r_n = '';
  68.   if(is_array($r['data']))
  69.   foreach($r['data'as $r_t){
  70.   $datas[] = $r_t;
  71.   if(++$r_n == $num)break;
  72.   } //开源软件:kexuesw520.com
  73.   }
  74.   return $datas;
  75.   }else{
  76.   return false;
  77.   }
  78.   }

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

  1. {pc:content action=”newcontent”  num=15}
  2. <ul >
  3. {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}
  4. </ul>
  5. {/pc}

这样就可以获取到全站最新的15条数据,默认是调用20条最新,如果不设置.

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

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

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

还有一种方案,代码放置的位置是不一样的。

V9的模型使用分表储存,调用多个模型下的最新内容使用GET来IN catid却要连表查询十分麻烦,所以使用下面的办法即可.

第一步:

phpcms/libs/functions/extention.func.php

里面增加如下代码:

  1. function news($limit="",$modelid="",$where="")
  2. {
  3.   $db=pc_base::load_model('content_model');
  4.   if((strpos($modelid,",")>=0))
  5.   {
  6.    $modelid=explode(",",$modelid);
  7.    $midarr=$dot='';
  8.    foreach($modelid as $mid)
  9.    {
  10.     $midarr=$midarr.$dot.$mid;
  11.     $dot=',';
  12.    }
  13.    $sq="`modelid` IN ({$midarr})";
  14.   }
  15.   else
  16.   {
  17.    $sq="`modelid`={$modelid}";
  18.   }
  19.   $db->table_name='v9_model';
  20.   $models=$db->select($sq,"tablename");
  21.   $sql='';
  22.   $lianhe='';
  23.   foreach($models as $name)
  24.   {
  25.    $sql=$sql.$lianhe."SELECT id,catid,title,url,inputtime FROM v9_{$name['tablename']}";
  26.    $lianhe=' UNION ALL ';
  27.   }
  28.   $time=time();
  29.   $sql=$sql." ".$where." order by inputtime desc limit  ".$limit;
  30.   $allnews=$db->query($sql);
  31.   while($r = $db->fetch_array($allnews))
  32.   {//开源软件:kexuesw520.com
  33.    if($keyfield)
  34.    {
  35.     $key = $r[$keyfield];
  36.     $array[$key] = $r;
  37.    }
  38.    else
  39.    {
  40.     $array[] = $r;
  41.    }
  42.   }
  43.   return $array[0];
  44. }

以上代码需要注意的是里面表前缀,这里是V9,使用的时候改成你自己的表前缀,默认是V9.

第二步:

调用的方式为:

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

解释:

数字是调用条数,从0开始调用8条

数字模型ID,不是栏目的ID,多个模型用,分开

给我留言

Copyright © 四季博客 保留所有权利.   Theme  Ality

用户登录