前后台均设置了Hook,插件可使用这些预置的Hook实现功能
使用Hook只需要编写相应名称的方法即可
注意:部分Hook重复注册是会冲突的,请提醒用户不要使用相同功能的多个插件。
若有描述不清楚的地方,请联系作者进行修改。
# 前台Hook
## avatar
作用:替换默认的gravatar头像服务
参数:昵称和邮箱($name,$email),默认头像($default)
返回值:无
操作:echo 或 print_r 将头像链接输出
例子:(系统默认输出)
```
$md5 = md5($email);
$url = "https://secure.gravatar.com/avatar/$md5?s=$size&r=$rating&d=$default";
echo '<img class="avatar" src="' . $url . '" alt="' .
$name . '" width="' . $size . '" height="' . $size . '" />';
```
当然也可以用于缓存头像等骚操作。若自己实现头像,也可以利用$default这个参数。
## header
作用:在网页头部(一般为\<head\>标签内尾部)插入一些内容,例如\<link\>等标签
操作:echo或print_r编辑器HTML代码
## footer
作用:在网页尾部(一般为\</body\>之前)插入一些内容,例如\<script\>等标签
操作:echo或print_r编辑器HTML代码
## list_comments
参数:$options(评论参数),$comments(Comments对象)
作用:自定义(评论)回复的HTML标签
操作:列出(显示)评论
示例:(系统默认)
```
if ($comments->have()) {
echo $comments->options['before'];
while ($comments->next()) {
$comments->children = $this->getChildrenByParentId($this->row['id']);
$this->threadedCommentsCallback();
}
echo $comments>options['after'];
}
```
额外说明:由于threadedCommentsCallback方法属于$comments私有函数,无法调用,所以请自行实现这个函数,有一个注意的点就是主题通常会定义threadedComments函数,请注意兼容。另外,getChildrenByParentId方法是公开的,但是仍然可以自己实现,只是没有必要罢了。所以要实现这个hook还是很麻烦的,建议别搞了,这里只是留一个选择而已。(而且好像也没有太大意义)
## reply
参数:$word(显示的文字,比如回复,由主题决定),$comments(Comments对象)
作用:自定义(评论)回复的HTML标签
操作:echo或print_r编辑器HTML代码
示例:(系统默认)
~~~
echo '<a href="#'. $comments->theId .'" rel="nofollow" onclick="return TarBlogComment.reply(\'' .
$comments->theId . '\', ' . $comments->id . ');">' . $word . '</a>';
~~~
## cancel_reply
参数:$word(显示的文字,比如取消回复,由主题决定),$comments (Comments对象)
作用:自定义(评论)取消回复的HTML标签
操作:echo或print_r编辑器HTML代码
示例:(系统默认)
~~~
echo '<a id="cancel-comment-reply-link" href="#" rel="nofollow" style="display: none;"
onclick="return TarBlogComment.cancelReply();">' . $word . '</a>';
~~~
## article_content
参数:文章对象(Post/Page)
作用:对文章内容进行一些替换
返回值:无(因为对象都是引用变量,参数指向全都是同一个对象)
说明:该hook可反复调用,但是不保证顺序,因此同类插件请尽量不要同时启用;该hook将会同时作用于Post和Page,若有不同处理条件可以判断type。请不要在此hook修改其他的一些属性,这个修改是不会保存到数据库的,反而可能会使显示不正常。
# 后台Hook
## new_editor
作用:替换编辑器
参数:文章内容(编辑文章时用)
返回值:无
操作:echo或print_r编辑器HTML代码
例子:`echo '<textarea name="content"></textarea>';`
默认的编辑器使用TinyMCE。请注意,我们并不推荐更换为其他编辑器,更换为其他编辑器可能会出现问题,除非您找到了比目前方案更好的方案。若您之前已经拥有使用HTML的文档,强烈不建议更换为Markdown编辑器,除非您使用配套的主题/模板。与一些轻量级博客不同,我们默认使用HTML。
该Hook并不能修改TinyMCE,只能替换编辑器。若使用该Hook,请配套new_editor_js和new_editor_css使用(如果有必要的话)。
## new_editor_js
作用:替换编辑器js
返回值:编辑器js代码
## new_editor_css
作用:替换编辑器css
操作:echo或print_r编辑器style样式或css文件引
例子:`echo '<link rel="stylesheet" href="'.asset('css/style.css').'">';`
返回值:无
## upload
(未验证)
作用:替换上传接口
参数:无
说明:替换上传接口,指的是在js客户端中替换上传函数,也就是覆盖upload.process函数,这样博客就会使用这个接口进行文件上传。通常,这样的操作是为了直接传输到OSS等第三方储存服务中,避免消耗网站所在服务器资源(通过服务器中转文件浪费带宽和流量,没有必要)。
替换操作为输出(回显/echo)一段HTML代码,一般是以script标签包裹的的JS代码,可根据实际情况增加隐藏辅助元素,但不可破坏原有功能和样式。应将上传处理函数命名为processUpload,其他名称不会生效。函数的具体实现可以参考admin/assets/js/article.js。item的生成在下面的操作。
即便如此,还是要将上传的数据发送给网站服务器,请上传完成后调用upload.transfer,并且第一个参数为null,第二个参数为以下键值对,这样才正常生成列表,具体传输参数:
```
{
filename: '', // 文件名
path: '', // 相对路径
mime: '', // 完整的mime
size: 0, // 文件大小,字节为单位
}
```
目前还没有官方示例,感兴趣的可以自己研究。
## attachment_save
作用:修改附件的保存方式
参数:上传的文件信息(File对象)
返回值:无,请不要尝试替换原有File对象
## attachment_url
作用:调用数据库中的附件时,显示插件指定的附件URL
参数:文件路径(字符串)
返回值:附件的url完整路径(包括域名部分)
说明:只会获取第一个插件的返回值,请不要重复执行
## delete_attachment
作用:删除附件
参数:文件信息(储存在contents表中content字段,数组)
返回值:字符串(ok或者错误信息)
说明:只会获取第一个插件的返回值,请不要重复执行·
## generate_slug_attachment
作用:替换系统生成别名(slug)的规则(for 附件)
参数:$name(附件名)
返回值:slug的值
说明:只会获取第一个插件的返回值,请不要重复执行
## generate_slug_category
作用:替换系统生成别名(slug)的规则(for 分类)
参数:$category(分类模型)
返回值:slug的值
说明:只会获取第一个插件的返回值,请不要重复执行
## generate_slug_article
作用:替换系统生成别名(slug)的规则(for 文章&页面)
参数:$post(文章&页面模型)
返回值:slug的值
说明:只会获取第一个插件的返回值,请不要重复执行
## generate_slug_tag
作用:替换系统生成别名(slug)的规则(for 标签)
参数:$tag(标签模型)
返回值:slug的值
说明:只会获取第一个插件的返回值,请不要重复执行
## setting(未完成)
作用:插件设置
返回值:暂无
建议:p参数请使用英文+数字+下划线内的字符,并且最好以插件英文名加下划线开头,以免与其他插件冲突
## $plugin_setting
作用:在插件页面的对应插件一栏(操作那一列)
说明:$plugin请替换成package名称,否则不生效
返回值:page(与setting里的p一致)
## tool
作用:插件工具
返回值:数组,格式如下
~~~
[
'p' => 'test', // 即page,作为tool.php的query参数p被识别后,会导向指定页面
'name' => '从Wordpress导入', // 页面副标题
'php' => 'test/import.php', // 指向页面的内容,会被include
'type' => 'import', // 类型,一般为import和export
'show' => true, // 是否显示在列表中
'menu' => false // 是否显示在菜单中
]
~~~
建议:p参数请使用英文+数字+下划线内的字符,并且最好以插件英文名加下划线开头,以免与其他插件冲突