欢迎访问,本站接受互联网网站仿站、功能定制、定制插件、主题,如果需要的话可以联系我 QQ:2283276927

zblog php静态的缓存数据保存成txt等文本来(文章归档按照年份输出源代码放出)实现自由调用减少数据查询次数

雨夜 3533次浏览 5个评论

捕获.PNG


思路:在看别人主题(看鸟儿博客第一次引用这个函数可以存放文本)的文章归档的时候发现这样的代码

$str=file_get_contents($zbp->usersdir . 'cache/tblog5_archive.txt');

这就是调用txt文本静态文件。

这样可以有效减轻数据库的查询次数。下次我们使用的时候直接调用就可以了。

但是这样的txt文件怎么产生喃。步骤如下:


一、挂接接口

Add_Filter_Plugin('Filter_Plugin_Zbp_BuildModule','tblog5_CacheArchive');

二、写函数(这是文章归档的代码

function tblog5_CacheArchive2() {
	global $zbp;
	$i = $zbp->modulesbyfilename['archives']->MaxLi;
	if($i<0)return '';	
//开始
$select=array(array('max','log_PostTime','ccmax'),array('min','log_PostTime','ccmin'));
		$where=array(array('=','log_Type',0),array('=','log_Status',0));
		$sql=$zbp->db->sql->Count($GLOBALS['table']['Post'],$select,$where,null);
		$array=$zbp->db->Query($sql);
		$min=0;
		$max=0;
		if(count($array)>0){
			foreach($array as $u){
				$max=(int)date('Y',GetValueInArray($u,'ccmax'));
				$min=(int)date('Y',GetValueInArray($u,'ccmin'));
			}
		}
		if($min==0 || $max==0){
			return;
		}
		for($i=$min;$i<=$max;$i++){
		$year_as[]=$i;
		
		}
		$s='';
		foreach($year_as as $year_a){
		//判断这年有无文章
		$beginy=mktime(0,0,0,1,1,$year_a);
		$endy=mktime(23,59,59,12,31,$year_a);
		$sql2 = $zbp->db->sql->Count($zbp->table['Post'], array(array('COUNT', '*', 'num')), array(array('=', 'log_Type', '0'), array('=', 'log_Status', '0'), array('BETWEEN', 'log_PostTime', $beginy, $endy)));
		$n = GetValueInArrayByCurrent($zbp->db->Query($sql2), 'num');
		if($n>0){
			  $s .='<h3 class="al_year">'.$year_a.'年('.$n.')</h3>';
			  }
		//判断是否有文章结束
			//月份开始
            for ($i = 1; $i <13; $i++) {
			$dayend=cal_days_in_month(CAL_GREGORIAN,$i,$year_a);
            $begin=mktime(0,0,0,$i,1,$year_a);
		    $end=mktime(23,59,59,$i,$dayend,$year_a);
			$articles1=$zbp->GetArticleList(null,array(array('=','log_Type',0),array('=','log_Status',0),array('>=','log_posttime',$begin),array('<=','log_posttime',$end)),array('log_posttime'=>'desc'),null,null);
			if(count($articles1)>0){
			$s .=  '<ul class="al_mon_list"><li><span class="al_mon" style="cursor: s-resize;">'.$i.' 月<em>( '.count($articles1).' 篇文章 )</em></span>
			<ul class="al_post_list" style="display: block;">';
			foreach($articles1 as $article){
			$s .= '<li>'.$article->Time('d').'日:<a href="'.$article->Url.'">'.$article->Title.'</a><em>(评论'.$article->CommNums.')</em></li>';
			}
			$s .= '</ul></li></ul>';
			}
	        }
			//月份结束
		}  
	file_put_contents($zbp->usersdir . 'cache/endskin_archive.txt', $s);	
//结束	
}

这样就实现了刷新缓存(或者提交文章等)的时候自动更新(新建)txt文本缓存(重新编译模板)了,之后你就可以调用这个txt文本了。。希望对你有用。(代码有点长,,,)


经过sf的指点:这里的接口挂接可以根据用户的需求来挂接不同的接口。
  1. 如果是需要实现每次对应数据的更新,比如用户评论了来触发这个这个更新,就用上面的接口就可以了。

  2. 但是如果你只是把这个数据只有在某一特定时期更新,比如上面的文章归档,只有文章提交成功的时候才更新,则就可以用如下的接口:

Filter_Plugin_PostArticle_Succeed

涂涂研版版权所有,如未注明 , 均为原创,转载需注明出处。
发表我的评论换个身份
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(5) 个小伙伴在吐槽
  1. 很喜欢这个文章归档,但ZBP1.5貌似已经不能正常使用了
    LS 2016-12-05 PM 10:36 回复
  2. haha发现顶部那个QQ图标,划过去就变亮了
    邮箱咋又不行了呢。
    http://ww4.sinaimg.cn/bmiddle/bef47321jw1emu7391bppj20lb0cu757.jpg
    昵称xilouqingzhu 2014-12-01 PM 03:09 回复
    • 俺能把邮箱这两个汉字去掉。。
      oneyyes 2014-12-01 PM 09:53 回复
      • 还有昵称 这两字呀,input框只接受用户输入信息呀,前面昵称、邮箱不是我输入的。。不用加上去。评论框需要改进呀
        昵称xilouqingzhu 2014-12-02 AM 08:24 回复
        • 过几天再弄,时间很忙。。。
          雨夜 2014-12-02 PM 10:09 回复

主题定制开发流程

ZBLOGPHP开发流程

联系我们