牛骨文教育服务平台(让学习变的简单)

插件的控制放在插件目录下的controller文件夹下,控制器命名规范请参考ThinkPHP5.0文档。

如果插件有后台管理功能,除了可以在插件入口文件定义管理界面的字段信息,然后由系统生成管理界面外,也可以自己创建页面。

但必须写在Admin控制器的index方法内。

plugins [所有插件目录]
├─HelloWorld [插件目录,插件名为首字母大写的驼峰式]
│  ├─controller [插件控制器目录]
│  │      Admin.php [插件控制器,自定义后台管理都在这里,可以建立其他控制器]

Admin.php的代码如下:

namespace pluginsHelloWorldcontroller;

use appcommonuilderBuilder;
use appcommoncontrollerCommon;

/**
 * 插件后台管理控制器
 * @package pluginsHelloWorldcontroller
 */
class Admin extends Common
{
    /**
     * 插件管理页
     * @return mixed
     */
    public function index()
    {
        // 用TableBuilder渲染模板
        return ZBuilder::make("table")
            ->setPageTitle("数据列表")
            ->setSearch(["id" => "ID", "said" => "名言", "name" => "出处"])
            ->addColumns([
            	["id", "ID"],
                ["said", "名言", "text.edit"],
                ["name", "出处"],
                ["status", "状态", "switch"],
                ["right_button", "操作", "btn"]
            ])
            ->setTableName("plugin_hello")
            ->fetch();
    }
}

只要在Admin控制器内有index方法,那么点击插件管理按钮,系统会优先执行该方法,而不会自动创建管理页面。

在自定义的管理界面添加按钮,按钮的链接可以使用plugin_url方法来调用插件控制器内的方法,比如:

$btnOne = [
    "title"  => "自定义按钮1",
    "icon"   => "fa fa-list",
    "href"   => plugin_url("HelloWorld/Admin/testTable"),
    "target" => "_blank",
];

表示调用HelloWorld插件的Admin控制器的testTable方法。

自定义模板

自定义模板有两种方法,一种是使用ThinkPHP的fetch()方法,一种是只用系统的pluginView方法。

使用$this->fetch()需要指定模板文件的完整路径,如:

return $this->fetch(config("plugin_path"). "HelloWorld/view/index.html");

或者使用pluginView方法,默认加载插件view目录下与当前方法名一致的模板文件。

return $this->pluginView();

也可以指定模板名称

return $this->pluginView("index"); // 加载插件view目录下的index.html模板文件

也可以指定模板后缀

return $this->pluginView("index", "tpl");