大家好,有同学反馈是否列表页的帖子不要全部显示只显示预定的时间段帖子数量?,有没有什么可调用的方法,以本人目前认知是没有此类的设置和调用标签。以下是小秋自己捣鼓出来的,只分享不保证,经过测试完成完美实现。现在跟的步骤来做:


打开\core\library\think\template\taglib

eyou.php文件:大概36新


 'list'       => ['attr' => 'modelid,channelid,typeid,notypeid,pagesize,row,loop,keyword,titlelen,orderby,ordermode,orderway,noflag,flag,bodylen,infolen,empty,mod,id,key,addfields,thumb,arcrank,idlist,idrange,siteall'],


修改为:

 'list'       => ['attr' => 'modelid,channelid,typeid,notypeid,pagesize,row,loop,keyword,titlelen,orderby,ordermode,orderway,noflag,flag,bodylen,infolen,empty,mod,id,key,addfields,thumb,arcrank,idlist,idrange,siteall,timewode'],


继续查找(938行左右)


 public function tagList($tag, $content)


在里面的内容的:


        $keyword     = isset($tag['keyword']) ? $tag['keyword'] : '';
        $keyword  = $this->varOrvalue($keyword);



下面新增:


        $timewode     = isset($tag['timewode']) ? $tag['timewode'] : '';
        $timewode  = $this->varOrvalue($timewode);



继续往下查找:


 // 查询数据库获取的数据集
        $parseStr .= ' $param = array(';
        $parseStr .= '      "typeid"=> $typeid,';
        $parseStr .= '      "notypeid"=> '.$notypeid.',';
        $parseStr .= '      "flag"=> "'.$flag.'",';
        $parseStr .= '      "noflag"=> "'.$noflag.'",';
        $parseStr .= '      "channel"=> $modelid,';
        $parseStr .= '      "keyword"=> '.$keyword.',';
        $parseStr .= '      "idlist"=> '.$idlist.',';
        $parseStr .= '      "idrange"=> '.$idrange.',';


下面新增:

    $parseStr .= '      "timewode"=> '.$timewode.',';


保存  本页结束:



打开:\core\library\think\template\taglib\eyou

TagList.php文件 

查找:

  public function getList($param = array(), $pagesize = 10, $orderby = '', $addfields = '', $ordermode = '', $thumb = '', $arcrank = '',$siteall = null)



在这个函数里面我们继续往下查找:


       $condition = array();
            foreach (array('keywords','keyword','typeid','notypeid','flag','noflag','channel') as $key) {


修改为:


       $condition = array();
            foreach (array('keywords','keyword','typeid','notypeid','flag','noflag','channel','timewode') as $key) {


继续往下查找:


 elseif ($key == 'keyword' && trim($param[$key])) {
                        $keyword = str_replace(',', ',', $param[$key]);
                        $keywordArr = explode(',', $keyword);
                        $keywordArr = array_unique($keywordArr); // 去重
                        foreach ($keywordArr as $_k => $_v) {
                            $_v = trim($_v);
                            if (empty($_v)) {
                                unset($keywordArr[$_k]);
                                break;
                            } else {
                                $keywordArr[$_k] = addslashes($_v);
                            }
                        }
                        $keyword = implode('|', $keywordArr);
                        $condition[] = Db::raw(" concat(a.title,a.SEO_keywords) REGEXP '$keyword' ");
                    }


下面增加:


 elseif ($key == 'timewode' && trim($param[$key])) {
                        $timewode = trim($param[$key]);
                        $num = 0;
                        $unit = 'd';
                        $startTime = 0;
                        if (preg_match('/^(\d+)$/', $timewode, $matches)) {
                            $num = intval($matches[1]);
                        }
                        elseif (preg_match('/^(\d+)([dwmqy])$/i', $timewode, $matches)) {
                            $num = intval($matches[1]);
                            $unit = strtolower($matches[2]);
                        }
                       
                        if ($num > 0) {
                            $archivesModel = Db::name('archives');
                            $archivesModel->where('status', 1);
                            $lastPostTime = $archivesModel->max('add_time');
                            $originalEndTime = $lastPostTime > 0 ? $lastPostTime : time();
                            $endTime = strtotime(date('Y-m-d 23:59:59', $originalEndTime));
                            switch ($unit) {
                                case 'd': // 天
                                    $startTime = $endTime - $num * 86400;
                                    break;
                                case 'w': // 周(1周=7天)
                                    $startTime = $endTime - $num * 86400 * 7;
                                    break;
                                case 'm': // 月(1月=30天)
                                    $startTime = $endTime - $num * 86400 * 30;
                                    break;
                                case 'q': // 季度(1季度=3个月)
                                    $startTime = $endTime - $num * 86400 * 30 * 3;
                                    break;
                                case 'h': // 半年(1半年=6个月)
                                    $startTime = $endTime - $num * 86400 * 30 * 6;
                                    break;
                                case 'y': // 年(1年=365天)
                                    $startTime = $endTime - $num * 86400 * 365;
                                    break;
                            }
                           
                            // 添加时间范围查询条件
                            if ($startTime > 0) {
                                $condition[] = "a.add_time >= {$startTime}";
                            }
                        }
                    }


保存即可  核心文件已经完成:


调用方式与正常标签一样,如果需要用时间筛选或者就是规定时间内显示的所在时间的文档就在标签参数里面新增:timewode=''  即可:

timewode='' 时间范围内的所有帖子,单位格式:d为天,w为周,m为月,q为季度,h为半年,y为年【数+单位】 。如果不写单位表示实际天数。 

举例说明【写多少时间显示多少天的帖子】:7天

{eyou:list loop='10' id='field2'   timewode='7d'}
    <a href='{$field2.arcurl}'>{$field2.title}</a>
    {/eyou:list}


不写单位的:3天

{eyou:list loop='10' id='field2'   timewode='3' }
    <a href='{$field2.arcurl}'>{$field2.title}</a>
    {/eyou:list}


一个月:

{eyou:list loop='10' id='field2'   timewode='1m' }
    <a href='{$field2.arcurl}'>{$field2.title}</a>
    {/eyou:list}


一年:

{eyou:list loop='10' id='field2'   timewode='1y' }
    <a href='{$field2.arcurl}'>{$field2.title}</a>
    {/eyou:list}



未经允许不得转载! 作者:小编,转载或复制请以超链接形式并注明出处XQ 筑站派

原文地址:《列表页list新增参数timewode作为时间筛选范围帖子数据的分享【技术贴】》发布于:2025-09-26 21:29:44

加载中~