首页 > CMS > PhpCMS > 正文

【phpcms-v9】对{pc}标签进行二次开发,让其可以获取limit指定

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

【phpcms-v9】对{pc}标签进行二次开发,让其可以获取limit指定的文章条数.

1.{pc}标签中limit参数只有在有分页的情况下才会起作用,在无分页的情况下是不起作用的,那么如果我们想获取指定数据段的记录,该如何操作呢?

以下写法都不能满足需求:

  1.   {pc:content action="lists" catid="$catid" order="id desc" limit="0,7" } {/pc} //默认获取的第0篇到第7篇文章 
  2.  
  3.    {pc:content action="lists" catid="$catid" order="id desc" limit="7,7" } {/pc} //默认获取的还是第0篇到第7篇文章,而不是第7篇到14篇文章
  4.  
  5.    {pc:content action="lists" catid="$catid" order="id desc" num="7" } {/pc} //默认获取的还是第0篇到第7篇文章
  6.  
  7.    {pc:content action="lists" catid="$catid" order="id desc"       limit="7,7" num=“7” } {/pc} //默认获取的还是第0篇到第7篇文章,而不是第7篇到14篇文章 
  8.  
  9. {pc:content action="lists" catid="$catid"  order="id desc" num="7"   start=“7” } {/pc} //这样应该能够获取到第7篇到第14篇文章,从第7篇文章开始,获取后面的7篇文章

2.如果想实现如图功能,该如何操作呢?

第①步:在pc标签中添加limitt参数,注意是limitt,而不是limit,或者任意名称的参数:

  1. <!-- 第0-7篇文章 -->   
  2.             {php $i=0;}   
  3.             {pc:content action="lists"  catid="$catid"  limitt="0,7" order="id DESC"}   
  4.             <ul class="erji_center_content">   
  5.                 {loop $data $r}   
  6.                 <li><a href="{$r[url]}">{$r[title]}</a></li>   
  7.                 {/loop}   
  8.             </ul>   
  9.             <span class="border-cx"></span>   
  10.             {/pc}   
  11.                
  12.                
  13.             <!-- 第7-14篇文章 -->   
  14.             {php $i=0;}   
  15.             {pc:content action="lists"  catid="$catid"  limitt="7,7" order="id DESC"}   
  16.             <ul class="erji_center_content">   
  17.                 {loop $data $r}   
  18.                 <li><a href="{$r[url]}">{$r[title]}</a></li>   
  19.                 {/loop}   
  20.             </ul>   
  21.             <span class="border-cx"></span>   
  22.             {/pc}   
  23.    
  24.             <!-- 第14-21篇文章 -->   
  25.             {php $i=0;}   
  26.             {pc:content action="lists"  catid="$catid"  limitt="14,7" order="id DESC"}   
  27.             <ul class="erji_center_content">   
  28.                 {loop $data $r}   
  29.                 <li><a href="{$r[url]}">{$r[title]}</a></li>   
  30.                 {/loop}   
  31.             </ul>   
  32.             <span class="border-cx"></span>   
  33.             {/pc}   

第②步:修改content_tag.class.php文件中的lists方法

  1. /**  
  2.      * 列表页标签:主要返回的是主表中数据与附表中数据  
  3.      * @param $data  
  4.      */   
  5.     public function lists($data) {   
  6.         $catid = intval($data['catid']);                                    //pc标签中catid属性   
  7.            
  8.            
  9.         //加上这行代码即可   
  10.         $data['limit'] = (isset($data['limitt'])&& (!emptyempty($data['limitt'])))?$data['limitt']:$data['limit'];      
  11.    
  12.            
  13.            
  14.         //pc标签中limit属性,此行代码由weiyanhui添加   
  15.         if(!$this->set_modelid($catid)) return false;                        //会根据栏目id->对应的模型id->对应的模型表   
  16.         if(isset($data['where'])) {                                         //如果pc标签中设置了where属性,一般情况下不存在   
  17.             $sql = $data['where'];                                             
  18.         } else {                                                            //如果pc标签中没有设置where属性    
  19.             $thumb = intval($data['thumb']) ? " AND thumb != ''" : '';      //如果有thumb属性   
  20.             if($this->category[$catid]['child']) {                           //当前栏目下是否存在子栏目   
  21.                 $catids_str = $this->category[$catid]['arrchildid'];     //所有子栏目id,包括当前栏目自身id   
  22.                 $pos = strpos($catids_str,',')+1;                             
  23.                 $catids_str = substr($catids_str$pos);                    //所有子栏目id,不包括当前栏目自身id   
  24.                 $sql = "status=99 AND catid IN ($catids_str)".$thumb;       //拼接成一个sql语句   
  25.             } else {   
  26.                     $sql = "status=99 AND catid='$catid'".$thumb;               //如果当前栏目下不存在子栏目   
  27.             }   
  28.         }   
  29.         $order = $data['order'];                                            //pc标签中order属性   
  30.         //$sql作为一个条件出现,调用的是model.calss.php文件中的select方法,返回结果集数组,并按照键名'id'排序   
  31.         $return = $this->db->select($sql'*'$data['limit'], $order'''id');//从数据库中获取主表数据,使用的也是sql语句查询   
  32.         //注意:修改了$data['limit']为$data['limitt']了,修改于2012年09月21日 19:15   
  33.         //如果需要在前台显示类别名称,可添加如下代码   
  34.            
  35.         $TYPES = getcache('type_content','commons');//获取类别缓存文件,此文件缓存了所有与类别信息相关的信息   
  36.         foreach ($return as $key=>$v) {                                        
  37.             $return[$key][typename]=$TYPES[$v['typeid']][name];//给$return中的每篇文章追加一个类别字段   
  38.         }   
  39.         //echo "<pre>";   
  40.         //print_r($return);   
  41.            
  42.         //调用副表的数据   
  43.         if (isset($data['moreinfo']) && intval($data['moreinfo']) == 1) {   //如果pc标签中设置了moreinfo属性:是否调用附表数据   
  44.             $ids = array();   
  45.             //$return为返回的主表数据   
  46.             foreach ($return as $v) {                                       //循环主表中的记录信息:$v-主表中的每条记录   
  47.                 if (isset($v['id']) && !emptyempty($v['id'])) {   
  48.                     $ids[] = $v['id'];                                      //ids[]是主表中排序完成的文章id数组   
  49.                 } else {   
  50.                     continue;   
  51.                 }   
  52.             }   
  53.             if (!emptyempty($ids)) {   
  54.                 $this->db->table_name = $this->db->table_name.'_data';      //副表名    
  55.                 $ids = implode('/',/''$ids);                              //以逗号拼接成一个字符串   
  56.                 $r = $this->db->select("`id` IN ('$ids')"'*''''''''id');//查询与主表中数据有关的副表中的数据   
  57.                 if (!emptyempty($r)) {   
  58.                     foreach ($r as $k=>$v) {                             //副表中的数据   
  59.                         //$return:返回的主表中的数据,主表中的id字段值与附表中的id字段值是对应的,也就是说一篇文章在主表中存储的id跟在附表中存储的id的值是相等的   
  60.                         if (isset($return[$k])) $return[$k] = array_merge($v$return[$k]);//主表中数据与副表中数据合并    
  61.                     }  //开源软件:Vevb.com 
  62.                 }   
  63.             }   
  64.         }   
  65.         return $return;   
  66.     }   

发现在pc标签中,并不是所有的条件参数都可以是变量的,如下所示:

{pc content="lists" catid="$catid" limit="$start,9"}{/pc}

catid:可以是变量

limit:中的第一个条件是不可以为变量的,再如:where="" 也是不允许出现变量的,当pc标签的参数为单个条件时可以为变量,多个条件时不可以为变量.

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