[Dの食卓]官方系统信息插件源码分析


官方提供了一个 系统信息(SystemInfo) 插件
看上去很简单
其实是有用意的

这个插件主要演示了在controller中如何调用插件数据的用法

插件的定义中规中矩,建立config,建立了一个view

注意最后的返回值

        $this->assign('server_info', $info);
        //这是给widget模板用的
        return [
            'width'  => 12,
            'view'   => $this->fetch('widget'),
            'plugin' => 'SystemInfo'
        ];
        //这是调用方法的返回值,谁调用就返回这个数组

插件的server_info是用在自己的widget模板中的

            <volist name="server_info" id="vo">
                <li><em>{$key}</em> <span>{$vo}</span></li>
            </volist>

插件写好了 如何调用它呢?

调用此插件的方法写在了
app\admin\controller\MainController.php的index方法中
该插件的return内容会在此处展现

       $dashboardWidgetPlugins = [];

$hookResults = hook('admin_dashboard');

if (!empty($hookResults)) {
    foreach ($hookResults as $hookResult) {
        if (isset($hookResult['width']) && isset($hookResult['view']) && isset($hookResult['plugin'])) { //验证插件返回合法性
            $dashboardWidgetPlugins[$hookResult['plugin']] = $hookResult;
            if (!isset($dashboardWidgets[$hookResult['plugin']])) {
                $dashboardWidgets[$hookResult['plugin']] = ['name' => $hookResult['plugin'], 'is_system' => 0];
            }
        }
    }
}
$this->assign('dashboard_widget_plugins', $dashboardWidgetPlugins);
//将插件的信息调到页面中

其实就是调用了插件的adminDashboard方法 返回了一个数组 包含width view plugin

在view层
themes\admin_simpleboot3\admin\main\index.html中

       <div class="home-grid">
            <!-- width of .grid-sizer used for columnWidth -->
            <div class="grid-sizer"></div>
            <foreach name="dashboard_widgets" item="vo">
                <if condition="$vo.is_system">
                    <div class="grid-item col-md-12" data-system="1" data-widget="{$vo.name}">
                        <div class="dashboard-box">{:_get_system_widget($vo.name)}</div>
                    </div>
                    <else/>
                    //这里走的是else 判断是否有插件数据
                    <present name="dashboard_widget_plugins[$vo['name']]">
                        <div class="grid-item col-md-{$dashboard_widget_plugins[$vo['name']]['width']}" data-system="0"
                             data-widget="{$vo.name}">
                            <div class="dashboard-box">{$dashboard_widget_plugins[$vo.name]['view']}</div>
                        </div>
                    </present>
        
                </if>
        
            </foreach>
        </div>



最后的效果是在/admin/index/index.html的最下方


评论

请登录后查看回复,立即登录
发表话题

七牛专享优惠码

507670e8

提问必知

0.话题发布后没及时显示,请联系官方QQ群管理;
1.话题支持代码,qq截屏直接粘贴,和QQ群一样;
2.问题描述清,比如服务器版本,程序版本;
3.能上代码,就不用文字;
4.把问题发到话题后再发QQ群;
5.如果感觉回复者解答的不错,可以发红包!
6.多帮助别人也是对自己的锻炼!
7.付费讨论中只有提问者和付费用户才可以查看回复

积分规则

1.评论积分+1;每天最多10次奖励
2.发布话题积分+1;每天最多5次奖励
3.垃圾评论积分-500;
4.黄色,暴力,违反我国法律评论直接封号


ThinkCMF 5.1.3正式版已发布,推荐所有5.1用户升级使用!立即升级!