想模仿hostgroups.php仿写一个主机组页面。直接从页面展示开始分析。

if (isset($_REQUEST['form'])) {
//这里面是点击创建主机组的页面展示
}else{
//从这里开始分析
}
    $sortfield = getPageSortField('name');    //获取排序的字段依据
$sortorder = getPageSortOrder(); //升序降序
    $data = array(
'config' => $config, //获取配置
'displayNodes' => is_array(get_current_nodeid()) //获取展示的节点,字面意义,具体是啥不知道,暂时不深究
);

接下来是目前最让我头疼的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 //
));
$data['groupCounts'] = zbx_toHash($data['groupCounts'], 'groupid');

这是对取得的结果进行重新排序。以结果中的groupid作为新数组的下标。

	$data['groups'] = API::HostGroup()->get(array(
'groupids' => zbx_objectValues($groups, 'groupid'),
'selectHosts' => array('hostid', 'name', 'status'),
'selectTemplates' => array('hostid', 'name', 'status'),
'selectGroupDiscovery' => array('ts_delete'),
'selectDiscoveryRule' => array('itemid', 'name'),
'output' => API_OUTPUT_EXTEND,
'limitSelects' => $config['max_in_table'] + 1
));

获取详细信息。

order_result($data['groups'], $sortfield, $sortorder);

按$sortfield,进行$sortorder排序。

最新文章

  1. CoreBluetooth——IOS蓝牙4.0使用心得
  2. C# 添加excel批注
  3. spring3 mvc:方法返回值的学习
  4. 神奇的NOIP模拟赛 T3 LGTB 玩THD
  5. IT职场求生法则(转)
  6. linux 文件在磁盘上的表示
  7. SQL SERVER 2000 & SQL SERVER 2005 数据缓存依赖
  8. 图片裁切插件jCrop的使用心得(一)
  9. POJ1679(次小生成树)
  10. css绝对定位、相对定位和文档流的那些事
  11. 【Android Developers Training】 19. 序言:通过Fragments构建动态UI
  12. 转自知乎(JAVA后台开发可以纯粹用JAVA SE吗?)
  13. Android Multimedia框架总结(十四)Camera框架初识及自定义相机案例
  14. php中的抽象方法和抽象类,简单明了,一点通
  15. Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务
  16. ubuntu16 安装matplotlib
  17. 健康检测文件httpchk.jsp
  18. Maven 依赖管理问题小计
  19. 03_java之基本语法
  20. dva框架使用详解及Demo教程

热门文章

  1. json 筛选数据 $.grep过滤数据
  2. yii YII小部件 创建登录表单表单 Login表单
  3. LNMP下防跨站、跨目录安全设置,仅支持PHP 5.3.3以上版本
  4. extern "C"的作用
  5. JS & DOM 对象
  6. DB天气app冲刺第五天
  7. 常用javascript代码片段集锦
  8. 查看java的.class文件的方法
  9. JAVA 字符串编码总结
  10. DHTMLX 前端框架 建立你的一个应用程序 教程(六)-- 表格加载数据