ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
前后台均设置了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参数请使用英文+数字+下划线内的字符,并且最好以插件英文名加下划线开头,以免与其他插件冲突