- This module provides a plugin pattern(Plug-and-Play) solustion.
- No need to edit any file to configure plugin, it can install, uninstall, enable and disable at admin control panel.
- Plugins do not modify project files, it can be uninstall safely.
- Extendable. Can add hooks to any views.
- Encapsulate Yii functions, easy for non-Yii developer to create a plugin
composer install --prefer-dist zacksleo/yii2-plugin
Add these array in the project config (if you have more than one entries,add these in both of them)
'components' =>[
'plugin' => [
'class' => 'zacksleo\yii2\plugin\components\HookRender'
],
],
'modules' => [
'plugin' => [
'class' => 'zacksleo\yii2\plugin\Module',
'layout' => 'layout',
'layoutPath' => '@vendor/zacksleo/yii2-backend/src/views/layouts', #布局
'pluginRoot' => '@vendor/moguyun-plugins/', ##放置插件的namespace目录
'pluginNamespace' => '@moguyun/plugins', ##放置插件的namespace
],
]
yii migrate/up --migrationPath=@zacksleo/yii2/plugin/migrations
The CP url is :
$this->createUrl(['/plugin/plugin-manage/index']);
#just add this to the position you want to be hooked
Yii::$app->plugin->render('Hook_Name'); # Name the Hook Position and told it to your plugin developers.
For Create a plugin, you need to inherit the class Plugin
.
And the class name and class file name should end with the word Plugin
.
For expamle, file ExamplePlugin.php
:
class ExamplePlugin extends Plugin {
//codes here
}
The word Example
(without word Plugin
) is the plugin's identify (case sensitive).
###Implement The Plugin
To implement the plugin and makes it work, you should inherit these method and initialize some properties.
class ExamplePlugin extends Plugin {
public function init() { #initialize,config plugin's info, required
// set plugin's info
$this->identify = 'Example'; #required, the Unique id for this plugin.
$this->name = 'Example Plugin'; #required, plugin's name for display.
$this->version = '1.0';
$this->description = 'description here';
$this->copyright = '© Robin <Robin@email.com>';
$this->website = 'http://example.com';
$this->icon = 'icon.png'; #max to 72*72, if not set a default icon will display in the admin cp;
}
// return hooks array which this plugin want to hook, the value is the method's name
// for the hook.
public function hooks(){
return array(
//'Hook Position Name' => 'hook method';
'Hook_Index_Header' => 'header',
);
}
// method for hook
public function header(){
// some codes here
echo 'This will echo a sting at position Hook_Index_Header';
}
// If you want to display a page with an url instead of render as a widget,
// you need to write a method begin with the word "action", the word after
// "action" is the action's name.
// e.g.:
public function actionPage() {
echo "This action have a url like this (with url rewrite):";
# domain/plugin<Module>/plugin<controller name>/index<router action name>
# ?id=xx<plugin identify>&action=xxx<action name>
echo "You_Domain.com/plugin/plugin/index?id=example&action=page";
#You can create this url by call method 'createUrl'
echo $this->createUrl('page',array('param'=>'test'));
}
public function actionExample(){
# this action is named with plugin's identify,
# param $action could be empty or false value
echo $this->createUrl();
}
// If your plugin allow to set configs at the admin control panel
// You need to inherit this:
public function admincp() {
// You can put codes here.
// Like some inputs
$this->setSetting('key','value'); # write setting
echo $this->getSetting('key'); # read setting
}
// Here you can put some code at the Installation and Uninstallation
public function install() {
//codes here
$sql = "create `tbl_xxxxxx` ....."; # write sql with a table prefix
$this->query($sql,'tbl_'); # and pass it at method query
# as default, it is 'tbl_'
return true; #This method need to return true, or the installation will fail.
}
public function uninstall() {
// just like the method install.
return true; #This method need to return true, or the uninstallation will fail.
}
// Then, you created a simple plugin
// For advanced usage, see demos
}