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

201412176234_8053.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 .='

'.$year_a.'年('.$n.')

';

}

//判断是否有文章结束

//月份开始

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 .=  '

  • '.$i.' 月( '.count($articles1).' 篇文章 )
    • ';

    foreach($articles1 as $article){

    $s .= '

  • '.$article->Time('d').'日:Url.'">'.$article->Title.'(评论'.$article->CommNums.')';

}

$s .= '

';

}

}

//月份结束

}

file_put_contents($zbp->usersdir . 'cache/endskin_archive.txt', $s);

//结束

}

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值