接上回,这次记下关于内容类型的插件的开发
插件名:TeQing
功能:提供多种类型内容的发布(文字、图片、音乐、视频等);类似于轻博客
字段:table.contents.postFormat(内容类型)、table.contents.extend(类型附加数据)
文字类型:
postFormat=text,extend={thumb=thumb}
内容不需要做特殊处理,附加字段中可以存储内容缩略图
图片类型:
postFormat=image,extend={thumb=thumb,image={img1,img2,img3}};
附加字段中存储图片数组,原text为图库的介绍
音乐类型:
postFormat=music,extend={thumb=thumb,music={{src=163,id=123},{src=xiami,id=234}}}
原text为音乐的介绍,附加字段中,music数组存储音乐数据:src表示音乐来源,id为源站音乐id
视频类型:
postFormat=video,extend={thumb=thumb,video={src=http://v.youku.com/xxxxxxx,h5=http://xxx,swf=http://xxx}}
原text为视频的简介,video数组存储视频信息:src为视频来源地址;h5为视频html5播放地址(可为空);swf为视频flash地址
想好了数据处理的方式,就需要用代码来实现了,本来考虑的是直接在后台的编辑器上添加这些功能,可是在实际的操作过程中发现这样做难免需要改动Typecho源码,只得考虑其他的方式了
Helper::addRoute('publish', '/publish/','TeQing_Widget','publish');
class TeQing_Widget extends Widget_Abstract_Contents{
public function publish(){
$this->render('publish.php');
}
//省略掉相关代码
}
增加一个内容发布的路由,实现在前端发布内容;页面效果:
内容编辑器采用的是kindeditor
,文件上传使用的是与后台一样的pluplaod
内容发布时直接提交到与后台相同的地址,使用系统提供的接口来处理新增的数据
Typecho_Plugin::factory('Widget_Contents_Post_Edit')->write = array('TeQing_Plugin', 'write');
//检查对应内容类型的数据是否完整
Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishPublish = array('TeQing_Plugin', 'finishPublish');
//内容发布后按照内容类型处理并保存新增数据
进行到这一步,需要的内容已经保存到数据库了,下一步就是考虑该怎么展现这些内容了:
Typecho_Plugin::factory('Widget_Abstract_Contents')->filter = array('TeQing_Plugin', 'filter');
//前端展示时,先进行数据处理,方便前台模版使用对应的数据
根据内容类型,使用不同的模版展示相应的数据,基本上就完成了
编码过程中碰到很多问题不知道该怎么办,弄了半天才发现原来答案就在那里,只能感叹官方的文档真的是太让人纠结了。
关于音乐和视频两种内容类型的处理:基本上没有官方的API。‘偷来’的各种API,不知道什么时候就失效了……
未完待续……
评论已关闭