当前位置:首页 > 代码学习 > 本站emlog时间轴归档页面代码

本站emlog时间轴归档页面代码

作者:星之宇 ┊ 时间:2014-11-3 9:25 ┊ 分类: 代码学习 ┊ 阅读:5368 ┊ 评论:3

文件缓存型时间轴归档,后台更新缓存或者发布新文章的时候会自动更新。

本站这个代码是使用缓存系统的,是需要修改内核文件的。慎用!


1、修改cache.php文件,添加归档缓存函数(路径include/lib)

private $logalias_cache;
之后添加
private $loglists_cache;
添加在其他缓存函数位置添加归档缓存
	/**
	 * 文章归档列表缓存
	 */
	private function mc_loglists() {
                $timezone = Option::get('timezone');
		$query = $this->db->query('select gid,title,date from ' . DB_PREFIX . "blog WHERE hide='n' and checked='y' and type='blog' ORDER BY date DESC");
		$loglists_cache = array();
		while ($row = $this->db->fetch_array($query)) {
                        $row['date'] = $row['date'] + $timezone * 3600;
			$loglists_cache[]= $row;
		}
		$cacheData = serialize($loglists_cache);
		$this->cacheWrite($cacheData, 'loglists');
	}

2、时间轴CSS,对IE系列支持并不完美:

.archives h2{font-size:150%;}
.archives li a{padding:8px 0;display:block}
.archives li a:hover .atitle:after{background:#ff5c43}
.archives li a span{display: inline-block;width:100px;font-size:12px;text-indent:20px}
.archives li a .atitle{display: inline-block;padding:0 15px;position:relative;width:550px;white-space:nowrap;text-overflow:ellipsis;}
.archives li a .atitle:after{position:absolute;left:-2px;background:#ccc;height:8px;width:8px;border-radius:6px;top:8px;content:""}
.archives li a .atitle:before{position:absolute;left:-8px;background:#fff;height:12px;width:12px;border-radius:6px;top:6px;content:""}
.archives{margin:10px;position:relative;padding:10px 0}
.archives:before{height:100%;width:4px;background:#eee;position:absolute;left:100px;content:"";top:0}
.m-title{position:relative;margin:10px 0;cursor:pointer}    
.m-title:hover:after{background:#ff5c43}
.m-title:before{position:absolute;left:93px;background:#fff;height:18px;width:18px;border-radius:6px;top:3px;content:""}
.m-title:after{position:absolute;left:96px;background:#ccc;height:12px;width:12px;border-radius:6px;top:6px;content:""}

3、新建独立Page页面部分代码(由于模版不同,这里只能贴出部分代码):

		 <div class="archives">

		<?php

			global $CACHE; 

			$loglists_cache = $CACHE->readCache('loglists');

			$year_month = 0;

			foreach($loglists_cache as $value):

			if($year_month != 0&&$year_month != date("Y-m",$value['date'])){

				echo '</ul>';

			}

			if($year_month != date("Y-m",$value['date'])){

				$year_month = date("Y-m",$value['date']);

				echo '<h2 class="m-title">'.$year_month.'</h3><ul>';

			}

		?>

			<li><a href="<?php echo Url::log($value['gid']);?>" target="_blank" title="<?php echo $value['title']; ?>"><span><?php echo date("Y-m-d",$value['date']);?></span><div class="atitle"><?php echo $value['title'];?></div></a></li>

			<?php

			endforeach;

		?></div>


因为几个人在跟我要这个归档代码,所以也发布一个直接更改模版的方法,因为独立页面有自定义页面的功能,使用该功能就可以使用指定的页面模版。

1、新建独立page页面,填入独立页面代码。(以下只是部分代码)

		 <div class="archives">

		<?php

			$db = Database::getInstance();
			$query = $db->query('select gid,title,date from ' . DB_PREFIX . "blog WHERE hide='n' and checked='y' and type='blog' ORDER BY date DESC");
			$loglists_cache = array();
			while ($row = $this->db->fetch_array($query)) {
				$loglists_cache[]= $row;
			}


			$year_month = 0;

			foreach($loglists_cache as $value):

			if($year_month != 0&&$year_month != date("Y-m",$value['date'])){

				echo '</ul>';

			}

			if($year_month != date("Y-m",$value['date'])){

				$year_month = date("Y-m",$value['date']);

				echo '<h2 class="m-title">'.$year_month.'</h3><ul>';

			}

		?>

			<li><a href="<?php echo Url::log($value['gid']);?>" target="_blank" title="<?php echo $value['title']; ?>"><span><?php echo date("Y-m-d",$value['date']);?></span><div class="atitle"><?php echo $value['title'];?></div></a></li>

			<?php

			endforeach;

		?></div>

2、CSS同上一样保存不变

UPDATE:

2014-11-22 修复时区造成时间不准确问题,同步后台设置。 

目前有 3 条评论
avatar
天兴工作室 2015-07-18 10:32回复3楼
就喜欢看这种造轮子的...
avatar
简易淋浴房 2014-11-06 17:48回复2楼
很复杂的说。。。
avatar
香港服务器 2014-11-04 14:22回复1楼
博主基本上都分享的技术方面的文章,想必是个牛逼人物吧。
独立ip主机终身3.8折。。。。。。。