到目前为止 emlog的标签数量控制问题程序本身并没得得到解决,尽管很多模板已经解决了这个问题,但官方不大重视这个问题。那么如何控制emlog的标签数量问题呢?解决方法有两种哦,通过修改代码哦
一、修改模版法
打开你模版下的module.php,对应修改下。
//widget:标签
function widget_tag($title){
global $CACHE;
$tag_cache = $CACHE->readCache(‘tags’);
shuffle($tag_cache);
//先随机打乱顺序
$tag_cache = array_slice($tag_cache,0,15);?>
//15就是输出15个
<div class=”side_item tagcloud”>
<span class=”header”><h1 class=”title”>
<?php echo $title; ?></h1></span>
<div class=”taglist”>
<?php foreach($tag_cache as $value): ?>
<a href=”<?php echo Url::tag($value[‘tagurl’]); ?>” title=”<?php echo $value[‘usenum’]; ?> 篇日志”>
<?php echo $value[‘tagname’]; ?></a>
<?php endforeach; ?>
</div>
</div>
<?php }?>
二、程序本身修改法
emlog使用缓存的方法,事先将全部标签存放在\content\cache\tags缓存文件中,读取的时候使用模板中的$tag_cache = $CACHE->readCache(‘newtags’)读取。
1.找到\include\lib\cache.php并打开
2.找到private function mc_tags()函数
你会发现他的sql语句是将你设置的所有标签全部查询出来,如果你的标签设置很多时候,打开一次就查询一次,显然不好。所以为将他改为每次随机查询30个标签出来,让他放到缓存文件中。
3.将$query = $this->db->query(“SELECT gid FROM ” . DB_PREFIX . “tag”);改为$query = $this->db->query(“SELECT gid FROM ” . DB_PREFIX . “tag ORDER BY RAND() LIMIT 30”);
4.将$query = $this->db->query(“SELECT tagname,gid FROM ” . DB_PREFIX . “tag”);改为$query = $this->db->query(“SELECT tagname,gid FROM ” . DB_PREFIX . “tag ORDER BY RAND() LIMIT 30”);
这样每次显示出来的标签都是随机抽出来的30个,当然这个数字你可以自己改,你想显示多少就改成多少,而且你可以通过更改查询条件来指定你要显示的标签,比如你如果想显示的30个标签不是随机的,而是你最新的30个,只需要将后面查询条件改为:
DESC LIMIT 0,30这样就行了。
3.最后到你的emlog后台更新下 数据缓存 即可