当前位置:首页 > CMS教程 > phpcms > 列表

【phpcms-v9】获取上周发表的文章中点击量最高的三篇带缩略

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-23 16:31:43 浏览: 评论:0 

1.提示:使用{pc action="hits"}{/pc}标签是不能完成此功能的

2.html代码:

  1. <div class="b_bianjituijian_c">   
  2.                     <!-- 当前栏目下周点击率最高的三篇文章 -->   
  3.                     {pc:content action="lists" catid="$catid" len="3" thumb="1" views="week"  cache="3"}   
  4.                     {loop $data $r}   
  5.                     <dl class="b_bianjituijian_cf">   
  6.                         <dt><a href="{$r['url']}"><img src="{$r['thumb']}" width="60" height="60"  alt="{$r['title']}"/></a></dt>   
  7.                         <dd>   
  8.                             <h3><a href="{$r['url']}">{str_cut($r[title],24,'...')}</a></h3>   
  9.                             <p>   
  10.                             {str_cut($r[description],70,'...')}   
  11.                                 <a href="{$r['url']}">【详细】</a>   
  12.                             </p>   
  13.                         </dd>   
  14.                     </dl>   
  15.                        
  16.                     <span class="border-bx"></span>   
  17.                     {/loop}   
  18.                     {/pc}   
  19. </div> 

3.libs/function/global.func.php文件中添加:

  1. //排序函数-weiyanhui添加,主要为了实现list标签中文章按点击量排序功能   
  2. function array_sort($arr,$keys,$type='desc'){   
  3.     $keysvalue = $new_array = array();   
  4.     foreach ($arr as $k=>$v){   
  5.         $keysvalue[$k] = $v[$keys];   
  6.     }   
  7.     if($type == 'asc'){   
  8.         asort($keysvalue);   
  9.     }else{   
  10.         arsort($keysvalue);   
  11.     }   
  12.     reset($keysvalue);   
  13.     foreach ($keysvalue as $k=>$v){   
  14.         $new_array[$k] = $arr[$k];   
  15.     }   
  16.     return $new_array;   
  17. }  

4.content_tag.class.php文件中lists方法:

  1. /**  
  2.      * 列表页标签:主要返回的是主表中数据与附表中数据  
  3.      * @param $data  
  4.      */   
  5.     public function lists($data) {   
  6.         $catid = intval($data['catid']);                            //pc标签中catid属性   
  7.         $data['limit'] = (isset($data['limitt'])&& (!emptyempty($data['limitt'])))?$data['limitt']:$data['limit'];                                   //pc标签中limit属性,此行代码由weiyanhui添加   
  8.         if(!$this->set_modelid($catid)) return false;                        //会根据栏目id->对应的模型id->对应的模型表   
  9.         if(isset($data['where'])) {                                         //如果pc标签中设置了where属性,一般情况下不存在   
  10.             $sql = $data['where'];                                     
  11.         } else {                                                            //如果pc标签中没有设置where属性    
  12.             $thumb = intval($data['thumb']) ? " AND thumb != ''" : '';      //如果有thumb属性   
  13.             if($this->category[$catid]['child']) {                           //当前栏目下是否存在子栏目   
  14.                 $catids_str = $this->category[$catid]['arrchildid'];     //所有子栏目id,包括当前栏目自身id   
  15.                 $pos = strpos($catids_str,',')+1;                             
  16.                 $catids_str = substr($catids_str$pos);                    //所有子栏目id,不包括当前栏目自身id   
  17.                 $sql = "status=99 AND catid IN ($catids_str)".$thumb;       //拼接成一个sql语句   
  18.             } else {   
  19.                     $sql = "status=99 AND catid='$catid'".$thumb;               //如果当前栏目下不存在子栏目   
  20.             }   
  21.         }
  22.            
  23.         //weiyanhui开始,获取一周内发表的点击量最高的带缩略图的三篇文章   
  24.         if(isset($data['views']) && $data['views']=='week'){   
  25.             $time=time()-3600*24*7;//一周内   
  26.             $sql=$sql." and inputtime > '$time' ";   
  27.         }   
  28.         //weiyanhui结束   
  29.            
  30.         //weiyanhui开始,获取昨天发表的点击量最高的三篇文章   
  31.         if(isset($data['views']) && $data['views']=='yestoday'){   
  32.             $time=time()-3600*24;//昨天   
  33.             $sql=$sql." and inputtime > '$time' ";   
  34.         }   
  35.         //weiyanhui结束   
  36.            
  37.         $order = $data['order'];                                            //pc标签中order属性   
  38.         //$sql作为一个条件出现,调用的是model.calss.php文件中的select方法,返回结果集数组,并按照键名'id'排序   
  39.         $return = $this->db->select($sql'*'$data['limit'], $order'''id');//从数据库中获取主表数据,使用的也是sql语句查询   
  40.         //注意:修改了$data['limit']为$data['limitt']了,修改于2012年09月21日 19:15   
  41.         //如果需要在前台显示类别名称,可添加如下代码   
  42.            
  43.            
  44.         /*文章添加类别  
  45.         $TYPES = getcache('type_content','commons');//获取类别缓存文件,此文件缓存了所有与类别信息相关的信息  
  46.         foreach ($return as $key=>$v) {                                       
  47.             $return[$key][typename]=$TYPES[$v['typeid']][name];//给$return中的每篇文章追加一个类别字段  
  48.         }  
  49.         echo "<pre>";  
  50.         print_r($return);  
  51.         */   
  52.            
  53.         //weiyanhui开始,此参数代表从hits表中获取每篇文章的点击量   
  54.         if($data['views']){   
  55.             //二次开发-获取文章点击量   
  56.             foreach($return as &$r){   
  57.                 $h_md=pc_base::load_model('hits_model');   
  58.                 $get_db=$h_md->get_one(array('hitsid'=>"c-".$this->db->modelid."-".$r[id]));   
  59.                 $r['views']=$get_db[views];   
  60.             }   
  61.             $return = array_sort($return,'views');//按点击量排序   
  62.         }   
  63.         //weiyanhui结束   
  64.         //weiyanhui开始   
  65.         if(isset($data['len'])){//截取长度   
  66.             //获取数组中的前len条数据   
  67.             $return=array_slice($return,0, intval($data['len']));   
  68.         }  //开源软件:phpfensi.com 
  69.         //weiyanhui结束   
  70.           
  71.            
  72.         //调用副表的数据   
  73.         if (isset($data['moreinfo']) && intval($data['moreinfo']) == 1) {   //如果pc标签中设置了moreinfo属性:是否调用附表数据   
  74.             $ids = array();   
  75.             //$return为返回的主表数据   
  76.             foreach ($return as $v) {                                       //循环主表中的记录信息:$v-主表中的每条记录   
  77.                 if (isset($v['id']) && !emptyempty($v['id'])) {   
  78.                     $ids[] = $v['id'];                                      //ids[]是主表中排序完成的文章id数组   
  79.                 } else {   
  80.                     continue;   
  81.                 }   
  82.             }   
  83.             if (!emptyempty($ids)) {   
  84.                 $this->db->table_name = $this->db->table_name.'_data';      //副表名    
  85.                 $ids = implode('\',\''$ids);                              //以逗号拼接成一个字符串   
  86.                 $r = $this->db->select("`id` IN ('$ids')"'*''''''''id');//查询与主表中数据有关的副表中的数据   
  87.                 if (!emptyempty($r)) {   
  88.                     foreach ($r as $k=>$v) {                             //副表中的数据   
  89.                         //$return:返回的主表中的数据,主表中的id字段值与附表中的id字段值是对应的,也就是说一篇文章在主表中存储的id跟在附表中存储的id的值是相等的   
  90.                         if (isset($return[$k])) $return[$k] = array_merge($v$return[$k]);//主表中数据与副表中数据合并    
  91.                     }   
  92.                 }   
  93.             }   
  94.         }   
  95.         return $return;   
  96.     }

Tags: phpcms上周文章 phpcms文章点击量

分享到:

相关文章