zabbix php源码,[zabbix 二次开发] 修改 zabbix map PHP 源码通过 update 更新到 MySQL 数据库...

[zabbix 二次开发] 修改 zabbix map PHP 源码通过 update 更新到 MySQL 数据库

利用 jQuery 和 $.Ajax 函数, 通过异步请求, 将 update 内容传递到 sysmap.PHP 页面, 再将个窗体 data 文件存入到 MySQL 数据库中;

jQuery->Ajax->php_REQUEST->MySQL

在修改代码之前需要先添加一个数据表:1)MySQL>zabbix>sysmaps_elements(表)>filed_name(列表项);

#MySQL -uroot -p

#MySQL>use zabbix;

#MySQL>alter table sysmaps_elements add filed_name int(11) default '0';

相关命令:

(1)show tables;

(2)describe 表名;

(3) 查看表中数据 select roamsetting from sysmaps_elements;

(4) 更新某个表数据 update sysmaps_elements set roamsetting=2 where selementid=15;

(5) 修改表中字段; alter table sysmaps modify map_scale bigint(20) default '100';

2) 然后再修改对应的数据格式文件的内容; 定义 db 格式的文件在 include/schema.INI.PHP 文件;

selements_sysmaps: 中增加一个字段;

在 4061 行'x'字段下面;'filed_name'=>[

'null'=>false,

'type'=>DB::FIELD_TYPE_CHAR,

'length'=>10,

'default'=>'0',

],

3) 接下分析窗体文件, sysmap.PHP 文件 => 修改 map 地图相应的 PHP 文件;

在该文件中有个引入脚本文件的类;$page['scripts']=['class.svg.canvas.js','class.svg.map.js','class.cmap.js','class.cviewswitcher.js',

'multiselect.js','colorpicker.js'

]; 通过分析窗体文件在这个 class.cmap.JS 文件中; 该文件在 JS / 目录下

4)class.cmap.JS=> 所有和 map 地图要素相关的 jQuery 文件;

(1) 将需要添加的船体内容到 JS 文件中, 格式为;// 如下;

varAppfield_id='

Sined_name

Sined_name_1

Sined_name_2

NULL

';

(2)// 通过这个语句对应将 filed_name 的值放入 values 中; 意思是 filed_name='0' '1'或'2';jQuery 窗体文件交互都是采用这种格式;

3036 行;

data[values[i].name] = values[i].value.toString();

5) 将 Appfield_id div 内容添加到页面;

在 this.domNode = $(tpl.evaluate(formTplData)).appendTo(formContainer); 这行语句之后//filed_name parameter by suneiot

//console.log(this.formContainer); 这里 sel=="0" 是表示判断是否是 host 主机类型;

varsel="";

sel=$("#elementType").val();

if(sel=="0"){

$(formContainer).append(Appfiled_id);

$("#filed_name").insertAfter($('#hostGroupSelectRow'));

}else{$("#filed_name").remove();}

$("#elementType").change(function(){

if($("filed_name")!="")$("#filed_name").remove();

sel=$("#elementType").val();

if(sel=="0"){

$(formContainer).append(Appfiled_id);

$("#filed_name").insertAfter($('#hostGroupSelectRow'));

}else{$("#filed_name").remove();}

});

6) 将以下代码插入到 615 行之后, 进行点击之后进行判断/*

Selements events

*/

// Delegate selements icons clicks.

点击图形之后, 对添加 ap,sta,null 单选按钮进行判断是否已经出现;//***//

$(this.container).on('click','.sysmap_element, .sysmap_shape',function(event){

that.selectElements([{

id:$(this).attr('data-id'),

type:$(this).attr('data-type')

}],event.ctrlKey||event.metaKey);

//

if(($("#elementType").val())=="0"){

// 将以下内容添加到这个 forContainer 对象中.

$(this.formContainer).append(Appfiled_id);

$("#filed_name").insertAfter($('#hostGroupSelectRow'));

}else{

$("#filed_name").remove()

};

});

//********************************************************************************

5) 修改完信息后通过点击窗体 update 按钮, 回到 sysmap.PHP 文件中, 通过. Ajax 函数传递窗体内容具体代码如下:save:function(){

varurl=newCurl();

$.Ajax({

url:url.getPath()+'?output=ajax&sid='+url.getArgument('sid'),

type:'post',

data:{

favobj:'sysmap',

action:'update',

sysmapid:this.sysmapid,

sysmap:Object.toJSON(this.data)// TODO: remove prototype method

},

error:function(){

thrownewError('Cannot update map.');

}

});

},

传递的数据通过 JSON 格式放到网页缓存中, 等待 $REQUEST() 函数调用;

6)sysmap.PHP 调用 $REQUEST().Ajax 代码, 代码如下if(isset($_REQUEST['favobj'])){

$JSON=newCJson();

if(getRequest('favobj')==='sysmap'&&hasRequest('action')){

if(getRequest('action')==='update'){

$sysmapid=getRequest('sysmapid',0);

@ob_start();

try{

DBstart();

$sysmap=API::Map()->get([

'sysmapids'=>$sysmapid,

'editable'=>true,

'output'=>['sysmapid'],

]);

$sysmap=reset($sysmap);

if($sysmap===false){

thrownewException(_('Access denied!'));

}

$sysmapUpdate=$JSON->decode($_REQUEST['sysmap'],true);

$sysmapUpdate['sysmapid']=$sysmapid;

$sysmapUpdate['lines']=[];

if(array_key_exists('shapes',$sysmapUpdate)){

foreach($sysmapUpdate['shapes']as$key=>&$shape){

if(array_key_exists('sysmap_shapeid',$shape)&&!is_numeric($shape['sysmap_shapeid'])){

unset($shape['sysmap_shapeid']);

}

if($shape['type']==SYSMAP_SHAPE_TYPE_LINE){

$sysmapUpdate['lines'][$key]=CMapHelper::convertShapeToLine($shape);

unset($sysmapUpdate['shapes'][$key]);

}

}

unset($shape);

}

$result=API::Map()->update($sysmapUpdate);

if($result!==false){

echo'if (confirm('.CJs::encodeJson(_('Map is updated! Return to map list?')).')) { location.href ="sysmaps.php"; }';

}

else{

thrownewException(_('Map update failed.'));

}

DBend(true);

}

/// 该代码是核心, 调用系统 API::MAP()->update 方法 将 $sysmapUpdate 字段内容存入到 zabbix 数据库中;

$result=API::Map()->update($sysmapUpdate);

[zabbix 二次开发] 修改 zabbix map PHP 源码通过 update 更新到 MySQL 数据库

原文: https://blog.51cto.com/13300270/2622705

来源: http://www.bubuko.com/infodetail-3725895.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值