emlog添加热门日志(热门文章)缓存

emlog的缓存文件是include/lib下的cache.php文件,由这个文件控制emlog的缓存文件的生成的,这个是emlog的生成缓存类。

生成缓存的好处就是减少查询数据库的次数,给系统减少压力。

比如emlog博客的热门日志和随机日志是不生成缓存的,直接通过查询数据得到的数据。

那么怎么来对热门日志和随机日志进行缓存呢?下面的教程就会说到如何添加热门日志的缓存。


下面开始如何修改,由于是HACK程序,所以修改前先备份数据库和数据,免的出现以外。


修改cache.php文件:

1.在class cache{}中添加private $hotlog_cache;

2.在最新日志下面添加热门日志的缓存代码。

	 /**
	 * 热门日志
	 */
	private function mc_hotlog() {
		$row = $this->db->fetch_array($this->db->query("SELECT option_value FROM " . DB_PREFIX . "options where option_name='index_hotlognum'"));
		$index_hotlognum = $row['option_value'];
		$sql = "SELECT gid,title FROM " . DB_PREFIX . "blog WHERE hide='n' and type='blog' ORDER BY views DESC LIMIT 0, $index_hotlognum";
		$res = $this->db->query($sql);
		$logs = array();
		while ($row = $this->db->fetch_array($res)) {
			$row['gid'] = intval($row['gid']);
			$row['title'] = htmlspecialchars($row['title']);
			$logs[] = $row;
		}
		$cacheData = serialize($logs);
		$this->cacheWrite($cacheData, 'hotlog');
	}

上述代码只是对原来热门日志排行进行的缓存。


修改module.php文件:

3.剩下的就是主题读取热门日志的缓存和更新热门日志的缓存时间。因为热门日志不像评论,最新等等的排行榜(每次只要有新的日志或评论的时间更新缓存就可以了),所以热门日志排行榜(点击数每时每刻多在变化)更新的话除了上述日志(评论)的操作更新缓存外,还应该靠时间来更新缓存。


by 2013-05-05 13:50:09更新:

修复爆出路径的可能。更新缓存生成缓存文件时,由于缓存文件没有生成,读取缓存中unserialize函数和foreach函数多会报错。

cache.php文件修改:(在这个文件的最后几行)

			if ($fp = fopen($cachefile, 'r')) {
				$data = @fread($fp, filesize($cachefile));//添加@
				fclose($fp);
				$this->{$cacheName.'_cache'} = @unserialize(str_replace("<?php exit;//", '', $data));//添加@
				return $this->{$cacheName.'_cache'};


module.php修改如下:
<?php
//widget:热门日志
function widget_hotlog($title){
	global $CACHE; 
	$hotlogfile = EMLOG_ROOT . '/content/cache/hotlog.php';//缓存路径
	$hottime = is_file($hotlogfile)?filectime($hotlogfile):'0';//判断缓存是否存在,存在输出缓存文件的时间,不存在输出0
	if ($hottime <(time()-3600)){$CACHE->updateCache('hotlog');}//判断缓存是否过期,过期更新缓存,这里是1小时。
	$hotLogs_cache = $CACHE->readCache('hotlog');?>
        <h3><span><?php echo $title; ?></span></h3>
        <ul id="hotlog">
        <?php if(is_array($hotLogs_cache) && !empty($hotLogs_cache)){
            foreach($hotLogs_cache as $value): ?>
        <li><a href="<?php echo Url::log($value['gid']); ?>"><?php echo $value['title']; ?></a></li>
        <?php endforeach; }
         else {
         echo '正在更新缓存……<br />请刷新浏览器!';
         }?>
        </ul>
<?php }?>
  • 下载列表

目前有 1 条评论

avatar

最好减肥产品  2013-04-05 09:08 1楼

总算找到解决方法了 回复
昵称
邮箱
主页
提交
订阅