白话插件钩子
我的理解是:钩子是插件的一个标识位置,在模板中放入一个插件的钩子,当模板输出到此钩子位置时,就调取插件的相应内容
插件钩子示例
Tips:
- 向系统暴露你的钩子 ( 在你的应用根目录加上hooks.php文件 ,
文件中返回此应用钩子数组 ) - 插件主类中实现钩子方法
- 在模板合适位置放入钩子即可
比如:想在模板index.html文件中,放入一个钩子
首先:在 portal 应用的hooks.php中暴露钩子
位置时:app/portal/hooks.php
其次:在插件主类中实现钩子方法
最后:在模板合适位置放入钩子即可
效果:安装插件后,访问页面,实现的效果就是在插件位置,运行了shopStart方法,如图:
制作一个插件,并添加钩子
tips:
- 插件目录:
public/plugins
- 插件目录命名规则:全小写使用
_
分隔单词,与命名空间一致,eg:eyunzhu_shop
- 插件类名命名规则:采用大驼峰命名法,都带 Plugin类名后缀,eg:
EyunzhuShopPlugin.php
- 注意插件 name 要与类名前部分完全一致,否则安装会出现:插件不存在
添加模板钩子
重复一遍,分三步使用钩子
- 在相应应用模块的hooks.php中加入钩子
- 在模板合适位置放入钩子
- 在插件主类中实现钩子方法
- 在app/portal/hooks.php 添加模板钩子
return [
'shop_start' => [
"type" => 3,//钩子类型(默认为应用钩子;2:应用钩子;3:模板钩子;4:后台模板钩子)
"name" => '商城开始', // 钩子名称
"description" => "商城在此开始", //钩子描述
"once" => 0 // 是否只执行一次
],
]
- 在模板中使用钩子
public/themes/simpleboot3/portal/index.html
中加入<hook name="shop_start"/>
//主类部分代码
namespace plugins\eyunzhu_shop;
use cmf\lib\Plugin;
class EyunzhuShopPlugin extends Plugin
{
public $info =[
'name' => 'EyunzhuShop',//注意name 要与类名前部分完全一致,否则安装会出现:插件不存在
'title' =>'商城插件',
'description' =>'整合支付宝及发卡的商城插件',
'status' => 1,
'author' => 'eyunzhu',
'version' => '1.0',
'demo_url' => 'http://tool.eyunzhu.com',
'author_url' => 'http://eyunzhu.com',
];
//实现的 shop_start 钩子方法
public function shopStart($param)
{
echo "this is eyunzhu_shop Plugin";
}
......
更多文章
不错,学习了
提交评论