typecho自定义字段的那些坑儿

## 前言 ##
前面的文章《请输入链接描述》和《请输入链接描述》基本围绕着怎么扩展typecho的能力展开的,特别针对插入文章的时需要注意的要点和事项。这一节文章中谈论第三个问题,即typecho自定义字段的那些坑儿。

博主在刚接触typecho的时候,不了解typecho的设计理念,急匆匆去网上搜索了关于怎么扩展typecho字段的文章,即想通过自定义typecho的contents表字段来增强typecho的能力。后来设计到改了源码,也就是contents增删改查这一块。改完之后,当然很好用,但是后来想升级扩展的时候,却不能利用typecho现有的功能进行扩展了,原因之一就是当时没有插入一些关联属性,比如:category,tags和自定义的fields。

1. 拒绝在文章表添加新字段
虽然网上有很健全的案例和代码,但源码的改动点涉及了多处,而且改动了以后,虽然也可以照样使用,但是如果你想利用typecho的一些中间表来关联来发挥聚合能力(聚合能力是丰富网站结构的前提),缺需要改动更多的源码。这导致不熟悉编程的人想扩展更多功能的时候将束手无策。
笔者认为,应该充分利用typecho本身提供的自定义字段的能力,即fields字段引用即可。

一个简单的案例,当插入文章的时候新增一个作者的字段,同时利用tag的聚合能力,把该作者的所有文章列举出来,这个场景应该很普遍。步骤如下:

1>在fields中新增一个变量,比如author,即:$this->fields->author='天使漫步';
2>在tags标签中加入tags=tags+','+'天使漫步';
3>在前端中取出自定义字段展示,在a标签中的链接换为tag的聚合链接,如下:
    作者:<a href="\"tag//tag/"+$this->fields->author+"\" ">$this->fields->author()</a>
4>点击作者的名字将会跳转到聚合标签页面,目标页面将会展示"天使漫步"这个作者的所有文章。

上面的设计唯一的改动点就是前端模板,而这个改动点的代价几乎为零而忽略不计,只要熟识一些html知识和typecho的规则即可。

以上设计,避免了在数据库添加新的字段,而且也能够充分利用typecho的聚合能力,从而避免为了聚合文章导致改动更多的源码,一般的小白即可胜任。

2. 使用插件插入标签的注意项
其实在《请输入链接描述》文末已经提到,奈何当初在改动插件的时候没有第一时间注意到category和tags插入的时候有区别,后来分析了日志和源码才知道。正确的插入姿势如下:

$tags= "tag1,tags2,tags3";//以逗号隔开的字符串
$request->setParams(
    array(
          ...
          'tags'=>$tags,//这里的$tags是一个以英文逗号分开的字符串。
         )
    )

即插入category的时候,是往typecho中的meta表插入得到一个id,然后把赋值到中间表中。而tag则是直接插入,但看了源码就能明白,其实底层也是往meta表中插入值,再赋值到中间表中关联起来。

3. 利用现有的组件扩展能力,而不是重新二次开发
林林总总说了很多要点,这里总结下:

以上的很多代码都是运用了typecho自身封装好的api来进行二次开发,除了插件技术,还有插件里面的插入代码,到利用标签的聚合能力,都是在typecho的基础上进行扩展,即无缝扩展。期间并没有改动一句typecho的源码,由此可见,在往typecho插入数据的时候,巧妙的利用tag标签和category以及原生的自定义字段就可以到达要求。

以上三篇文章,就是近期使用typecho的一些经验和设计方式,希望可以给喜欢typecho的人带来帮助。

--------------------------天使漫步(一个typecho粉丝)


版权声明:未经书面授权禁止转载、摘编、复制或建立镜像。对既成事实本站将保留所有的权利。