1.提示:使用{pc action="hits"}{/pc}标签是不能完成此功能的
2.html代码:
- <div class="b_bianjituijian_c">
- <!-- 当前栏目下周点击率最高的三篇文章 -->
- {pc:content action="lists" catid="$catid" len="3" thumb="1" views="week" cache="3"}
- {loop $data $r}
- <dl class="b_bianjituijian_cf">
- <dt><a href="{$r['url']}"><img src="{$r['thumb']}" width="60" height="60" alt="{$r['title']}"/></a></dt>
- <dd>
- <h3><a href="{$r['url']}">{str_cut($r[title],24,'...')}</a></h3>
- <p>
- {str_cut($r[description],70,'...')}
- <a href="{$r['url']}">【详细】</a>
- </p>
- </dd>
- </dl>
- <span class="border-bx"></span>
- {/loop}
- {/pc}
- </div>
3.libs/function/global.func.php文件中添加:
- //排序函数-weiyanhui添加,主要为了实现list标签中文章按点击量排序功能
- function array_sort($arr,$keys,$type='desc'){
- $keysvalue = $new_array = array();
- foreach ($arr as $k=>$v){
- $keysvalue[$k] = $v[$keys];
- }
- if($type == 'asc'){
- asort($keysvalue);
- }else{
- arsort($keysvalue);
- }
- reset($keysvalue);
- foreach ($keysvalue as $k=>$v){
- $new_array[$k] = $arr[$k];
- }
- return $new_array;
- }
4.content_tag.class.php文件中lists方法:
- /**
- * 列表页标签:主要返回的是主表中数据与附表中数据
- * @param $data
- */
- public function lists($data) {
- $catid = intval($data['catid']); //pc标签中catid属性
- $data['limit'] = (isset($data['limitt'])&& (!emptyempty($data['limitt'])))?$data['limitt']:$data['limit']; //pc标签中limit属性,此行代码由weiyanhui添加
- if(!$this->set_modelid($catid)) return false; //会根据栏目id->对应的模型id->对应的模型表
- if(isset($data['where'])) { //如果pc标签中设置了where属性,一般情况下不存在
- $sql = $data['where'];
- } else { //如果pc标签中没有设置where属性
- $thumb = intval($data['thumb']) ? " AND thumb != ''" : ''; //如果有thumb属性
- if($this->category[$catid]['child']) { //当前栏目下是否存在子栏目
- $catids_str = $this->category[$catid]['arrchildid']; //所有子栏目id,包括当前栏目自身id
- $pos = strpos($catids_str,',')+1;
- $catids_str = substr($catids_str, $pos); //所有子栏目id,不包括当前栏目自身id
- $sql = "status=99 AND catid IN ($catids_str)".$thumb; //拼接成一个sql语句
- } else {
- $sql = "status=99 AND catid='$catid'".$thumb; //如果当前栏目下不存在子栏目
- }
- }
- //weiyanhui开始,获取一周内发表的点击量最高的带缩略图的三篇文章
- if(isset($data['views']) && $data['views']=='week'){
- $time=time()-3600*24*7;//一周内
- $sql=$sql." and inputtime > '$time' ";
- }
- //weiyanhui结束
- //weiyanhui开始,获取昨天发表的点击量最高的三篇文章
- if(isset($data['views']) && $data['views']=='yestoday'){
- $time=time()-3600*24;//昨天
- $sql=$sql." and inputtime > '$time' ";
- }
- //weiyanhui结束
- $order = $data['order']; //pc标签中order属性
- //$sql作为一个条件出现,调用的是model.calss.php文件中的select方法,返回结果集数组,并按照键名'id'排序
- $return = $this->db->select($sql, '*', $data['limit'], $order, '', 'id');//从数据库中获取主表数据,使用的也是sql语句查询
- //注意:修改了$data['limit']为$data['limitt']了,修改于2012年09月21日 19:15
- //如果需要在前台显示类别名称,可添加如下代码
- /*文章添加类别
- $TYPES = getcache('type_content','commons');//获取类别缓存文件,此文件缓存了所有与类别信息相关的信息
- foreach ($return as $key=>$v) {
- $return[$key][typename]=$TYPES[$v['typeid']][name];//给$return中的每篇文章追加一个类别字段
- }
- echo "<pre>";
- print_r($return);
- */
- //weiyanhui开始,此参数代表从hits表中获取每篇文章的点击量
- if($data['views']){
- //二次开发-获取文章点击量
- foreach($return as &$r){
- $h_md=pc_base::load_model('hits_model');
- $get_db=$h_md->get_one(array('hitsid'=>"c-".$this->db->modelid."-".$r[id]));
- $r['views']=$get_db[views];
- }
- $return = array_sort($return,'views');//按点击量排序
- }
- //weiyanhui结束
- //weiyanhui开始
- if(isset($data['len'])){//截取长度
- //获取数组中的前len条数据
- $return=array_slice($return,0, intval($data['len']));
- } //开源软件:Vevb.com
- //weiyanhui结束
- //调用副表的数据
- if (isset($data['moreinfo']) && intval($data['moreinfo']) == 1) { //如果pc标签中设置了moreinfo属性:是否调用附表数据
- $ids = array();
- //$return为返回的主表数据
- foreach ($return as $v) { //循环主表中的记录信息:$v-主表中的每条记录
- if (isset($v['id']) && !emptyempty($v['id'])) {
- $ids[] = $v['id']; //ids[]是主表中排序完成的文章id数组
- } else {
- continue;
- }
- }
- if (!emptyempty($ids)) {
- $this->db->table_name = $this->db->table_name.'_data'; //副表名
- $ids = implode('/',/'', $ids); //以逗号拼接成一个字符串
- $r = $this->db->select("`id` IN ('$ids')", '*', '', '', '', 'id');//查询与主表中数据有关的副表中的数据
- if (!emptyempty($r)) {
- foreach ($r as $k=>$v) { //副表中的数据
- //$return:返回的主表中的数据,主表中的id字段值与附表中的id字段值是对应的,也就是说一篇文章在主表中存储的id跟在附表中存储的id的值是相等的
- if (isset($return[$k])) $return[$k] = array_merge($v, $return[$k]);//主表中数据与副表中数据合并
- }
- }
- }
- }
- return $return;
- }
新闻热点
疑难解答