Typecho是一款非常优秀的轻型博客开源程序,基于PHP+MySQL/SQLite。Typecho采用了与WordPress类似的内容管理组织方式,但与WordPress的目的不同,Typecho主打“轻型”,保留基本功能,大量弱化非核心的功能。虽然这样使得Typecho运行更快、搭建成本更小,但是有一些常用的功能却不太能满足需求,如“文章置顶”、“多级导航栏”、“用户权限管理”等等。因此,我fork Typecho并着手增改新的功能,将此项目命名为Typechoes,让回响更多一些吧!
经过长达两个多月陆陆续续的编写,我的个人项目Typechoes终于实现重要的特性,先发布一个测试版本。在本文中分享一些Coding中的经验~~
# 新特性
此次我修改的Typecho新增了几项功能,
第一,增加了“标签描述”,使得标签和分类一样,可以在主题中调用描述内容(可以是HTML,便于各种拓展)。在数据表中,标签描述也是存在的,所以我这个修改也是顺应下数据库的设计。
第二,增加了“多级导航栏”。众所周知,Typecho是不具备自设导航栏的功能。一般来说导航栏都是Typecho的主题中header.php写好的,显示“首页”、“分类”和“页面”,而且只是一级导航。如果网站内容比较多,分类层次性强,那么仅有一级导航就不合适了。于是我增设了导航栏的功能,可以在后台设置导航栏的内容,包括首页、分类、页面、文章、标签(未实现)、自定义链接,基本满足各种需求。
由于时间限制,经过两个月也仅仅实现了基本的功能,如何在后台中以更优雅的方式设置导航栏还没有实现,目前仅能在TextArea中填写PHP序列化后的数组来实现。
# 一些关键技术
由于Typecho官方文档并不详细,而且很多功能没有太多人去尝试使用,因此功能增改的过程中并不顺利。在此分享一些关键性的代码与技术,更多的内容可以围观我Github上的commits。
## 文章摘要的显示方式修改
Typecho中,摘要是对文章内容的预览。个人认为大多数的预览都忽略了换行符,因此在看摘要时遇到换行的内容衔接到上句话,容易产生歧义。因此,我用“↵”(换行图形符)表示换行。
这需要修改var/Widget/Abstract/Contents.php的内容。将块标记,如
、的闭合标签前增加换行图形符,即可。
## 增加标签描述
增加标签描述,需要修改var/Widget/Metas/Tag/Edit.php的内容。新建一个Typecho的Form Class,并填写到对应的变量名。在submit方法中将描述的变量添加进去。
## 没有方便的方法?自己创建!
在制作导航栏时,需要根据提供的slug返回对应的category的title、permalink。而Typecho提供的方法中仅有通过mid返回相关值。为了方便可以自己创建一个方法。修改var/Widget/Metas/Category/List.php文件,自己创建一个名为getCategoryBySlug的方法,通过与存储category信息的$_map循环对比,输出最后的结果。
## 使用Typecho提供的缺省值配置方法
在制作导航栏时,考虑到各种主题对导航栏类的命名不同,甚至是标签的不同,需要提供一个Array可供修改、传入,输出相应的满足主题的HTML。Typecho提供了缺省值的配置方法,按照规定改写即可。修改过程在Github中repo的
master:dfbb9b012bd6fa17e4c4fba6a3ed219f65e9f063
master:0dc4fc40544a2d49d8f1b11f92b9dce651154ba9
需要修改的文件是var/Widget/Archive.php
如图所示,调用Typecho_Config::factory,将Array转换为$this的一个属性。图中Array的内容可以通过引入的参数得到修改。
在调用该数据时都转化为属性,也就是说,以前调用$wrapOpt['itemTag'],如今直接写为$this->_wrapOpt->itemTag。下图是采用了Typecho的配置方法后对部分变量的修改。
# 后续计划
Typecho与WordPress类似,都是采用文章(post)、分类(category)、页面(page)组织内容。与WordPress不同,Typecho的表更加简单,一些功能相当弱化。比如文章中插入图片一般是以附件(attachment)的形式上传,数据库中与当前文件的cid相互link,再用Markdown语法直接引用图片路径。在最新的官方开发板已经支持了剪贴板粘贴上传图片的功能。
不过个人不太满意的是如果一篇文章中零零散散的图片太多,那么这样的上传会对文件(附件)的组织带来一定的麻烦,所以打算在下一个版本中配置开关纳入文件系统的功能。一旦关闭,上传的图片只会传到/usr/uploads中,但不会出现在文件管理系统中。
# 技术交流
Github链接:https://github.com/zhangpeng96/typechoes
欢迎各位有问题与疑问的小伙伴提交issue或是在文章下面留言
领取专属 10元无门槛券
私享最新 技术干货