• 控制器
    • 自定义模板" level="3">自定义模板

    控制器

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

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

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

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

    Admin.php的代码如下:

    1. namespace plugins\HelloWorld\controller;
    2. use app\common\builder\ZBuilder;
    3. use app\common\controller\Common;
    4. /**
    5. * 插件后台管理控制器
    6. * @package plugins\HelloWorld\controller
    7. */
    8. class Admin extends Common
    9. {
    10. /**
    11. * 插件管理页
    12. * @return mixed
    13. */
    14. public function index()
    15. {
    16. // 用TableBuilder渲染模板
    17. return ZBuilder::make('table')
    18. ->setPageTitle('数据列表')
    19. ->setSearch(['id' => 'ID', 'said' => '名言', 'name' => '出处'])
    20. ->addColumns([
    21. ['id', 'ID'],
    22. ['said', '名言', 'text.edit'],
    23. ['name', '出处'],
    24. ['status', '状态', 'switch'],
    25. ['right_button', '操作', 'btn']
    26. ])
    27. ->setTableName('plugin_hello')
    28. ->fetch();
    29. }
    30. }

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

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

    1. $btnOne = [
    2. 'title' => '自定义按钮1',
    3. 'icon' => 'fa fa-list',
    4. 'href' => plugin_url('HelloWorld/Admin/testTable'),
    5. 'target' => '_blank',
    6. ];

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

    自定义模板" class="reference-link">自定义模板

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

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

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

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

    1. return $this->pluginView();

    也可以指定模板名称

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

    也可以指定模板后缀

    1. return $this->pluginView('index', 'tpl');