public static function get($idx, $default_value = null, $idx2 = 0) ;
可以发现,这个get函数是个静态的函数,返回相应的数据设置,其中的又调用内部的init函数,再找到这个init函数: public static function init();发现其中正是对配置表中数据的读取: $db_profiles = DBselect( 'SELECT p.*'.
' FROM profiles p'.
' WHERE p.userid='.self::$userDetails['userid'].
andDbNode('p.profileid', false).
' ORDER BY p.userid,p.profileid'
);
然后返回相应的数据
获取到配置项后,就是页面的展示
首先是action,这里是根据请求的类型执行相应的脚步,request['favobj'],比如有菜单的折叠,有rate的选择
最后是页面的展示
首先是创建画布,将所有的框框在一个抽象层面上的画布上展示: $dashboardWidget = new CWidget('dashboard_wdgt');分析判断,这里是实例化类个CWidget类,去找到这个类: www/include/classes/class.cwidget.php分析构造函数,里面设置的是body的id和页面的样式
然后,展示页面的图标,比如全屏的图标
接下来是生产菜单的语句,比如: make_graph_menu($menu, $submenu);//生成图表的菜单分别生成所有单元的菜单,我们分析这一个,找到这个函数make_graph_menu所在文件: www/include/blocks.inc.php找到函数的定义: function make_graph_menu(&$menu, &$submenu) ;可以看到这个函数中的参数是取值符,妈蛋,这个玩意自从在c/c++中遇到后就再没遇到过,不过这里也能理解,可以推断出这个函数没有返回值,这里是添加一些选项,然后需要弹框的地方是有链接popup.php文件的,比如: $menu['menu_graphs'][] = array( _('Add').' '._('Simple graph'),
'javascript: PopUp(\'popup.php?srctbl=items&srcfld1=itemid&reference=itemid&real_hosts=1'.
'&multiselect=1&numeric=1&templated=0&with_simple_graph_items=1\',800,450); void(0);',
null,
array('outer' => 'pum_o_submenu', 'inner' => array('pum_i_submenu'))
);后面就是生成刷新的菜单: make_refresh_men();这个就没必要分析了
再下面就是单元的输出了,挑选一个来分析://生成单元菜单的图标$refresh_menu = get_icon('menu', array('menu' => 'hat_hoststat'));//展示正在加载,然后去数据库中读取信息
$hoststat = new CUIWidget('hat_hoststat', new CSpan(_('Loading...'), 'textcolorstyles'), CProfile::get('web.dashboard.widget.hoststat.state', 1));//单元的菜单
$hoststat->setHeader(_('Host status'), array($refresh_menu));//生成单元底部
$hoststat->setFooter(new CDiv(SPACE, 'textwhite', 'hat_hoststat_footer'));//这个不知道用什么语言来形容,在后面显示的时候这个是放在一个数组中的,按次序显示
$col = CProfile::get('web.dashboard.widget.hoststat.col', '1');
$row = CProfile::get('web.dashboard.widget.hoststat.row', '2');//存放在数组中,等后面全部展示的的时候传递给dashboardTable
if (!isset($columns[$col][$row])) {
$columns[$col][$row] = $hoststat;
}
else {
$columns[$col][] = $hoststat;
}
需要去探究下CUIWidget,找到这个文件: www/include/classes/class.cuiwidget.php
全部的展示:$dashboardTable = new CTable();
$dashboardTable->addRow(array(new CDiv($columns[0], 'column'), new CDiv($columns[1], 'column'), new CDiv($columns[2], 'column')), 'top');