首页 > CMS > PhpCMS > 正文

【phpcms-v9】如何通过{pc}标签获取全站文章内容?

2024-09-10 07:15:49
字体:
来源:转载
供稿:网友

1.phpcms-v9默认情况下只能根据catid获取当前栏目及子栏目下的文章,但是有时候我们需要如何通过{pc}标签来获取全站文章内容的需求,应该怎么做呢?

第一步:在content_tag.class.php文件中添加如下方法:

  1. /**  
  2.      * 列表页标签:主要返回的是主表中数据与附表中数据  
  3.      * @param $data  
  4.      */   
  5.     public function lists_all($data) {   
  6.         $this->db->set_model(1);//将模型手动指定为文章模型,为什么?因为根据源代码的套路,模型id的是根据catid来设置的,但是现在获取的是所有的文章,而不局限于某个栏目,所以只能手动将其设置为文章模型1  //根据模型id获取当前模型所对应的模型表和数据表 1:文档模型-news  3:图片模型-picture   2:下载模型-download   
  7.         if(isset($data['where'])) {                                         //如果pc标签中设置了where属性,一般情况下不存在   
  8.             $sql = $data['where'];   
  9.         } else {                                                            //如果pc标签中没有设置where属性   
  10.             $thumb = intval($data['thumb']) ? " AND thumb != ''" : '';      //如果有thumb属性   
  11.             $sql = "status=99 ".$thumb;//去掉catid条件              //如果当前栏目下不存在子栏目   
  12.         }   
  13.         $order = $data['order'];                                            //pc标签中order属性   
  14.         //$sql作为一个条件出现,调用的是model.calss.php文件中的select方法,返回结果集数组,并按照键名'id'排序   
  15.         $return = $this->db->select($sql'*'$data['limit'], $order'''id');//从数据库中获取主表数据,使用的也是sql语句查询   
  16.        
  17.         //如果需要在前台显示类别名称,可添加如下代码   
  18.        
  19.         $TYPES = getcache('type_content','commons');//获取类别缓存文件,此文件缓存了所有与类别信息相关的信息   
  20.         foreach ($return as $key=>$v) {   
  21.             $return[$key][typename]=$TYPES[$v['typeid']][name];//给$return中的每篇文章追加一个类别字段   
  22.         }   
  23.         //echo "<pre>";   
  24.         //print_r($return);   
  25.        
  26.         //调用副表的数据   
  27.         if (isset($data['moreinfo']) && intval($data['moreinfo']) == 1) {   //如果pc标签中设置了moreinfo属性:是否调用附表数据   
  28.             $ids = array();   
  29.             //$return为返回的主表数据   
  30.             foreach ($return as $v) {                                       //循环主表中的记录信息:$v-主表中的每条记录   
  31.                 if (isset($v['id']) && !emptyempty($v['id'])) {   
  32.                     $ids[] = $v['id'];                                      //ids[]是主表中排序完成的文章id数组   
  33.                 } else {   
  34.                     continue;   
  35.                 }   
  36.             }   
  37.             if (!emptyempty($ids)) {   
  38.                 $this->db->table_name = $this->db->table_name.'_data';      //副表名   
  39.                 $ids = implode('/',/''$ids);                              //以逗号拼接成一个字符串   
  40.                 $r = $this->db->select("`id` IN ('$ids')"'*''''''''id');//查询与主表中数据有关的副表中的数据   
  41.                 if (!emptyempty($r)) {   
  42.                     foreach ($r as $k=>$v) {                             //副表中的数据   
  43.                         //$return:返回的主表中的数据,主表中的id字段值与附表中的id字段值是对应的,也就是说一篇文章在主表中存储的id跟在附表中存储的id的值是相等的   
  44.                         if (isset($return[$k])) $return[$k] = array_merge($v$return[$k]);//主表中数据与副表中数据合并   
  45.                     }  //开源软件:Vevb.com 
  46.                 }   
  47.             }   
  48.         }   
  49.         return $return;   
  50.     }   

第二步:在模板文件中调用:

  1. {pc:content action="lists_all" num="15" order="id DESC" page="$page"}   
  2.             {loop $data $r $val}   
  3.                 <a href="{$val[url]}">   
  4.                     <dl class="wenzhangliebiao">     
  5.                         <dt><img src="{$val[thumb]}" width="132" height="97" alt="盘点苹果公司的生财之道"></dt>   
  6.                         <dd>   
  7.                             <h3>{$val[title]}</h3>   
  8.                             <p>{str_cut($val[description],220,'...')} </p>   
  9.                             <div><span>{date('Y年m月d日 H:i:s',$val[inputtime])}</span>     <span>{date('H:i',$val[updatetime])}更新</span></div>   
  10.                         </dd>   
  11.                     </dl>   
  12.                 </a>   
  13.             {/loop}   
  14.             {/pc}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表