# 对wecenter插件功能的一些建议
为什么会有这些建议呢?因为wecenter的插件机制,导致无法很方便的开发或使用插件,需要增加功能或者或者修改页面的时候,需要直接在官方文件上编辑修改,必然导致了后期升级的麻烦。
那么需要怎么改才更合适呢?下面将一一道来。
## 制作和定义钩子
我们先定义钩子处理函数
摆放钩子函数
```php
function add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
//此处代码较多,不贴详细内容
}
```
执行钩子函数
```php
function do_action($tag, $arg = ''){
//此处代码较多,不贴详细内容
}
```
如何让这2个函数执行起来为我们服务呢?
当然是需要先要执行add_action 注入钩子,然后再执行do_action来处理了。
下面以一个简单的例子来说明它的执行流程
------------------------------------------------------
...未完待续,先下班,后面补上
------------------------------------------------------
实在抽不出时间写例子,先简单说说思路吧,有思路,剩下就是实现了,官方应该能做到。
1、首先在functions.php里增加add_action(){} 和do_action(){}, add_action 是注入钩子函数,do_action 是执行函数。
2、修改路由文件,优先加载插件路由,如果插件路由存在的话。
3、在plugins里创建put_baidu文件夹,在里面创建三个文件,一个是config.php,作为插件配置文件,里面有插件描述、版本号等,二是put_baidu.php这是插件主文件,读取插件的时候,第一个会读取这个文件,里面放置了add_action、前端路由、执行action等,继承自aws_controller, 三是put_baidu_cp.php,这是一个后台处理文件,继承自aws_admin_controller, 用来做插件设置相关动作。
4、在config/admin_menu.php里,增加一个插件菜单,遍历插件目录,把具有插件后台处理文件的插件,都添加到插件菜单中。
至此,插件的前后端都打通了,这里的插件缺少model和view,为什么不加这2个,是考虑到现有的架构中,model和view都可以直接使用系统默认的目录,插件只是新增文件,不会对原有结构产生影响,即使升级也不影响。
关于钩子的放置,这是一个需要长期的实践积累的事,可以一个一个的加,慢慢补充完善。php方面,比如百度推送、sitemap、自动锚文本功能,需要截取文章、问题的发布,那么就在文章、问题发布后,加入个钩子;模板方面,比如问题投票功能,需要在问题发布页面增加投票表单,则需要在问题发布模板里增加一个钩子,在问题投票功能里生成表单。其他功能类似。
这么实现难吗?哪里有范例可供参考?
老实说,如果你通读过,或者看过比较多WordPress源码,你就会觉得这并不难。当然不需要像WordPress处处是钩子,我们只需要在合适的地方合理的布局钩子,程序就不会太绕,实现起来就容易多了。
如果对上面说法不怎么理解,或者是觉得我说得和太合理,可以在回复或评论中指正。
后期有时间了我再上一个代码示例。
阅读全文
收起全文