Typecho 彩色标签云

Typecho提供了一个标签云示例,但真心太难看啦,网络上搜索了一圈,差不多都是引用的那几行代码。让我们 DIY 一个,只需会一点儿 PHPcss 就能做得很漂亮,实现自动调节大小的彩色标签。效果嘛,见本站边栏喽。

载入标签对象

Typecho给我们留一个很好用的接口:

<?php $this->widget('Widget_Metas_Tag_Cloud', 'sort=name&ignoreZeroCount=1&desc=0&limit=30')->to($tags); ?>

参数说明

  • sort:排序方式,可以选 mid,name,count;

  • ignoreZeroCount:是否忽略文章数为 0 的;

  • desc:是否降序输出;

  • limit:输出数目。

这其实是构造了一个标签对象链表。之后我们就可以开心地使用tags对象了,通过next()方法,可以遍历所有标签。具体参见后面的完整代码。

随机颜色

通过设置标签链接的style来改变颜色1

color:#<?php echo substr(md5(rand()), 0, 6); ?>;"

固定颜色

如果你希望每次打开博客,标签云的颜色是固定的,试试

color:#<?php echo substr(md5($tags->name), 0, 6); ?>;"

对标签名做哈希来生成颜色,这样同一标签的颜色就是给定的了。如果你觉得生成的颜色不好看,试试改成md5($tags->name.'abc'),这里abc可以是任意字符。

字体大小

想根据文章数量调整标签文字大小,让内容多的标签显示得更大?没问题。

font-size:<?php echo log($tags->count)*50+100; ?>%;

或者这样更好,把字体大小输出为整数:

font-size:<?php printf("%u%%", log($tags->count)*50+100); ?>

如果某标签下条目数特别多,50应该改成一个较小的数。你可以先试试 $100/\log(N)$ 是否合适,再稍做调整。

完整代码

<style>.widget-list-tag li{display:inline-block;list-style:none;font-family:monospace;margin:1px;padding:1px;}</style>
<?php $this->widget('Widget_Metas_Tag_Cloud', 'sort=name&ignoreZeroCount=1&desc=0&limit=30')->to($tags); ?>
<ul class="widget-list widget-list-tag">
<?php if($tags->have()): ?>
    <?php while ($tags->next()): ?>
    <li><a style="font-size:<?php printf("%u%%", log($tags->count)*50+100); ?>; color:#<?php echo substr(md5($tags->name.'rand'), 0, 6); ?>;" href="<?php $tags->permalink(); ?>" title="<?php $tags->count(); ?> 个话题"><?php $tags->name(); ?></a></li>
    <?php endwhile; ?>
<?php else: ?>
    <li><?php _e('没有任何标签'); ?></li>
<?php endif; ?>
</ul>

  1. 这里巧用哈希,出处见 http://stackoverflow.com/a/11878014/2144720

标签: typecho

赞 (12)

仅有一条评论

  1. [...]参考链接如下所示:http://luly.lamost.org/blog/typecho_tag_cloud.html[...]

添加新评论