杂货铺

杂货铺中囤杂货

👉 所有文章
技术 理解 HTML 中的 pre 标签 使用 prismjs 代码高亮库 理解 sitemap.xml 解决 Intellij IDEA 右下角不显示 git 分支的问题 并发与并行的区别 ASCII码对照表 理解字符编码、Unicode、UTF-8、UTF-16 认证与鉴权的区别
工具 DBeaver: 跨平台的数据库管理工具 Snipaste: 一个非常好用的截图、贴图工具 常见的网页版流程图、UML建模工具 实用 Chrome 谷歌浏览器插件 低多边形图片生成工具 一些好用的 Markdown 编辑器 Windows 下好用的软件 使用 Genymotion 模拟 Android 环境 实用工具整理 实用网站整理 calibre - 电子书管理软件
其他 试用Atom编辑器 解决谷歌索引404网页的问题 解决论文编译后没有参考文献 思维导图,认清自己,制定目标 想法若干——关于地图 man2:一个快速查找命令使用示例的工具 浅入浅出CouchDB:CouchDB安装 浅入浅出CouchDB:使用curl管理CouchDB 如何修改自己在github中的项目 对c++指向数组指针的一些理解 升级wordpress出现错误:Request exceeded the limit of 10 internal redirects The spirit of softwares 方法链 一些不错的网站 苹果的swift 如何现代化院系的网站 事前、事中、事后 关于选择的一些思考 重要紧急矩阵 二八定律 真相 如何在电脑上使用微信读书 ? 如何关闭微信读书的「看一看」? 从零开始Docker化Ghost博客系统 ghost博客添加多说评论 以生产模式运行Ghost博客系统 Ghost博客主题制作简明教程 将Ghost打造成一个本地APP 重置Ghost博客中的用户密码 在Ubuntu中安装Ghost博客系统 为Ghost博客添加标签云
已迁移 【已迁移】故事: 2020 【已迁移】故事: 2019-nCoV 肺炎

为Ghost博客添加标签云


2014-10-08

当前,Ghost博客并不支持标签云功能。

这是几个解决方案:

在模板中遍历


在某个模板中遍历每一个博客,對每一篇博客遍历其tag,然后将这些tag输出到网页。

这种方法有两个问题:
1、输出的标签会有重复。
2、性能问题。

手动


手动在模板中某处添加某些常用的标签。

单独一个网站来显示所有标签


假如数据库使用的sqlite,其存放在ghost下的/content/data/目录中,假如使用生产环境,数据库名为ghost.dbghost.db中,表tags存放了所有的标签信息,表posts_tags存储了文章与标签的对应关系。在表tags中,name字段是标签名称,slug字段用来构造url。

据此,可以再写一个小网站,只显示tag信息,甚至将这个网站以iframe的形式嵌入到ghost的一个页面中。

生成tag信息,放入ghost的一个页面中


只显示标签的基本信息:

select name, slug from tags;

同时获取tag对应的文章数量:

select tags.id,  count(tags.id), tags.name, tags.slug
from tags inner join posts_tags 
on tags.id=posts_tags.tag_id
group by tags.id;

下面是一段生成标签云的代码:

# !/usr/bin/python
# -*- encoding:utf-8 -*-
'''
Created on Oct 8, 2014
@author: letian
'''

import jinja2
import sqlite3
import sys
reload(sys)
sys.setdefaultencoding('utf8') 

DB = './ghost.db'

template_str = '''
{% for tag in tags %}
<a href="{{ tag.url }}" style="margin:6px 6px;">{{ tag.name }}</a>
{% endfor %}
'''
template = jinja2.Template(template_str)

conn = sqlite3.connect(DB)
cursor = conn.cursor()
tags = []
for row in cursor.execute("select name, slug from tags "):
    tags.append({'name': row[0], 'url':'/tag/'+row[1]})

print template.render(tags=tags)

将输出结果复制到某个页面即可。

生成字体大小有变化的标签云


(2015-05-09 添加)

# !/usr/bin/python
# -*- encoding:utf-8 -*-

import jinja2  
import sqlite3
import sys
import random

reload(sys)
sys.setdefaultencoding('utf8') 


DB = './ghost.db'

template_str = '''  
{% for tag in tags %} <a href="{{ tag.url }}" style="margin:30px 10px; font-size: {{ tag.font_size }}">{{ tag.name }}</a>  {% endfor %}
'''  
template = jinja2.Template(template_str)

conn = sqlite3.connect(DB)  
cursor = conn.cursor()  
tags = []
tags_dic = []

sql = '''select tags.name as name, tags.slug as slug, count(*) as num  
         from tags, posts_tags 
         where tags.id = posts_tags.tag_id 
         group by tags.id; '''
for row in cursor.execute(sql):  
    tags.append(( row[0],  '/tag/'+row[1], row[2] ))  # name, url, num

tags = sorted(tags, key=lambda item: item[2])

font_size = 12
count = 0

for tag in tags:
    count += 1
    if count % 5 == 0: # 5个一组,字体大小下一组比上一组大2
        font_size += 2
    tags_dic.append( {'name': tag[0], 'url': tag[1], 'font_size': str(font_size) + 'px' } ) 

random.shuffle(tags_dic)  # 洗个牌 
print template.render(tags=tags_dic)

也是将输出结果复制到某个页面即可。


( 本文完 )

文章目录