ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## ## 浅谈初步理解钩子,并且开发插件 以下为小编个人理解,仅供参考; 首先聊聊钩子吧,其实,刚开始接触onethink时,我也挺晕的,后面发现,这个钩子 和 我曾经用的一个博客系统里面的挂载点 很像!甚至就可以说,钩子就是挂载点 挂载点:在系统中提供给你一个挂载点,我们可以进行插件开发,开发完成后,我们将其挂载到 挂载点上,会自动调用执行 例如:我们看内容页的模版里面有这样的一段代码 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUzhyHNZoIbg2j9cpzJOic1FJDEib7wico5R3xsNO0XaDM6fra15ThzmoKA/640?wx_fmt=jpeg) 这个的意思就是:相当于在这边 打一个点 ,我们可以将插件挂载到那 官方的说法是:文档末尾显示显示的 钩子 意思就是说,在文档末尾的时候,会自动调用挂载在那个 钩子 上的插件,那么,我们就来简单做一个小插件 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUJghtIkVEfowWJygCpIDeuBNUvlXfwwfWQ4BJKJk881zXCjxiaYF8wvA/640?wx_fmt=png) 其他的信息,随意定义 ,我这边写的是 版权 那个是否需要配置,反正我是没有选,因为选上以后,他存的配置文件,会被转义。 需要实现的方法,就是 要我们挂载到哪了。我选的 documentDetailAfter 然后点击确定,跳转到插件列表。你会看到我们新建的插件 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUWKRtCZXm8GibibQibKtzUJIbDGsg8iaLicL2pgrrhqHzCL7e0VdeFHV6hFQ/640?wx_fmt=png) 然后,也会在根目录下的 Addons 下给我们生成一个插件目录 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUnlf0uwfAPKl7iaib8LLm8xQDVibmc2WTlW7cFyLBGqJibicG3WustPibGjLQ/640?wx_fmt=png) 我们在插件列表,点击安装 然后看我文档末尾,也就是 文章 末尾处,还是没有任何东西的 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUhCxG4jltolOb7wQTdNVnibuquw8atA5qxQOmsMS2B90gia4YFkoHTvRg/640?wx_fmt=png) 这时候,我们进入给我们生成的插件目录里边 里面有两个文件 插件名Addons.class.php config.php 一个是插件主文件,一个是插件配置文件 我们打开主文件。看下面的注释,我们就知道怎么做啦。就是你需要开发什么样的插件,代码写在那边就好了,钩子会自动调用的 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUmicmJNVRO0V6q5tsgelmrVPwFrS9WdlgPyicR08vQ9QicQkl211wIEmtg/640?wx_fmt=png) 我们最简单的输出一句话 “钩子也就那么回事” 然后,文章页,一看,出来了! ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUlZ1HZpicEbLLs5te1QiaTAuKB4ynlKeDugpeExcZHHjRnn23KQHM5ofg/640?wx_fmt=png) 只要是模版中有这个 挂载点 ,也就是 钩子,都会自动调用这个插件,然后输出 1. `{:hooks('documentDetailAfter')}` `复制代码` 接下来演示,模版调用 我们在插件目录,建立一个html文档,因为这边是在文章中调用的,所以名字为 Article.html ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUuRT3I6XDS9Q3ZG72HoEwYLK0fibcj9x0fCbRXI0Zl8s8BKblHf2QShg/640?wx_fmt=png) 然后在里面直接 display调用即可 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUJK3f9ibSFDEzjKWjpjZNAZibA52bNoltP1D1bp24kSUeGOLfkuLle3aw/640?wx_fmt=png) 文章页面此时就输出我们的模版啦! ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUooLtWrBLGsWudJFGiaWWrRtnztD2lDLJmn6ov2xTxsGadgBxItVl6Xw/640?wx_fmt=png) 接下来,我们讲一下,配置文件的使用 我们打开,官方的一个插件,点击设置,可以看到如下设置项 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUE6xibbLnBCgbKgKlsqGgX7IQK8ELRpxOialtafVb2XIJXCl2AutFicq5g/640?wx_fmt=png) 但是,打开我们的插件时候,没有设置项。这是因为我们刚刚新建插件的时候,是否需要配置,没有选上 我们打开我们的插件配置文件,发现里面是空的,我们就自己添加吧! 其实挺简单的,我们就来用用,在配置文件中,添加我们的配置项 首先,官方提供了一个很小的demo ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUUBnqn2r9H866rZiaK3j6osnIm8zkrXYuBN9l7zlfDcEnLWwaWcHZe5w/640?wx_fmt=jpeg) 其实挺简单的,我们就来用用,在配置文件中,添加我们的配置项 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUsSX1k4P83iaK3xqEEppAJ5qibJ9wQr40nz60cmK5wtBFHibGL5l5KbKHQ/640?wx_fmt=png) ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUQoAp3pdd61Urcd3wHKk4RYCV8kxUDLc1FRes29SOQjuFwaz8gs5cYQ/640?wx_fmt=jpeg) 然后,在插件列表中,点击设置,看到没,出来咯! ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUJVIAWjoXGeInurCnGeS2ebqHo3pVLaok3IGv4y1u1AmnDxVAt2S57g/640?wx_fmt=png) 现在,我们只需要把我们填写的配置项,同步到模版就好啦! 额,没有文档,只能看官方的插件,我发现一个方法 1. `$this->getConfig();` `复制代码` 从字面上的意思来理解,就是获取我们的配置信息,我试了试 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUeTNJz0EBSBQZ97ibjeNgd1PNWPbStJB6yy0tKib5XUicdQvhDASpTJ83w/640?wx_fmt=png) 结果的确是这样做的,在文章中打印出了我们的配置项 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUhM7P7AZEsMY87YMqbuL0uaMaG0nfrq3NFM9AGW5vs61IUPyAMv607g/640?wx_fmt=png) !!!前提是,在设置中,我们填写了这些信息 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUpKIR2IMWaMm8ZPEQHnBKSljAKVjbQyvkSFBygibliciaqcW22kwRd7Bag/640?wx_fmt=png) 接下来,我们只要把它传递到模版中就好啦! ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUWHR3jTzdv7m84TEhibz0zhcqnYNm6sRYZhdaBBjGE4iabM35v2gsp0qQ/640?wx_fmt=png) 模版中 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUJJWpzeZL41kXTBzc2ibNAl7pDDTnbtvEHYCI3NoYMoYDHWfkJUeibiciaA/640?wx_fmt=png) 一个简单的插件,就这样好了,不知道你对于钩子,怎么理解 现在,再来讲讲钩子 现在有一个需求:需要在我的首页文章列表中,标题后面加上我的网址 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUPnt4AiaeuzGDHcTDB4XmgXKXg3r4niaqA83uafNbuibD3DDDsSvGPGL8w/640?wx_fmt=png) 其实也很简单 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUHoUIXy80wkHSiaAYoafNrA5yPv19rbnAjJdF9yDha3GmZxcKSiaTicI7Q/640?wx_fmt=png) 首先我们新增一个钩子 ,url 然后,把他挂载到我们需要挂载的地方去 挂载的语法是: 1. `{:hooks('钩子名')}` `复制代码` 我们找到首页模版,加上就好 ![](http://mmbiz.qpic.cn/mmbiz/ibku3bNX3WmbED7BR3pns39V4XW6Ts7ibUd2ibp5adBKkDUhhtp0YrA7CTw4clXxYDdCGuTT6fuoPPVENy5SlL2fA/640?wx_fmt=png) 然后捏:在插件管理中,新建一个插件,挂载到这个 url 钩子上。方法都是一样的 结尾,在说说钩子的原理吧。有人把他比作为 钉子 , 我是这样看的。js大家知道吧?js给一个按钮,添加点击事件弹出aaa后,点击一下,就会弹出aaa。 这里的,添加绑定事件 就等于 添加 钩子 当系统执行时,发现那里 有一个钩子, 就会自动调用 挂载在 钩子下的插件