想模仿hostgroups.php仿写一个主机组页面。直接从页面展示开始分析。
if (isset($_REQUEST[‘form‘])) { //这里面是点击创建主机组的页面展示 }else{ //从这里开始分析 }
$data = array( ‘config‘ => $config, //获取配置 ‘displayNodes‘ => is_array(get_current_nodeid()) //获取展示的节点,字面意义,具体是啥不知道,暂时不深究 );
$sortfield = getPageSortField(‘name‘); //获取排序的字段依据 $sortorder = getPageSortOrder(); //升序降序
接下来是目前最让我头疼的zabbix自带的对sql语句的构造方法,里面各种字段,复杂的很。
$groups = API::HostGroup()->get(array( ‘editable‘ => true, //将权限设置为PERM_READ_WRITE,否则为PERM_READ ‘output‘ => array(‘groupid‘), //在select 后面增加字段‘groupid‘,注释掉这句,发现获得的数据是一样的,应该默认是有groupid字段的。applyQueryOutputOptions() ‘sortfield‘ => $sortfield, //在order by 后面增加字段$sortfield,此处为‘name‘,会自动加表的别名,g.name。applyQuerySortOptions()->applyQuerySortField() ‘limit‘ => $config[‘search_limit‘] + 1 //默认是1000,不知道+1是为什么,然后在zabbix生产sql的方法createSelectQueryFromParts()发现并没有对‘limit‘做任何操作,感觉这里写不写无所谓 ));
反正上面构造出来的sql 语句是‘SELECT g.groupid FROM groups g ORDER BY g.name‘。继续往下看:
$data[‘paging‘] = getPagingLine($groups, array(‘groupid‘));
这个是分页的,进去随便看了一下,每页显示多少数据来源于user表的rows_per_page字段。
// get hosts and templates count $data[‘groupCounts‘] = API::HostGroup()->get(array( ‘groupids‘ => zbx_objectValues($groups, ‘groupid‘), //在sql语句where后面添加(g.groupid BETWEEN ‘4‘ AND ‘17‘ OR g.groupid IN (‘1‘,‘2‘) ‘selectHosts‘ => API_OUTPUT_COUNT, //API::HostGroup()->get()->addRelatedObjects()->API::Host()->get()SELECT DISTINCT COUNT(DISTINCT h.hostid) AS rowscount,hg.groupid FROM hosts h,hosts_groups hg WHERE h.flags IN (0,4) AND (hg.groupid BETWEEN ‘4‘ AND ‘17‘ OR hg.groupid IN (‘1‘,‘2‘)) AND hg.hostid=h.hostid AND h.status IN (0,1) GROUP BY hg.groupid ‘selectTemplates‘ => API_OUTPUT_COUNT, //API::HostGroup()->get()->addRelatedObjects()->API::Host()->get() ‘nopermissions‘ => true // ));
zabbix2.2.2-hostgroups.php代码分析(1)
原文:http://www.cnblogs.com/lucianmaki/p/5120990.html