往typecho插入文章之自定义字段用法及扩展
- 前言
上一篇文章typecho二次开发之使用python爬取数据并入库typecho的心得已经解决了关于怎么往typecho插入附属数据的问题,但是留了一个问题,即怎么插入自定义字段的问题。继而解决第二个问题,即:typecho的数据格式无法满足自身网站的要求怎么办?
当你post一批数据过来的时候,未必就对应于typecho的数据库设计,更多的情况可能比它自身提供的字段要多得多,这个时候就需要引入自定义字段,好在typecho的设计里面是提供的,那么代码中如何体现呢?其实熟悉的朋友很熟悉,直接上代码:
$request->setParams(
array(
'title'=>$title,
'text'=>$content),
'fieldNames'=>array('name1',"name2","name3"),//typecho自定义字段名称
'fieldTypes'=>array('str',"str","str"),//自定义字段变量类型,一般写str即可
'fieldValues'=>array($name1,$name2,$name3),//具体的赋值,和上面顺序一一对应
'cid'=>'',
'do'=>'publish',
'markdown'=>'0',
'date'=>empty($date)?"":$date,
'category'=>empty($mid)?"":array($mid),
'tags'=>join(",", array_unique($tags_ids)),
//'visibility'=>'hidden',
'visibility'=>'publish',
'password'=>'',
'allowComment'=>'1',
'allowPing'=>'1',
'allowFeed'=>'1',
'trackback'=>'',
)
);
上面注释的三个地方就是自定义字段的入库方式,和后台编辑界面的键值对一一对应。这么填以后,前端取出的语法是:$this->fields->name1();这里的name1就是存入的变量名,只要当前是上下文环境是文章类型,那么通过$this句柄获取,或者别的文章类型的句柄。
通过以上方式,理论上无论多少个字段都可以插入,形成丰富的自定义字段,从而扩展typecho的定制能力。
- 扩展
上面的解决方案似乎已经满足了大部分的需求,但是如果自定义的字段过多势必难以管理,或者有的内容需要统一入库到typecho_contents 这个表里面,而且显然通过增加表的字段不符合typecho无缝扩展的设计理念。
那么有没有一种折中的办法呢?笔者想到的一种办法可能是其中一种不错的办法,即往typecho中的text字段存入json数据,json中包含各种各样的丰富字段。前端可以通过$this->text的办法获取全文数据,然后反序列化得到自己想要的字段然后呈现到页面上。
代码如下:
<?php
$str =($this->text);
$this->array_temp = json_decode($str,true);
echo $this->array_temp['node'];
?>
node既然入库时的节点,其实在php语言中,反序列化后得到的是一个树结构的数据类型(不过又有map特点),所以可以直接用node字段名来访问。
json是一种很轻量级的数据格式,所以不会对存储造成多大的影响。json格式的数据负责存储大量复杂的数据,结合fields方式来存储一些常用标识类型,从而达到了typecho自定义的最大化。也大大满足了各种数据类型的需求,扩展typecho的数据格式毫无压力,增大了存储元素的想象空间。
比如:存储一棵树结构的数据,还有诸如此类的非线性的数据结构都能够得到解决。
不过毕竟不是typecho原生支持的,使用起来需要技巧来避免一些坑,这些技巧将在下一篇文章中给出。
--------------------------天使漫步(一个typecho粉丝)
版权声明:未经书面授权禁止转载、摘编、复制或建立镜像。对既成事实本站将保留所有的权利。
评论已关闭