typecho自定义字段的那些坑儿

## 前言 ##
前面的文章《[请输入链接描述][1]》和《[请输入链接描述][2]》基本围绕着怎么扩展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的聚合链接,如下:
作者:fields->author+”” “>$this->fields->author()
4>点击作者的名字将会跳转到聚合标签页面,目标页面将会展示”天使漫步”这个作者的所有文章。

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

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

**2. 使用插件插入标签的注意项**
其实在《[请输入链接描述][3]》文末已经提到,奈何当初在改动插件的时候没有第一时间注意到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粉丝)

[1]: https://www.typechodev.com/index.php/archives/736/
[2]: https://www.typechodev.com/index.php/archives/741/
[3]: https://www.typechodev.com/index.php/archives/736/

原创文章,作者:admin,如若转载,请注明出处:https://www.typechodev.com/theme/742.html

(0)
上一篇 2016-10-31 上午11:43
下一篇 2016-11-30 上午3:20

相关推荐

发表评论

您的电子邮箱地址不会被公开。