Cacti 二次开发————Cacti页面内容添加

1 篇文章 0 订阅

用过Cacti的小伙伴,一定会碰到一个很烦恼的问题,Cacti的页面并不是像我们平时那样写成静态页面,而是通过conf文件+封装的函数生成的。下面将给大家呈现Cacti页面的生成方式,方便大家做二次开发。
1.页面地址(http://xx.xx.xx.xx/cacti/user_admin?action=user_edit&id=…后面省略)

/* --------------------------
    User Administration
   -------------------------- */

function user_edit() {
    global $colors, $fields_user_user_edit_host;

    /* ================= input validation ================= */
    input_validate_input_number(get_request_var("id"));
    /* ==================================================== */

    if (!empty($_GET["id"])) {
        $user = db_fetch_row("SELECT * FROM user_auth WHERE id = " . get_request_var("id"));
        $header_label = "[edit: " . $user["username"] . "]";
    }else{
        $header_label = "[new]";
    }

    api_plugin_hook_function('user_admin_edit', (isset($user) ? get_request_var("id") : 0));

    html_start_box("<strong>用户管理</strong> $header_label", "100%", $colors["header"], "3", "center", "");

    draw_edit_form(array(
        "config" => array("form_name" => "chk"),
        "fields" => inject_form_variables($fields_user_user_edit_host, (isset($user) ? $user : array()))
        ));

    html_end_box();

    if (!empty($_GET["id"])) {
        /* draw user admin nav tabs */
        ?>
        <table class='tabs' width='100%' cellspacing='0' cellpadding='3' align='center'>
            <tr>
                <td width='1'></td>
                <td <?php print ((get_request_var_request("tab") == "user_realms_edit") ? "bgcolor='silver'" : "bgcolor='#DFDFDF'");?> nowrap='nowrap' width='150' align='center' class='tab'>
                    <span class='textHeader'><a href='<?php print htmlspecialchars("user_admin.php?action=user_edit&tab=user_realms_edit&id=" . $_GET["id"]);?>'>Realm Permissions</a></span>
                </td>
                <td width='1'></td>
                <td <?php print ((get_request_var_request("tab") == "graph_perms_edit") ? "bgcolor='silver'" : "bgcolor='#DFDFDF'");?> nowrap='nowrap' width='150' align='center' class='tab'>
                    <span class='textHeader'><a href='<?php print htmlspecialchars("user_admin.php?action=user_edit&tab=graph_perms_edit&id=" . $_GET["id"]);?>'>Graph Permissions</a></span>
                </td>
                <td width='1'></td>
                <td <?php print ((get_request_var_request("tab") == "graph_settings_edit") ? "bgcolor='silver'" : "bgcolor='#DFDFDF'");?> nowrap='nowrap' width='130' align='center' class='tab'>
                    <span class='textHeader'><a href='<?php print htmlspecialchars("user_admin.php?action=user_edit&tab=graph_settings_edit&id=" . $_GET["id"]);?>'>Graph Settings</a></span>
                </td>
                <?php api_plugin_hook('user_admin_tab');?>              
                <td></td>
            </tr>
        </table>
        <?php
    }

    if (get_request_var_request("tab") == "graph_settings_edit") {
        graph_settings_edit();
    }elseif (get_request_var_request("tab") == "user_realms_edit") {
        user_realms_edit();
    }elseif (get_request_var_request("tab") == "graph_perms_edit") {
        graph_perms_edit();
    }else{
        if (api_plugin_hook_function('user_admin_run_action', get_request_var_request("tab"))) {
            user_realms_edit();
        }
    }

    form_save_button("user_admin.php", "return");
}

可以看到上面有一个封装的函数draw_edit_form()这个函数就是用来生成主要显示页面的,该函数在cacti目录下的lib/html_form.php中具体内容如下,当然可以自己编辑:

function draw_edit_form($array) {
    global $colors;

    if (sizeof($array) > 0) {
        while (list($top_branch, $top_children) = each($array)) {
            if ($top_branch == "config") {
                $config_array = $top_children;
            }elseif ($top_branch == "fields") {
                $fields_array = $top_children;
            }
        }
    }

    $i = 0;
    if (sizeof($fields_array) > 0) {
        while (list($field_name, $field_array) = each($fields_array)) {
            if ($i == 0) {
                if (!isset($config_array["no_form_tag"])) {
                    print "<tr style='display:none;'><td><form method='post' autocomplete='off' action='" . ((isset($config_array["post_to"])) ? $config_array["post_to"] : basename($_SERVER["PHP_SELF"])) . "'" . ((isset($config_array["form_name"])) ? " name='" . $config_array["form_name"] . "'" : "") . ((isset($config_array["enctype"])) ? " enctype='" . $config_array["enctype"] . "'" : "") . "></td></tr>\n";
                }
            }

            if ($field_array["method"] == "hidden") {
                form_hidden_box($field_name, $field_array["value"], ((isset($field_array["default"])) ? $field_array["default"] : ""));
            }elseif ($field_array["method"] == "hidden_zero") {
                form_hidden_box($field_name, $field_array["value"], "0");
            }elseif ($field_array["method"] == "spacer") {
                print "<tr id='row_$field_name' bgcolor='#" . $colors["header_panel"] . "'><td colspan='2' class='tableSubHeaderColumn'>" . $field_array["friendly_name"] . "</td></tr>\n";
            }else{
                if (isset($config_array["force_row_color"])) {
                    print "<tr id='row_$field_name' bgcolor='#" . $config_array["force_row_color"] . "'>";
                }else{
                    form_alternate_row_color($colors["form_alternate1"], $colors["form_alternate2"], $i, 'row_' . $field_name);
                }

                print "<td width='" . ((isset($config_array["left_column_width"])) ? $config_array["left_column_width"] : "50%") . "'>\n<font class='textEditTitle'>" . $field_array["friendly_name"] . "</font><br>\n";

                if (isset($field_array["sub_checkbox"])) {
                    form_checkbox($field_array["sub_checkbox"]["name"],
                        $field_array["sub_checkbox"]["value"],
                        $field_array["sub_checkbox"]["friendly_name"],
                        ((isset($field_array["sub_checkbox"]["default"])) 	? $field_array["sub_checkbox"]["default"] : ""),
                        ((isset($field_array["sub_checkbox"]["form_id"])) 	? $field_array["sub_checkbox"]["form_id"] : ""),
                        ((isset($field_array["sub_checkbox"]["class"])) 	? $field_array["sub_checkbox"]["class"] : ""),
                        ((isset($field_array["sub_checkbox"]["on_change"])) ? $field_array["sub_checkbox"]["on_change"] : ""));
                }

                print ((isset($field_array["description"])) ? $field_array["description"] : "") . "</td>\n";

                print "<td>";

                draw_edit_control($field_name, $field_array);

                print "</td>\n</tr>\n";
            }

            $i++;
        }
    }
}

不过改方法中也是只是输出而已,如果想添加的话,还得去一个专门用来存数据的array中,添加数据,数据在cacti目录下include/global_form.php中,部分内容大致如下:

/* file: user_admin.php, action: user_edit (host) */
$fields_user_user_edit_host = array(
    "username" => array(
        "method" => "textbox",
        "friendly_name" => "User Name",
        "description" => "The login name for this user.",
        "value" => "|arg1:username|",
        "max_length" => "255"
        ),
    "full_name" => array(
        "method" => "textbox",
        "friendly_name" => "Full Name",
        "description" => "A more descriptive name for this user, that can include spaces or special characters.",
        "value" => "|arg1:full_name|",
        "max_length" => "255"
        ),
    "password" => array(
        "method" => "textbox_password",
        "friendly_name" => "Password",
        "description" => "Enter the password for this user twice. Remember that passwords are case sensitive!",
        "value" => "",
        "max_length" => "255"
        ),
    "enabled" => array(
        "method" => "checkbox",
        "friendly_name" => "Enabled",
        "description" => "Determines if user is able to login.",
        "value" => "|arg1:enabled|",
        "default" => ""
        ),
    "grp1" => array(
        "friendly_name" => "Account Options",
        "method" => "checkbox_group",
        "description" => "Set any user account-specific options here.",
        "items" => array(
            "must_change_password" => array(
                "value" => "|arg1:must_change_password|",
                "friendly_name" => "User Must Change Password at Next Login",
                "form_id" => "|arg1:id|",
                "default" => ""
                ),
            "graph_settings" => array(
                "value" => "|arg1:graph_settings|",
                "friendly_name" => "Allow this User to Keep Custom Graph Settings",
                "form_id" => "|arg1:id|",
                "default" => "on"
                )
            )
        ),
    "grp2" => array(
        "friendly_name" => "Graph Options",
        "method" => "checkbox_group",
        "description" => "Set any graph-specific options here.",
        "items" => array(
            "show_tree" => array(
                "value" => "|arg1:show_tree|",
                "friendly_name" => "User Has Rights to Tree View",
                "form_id" => "|arg1:id|",
                "default" => "on"
                ),
            "show_list" => array(
                "value" => "|arg1:show_list|",
                "friendly_name" => "User Has Rights to List View",
                "form_id" => "|arg1:id|",
                "default" => "on"
                ),
            "show_preview" => array(
                "value" => "|arg1:show_preview|",
                "friendly_name" => "User Has Rights to Preview View",
                "form_id" => "|arg1:id|",
                "default" => "on"
                )
            )
        ),
    "login_opts" => array(
        "friendly_name" => "Login Options",
        "method" => "radio",
        "default" => "1",
        "description" => "What to do when this user logs in.",
        "value" => "|arg1:login_opts|",
        "items" => array(
            0 => array(
                "radio_value" => "1",
                "radio_caption" => "Show the page that user pointed their browser to."
                ),
            1 => array(
                "radio_value" => "2",
                "radio_caption" => "Show the default console screen."
                ),
            2 => array(
                "radio_value" => "3",
                "radio_caption" => "Show the default graph screen."
                )
            )
        ),
    "realm" => array(
        "method" => "drop_array",
        "friendly_name" => "Authentication Realm",
        "description" => "Only used if you have LDAP or Web Basic Authentication enabled.  Changing this to an non-enabled realm will effectively disable the user.",
        "value" => "|arg1:realm|",
        "default" => 0,
        "array" => $auth_realms,
        ),
    "id" => array(
        "method" => "hidden_zero",
        "value" => "|arg1:id|"
        ),
    "_policy_graphs" => array(
        "method" => "hidden",
        "default" => "2",
        "value" => "|arg1:policy_graphs|"
        ),
    "_policy_trees" => array(
        "method" => "hidden",
        "default" => "2",
        "value" => "|arg1:policy_trees|"
        ),
    "_policy_hosts" => array(
        "method" => "hidden",
        "default" => "2",
        "value" => "|arg1:policy_hosts|"
        ),
    "_policy_graph_templates" => array(
        "method" => "hidden",
        "default" => "2",
        "value" => "|arg1:policy_graph_templates|"
        ),
    "save_component_user" => array(
        "method" => "hidden",
        "value" => "1"
        )
    );

通过在array中添加元素,则可以在user_admin页面上面添加内容~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自在如风。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值