設定

このページでは、カスタム設定フィールドを使用してウィジェット設定ビューを作成するために使用できるクラスについて説明します。 ウィジェット設定ビューは、ユーザーがプレゼンテーションのウィジェットパラメーターを設定できるウィジェットの一部です。

Widget

プライマリウィジェットクラス、すべてのダッシュボードウィジェットの基本クラスCWidgetを拡張します。 デフォルトのウィジェットの動作をオーバーライドするために必要です。

Widgetクラスは、ウィジェットのルートディレクトリ(zabbix/ui/modules/my_custom_widgetなど)に配置する必要があります。

Widget.php example

<?php

namespace Modules\MyCustomWidget;

use Zabbix\Core\CWidget;

class Widget extends CWidget {

    public const MY_CONSTANT = 0;

    public function getTranslationStrings(): array {
        return [
            'class.widget.js' => [
                'No data' => _('No data')
            ]
        ];
    }
}

WidgetForm

WidgetFormクラスは、デフォルトクラスCWidgetFormを拡張し、データベース内でウィジェット構成の保存構造を定義し、入力検証を処理するために必要なCWidgetFieldフィールドのセットを含みます。

WidgetFormクラスはincludesディレクトリに配置する必要があります。 クラスに別の名前が付いている場合は、その名前をmanifest.jsonファイルのwidget/form_classパラメーターで指定する必要があります。

includes/WidgetForm.php example

<?php

namespace Modules\MyCustomWidget\Includes;

use Modules\MyCustomWidget\Widget;

use Zabbix\Widgets\{
    CWidgetField,
    CWidgetForm
};

use Zabbix\Widgets\Fields\{
    CWidgetFieldMultiSelectItem,
    CWidgetFieldTextBox,
    CWidgetFieldColor
};

class WidgetForm extends CWidgetForm {

    public const DEFAULT_COLOR_PALETTE = [
        'FF465C', 'B0AF07', '0EC9AC', '524BBC', 'ED1248', 'D1E754', '2AB5FF', '385CC7', 'EC1594', 'BAE37D',
        '6AC8FF', 'EE2B29', '3CA20D', '6F4BBC', '00A1FF', 'F3601B', '1CAE59', '45CFDB', '894BBC', '6D6D6D'
    ];

    public function addFields(): self {
        return $this
            ->addField(
                (new CWidgetFieldMultiSelectItem('itemid', _('Item')))
                    ->setFlags(CWidgetField::FLAG_NOT_EMPTY | CWidgetField::FLAG_LABEL_ASTERISK)
                    ->setMultiple(false)
            )
            ->addField(
                new CWidgetFieldTextBox('description', _('Description'))
            )
            ->addField(
                (new CWidgetFieldColor('chart_color', _('Color')))->setDefault('FF0000')
            );
    }
}

CWidgetFormView

CWidgetFormViewクラスは、WidgetFormクラスで定義されたフィールドのプレゼンテーションロジックを指定し、設定ビューで表示されるときの外観と動作を決定するために必要です。

CWidgetFormViewクラスは次のメソッドをサポートします。

  • addField() - CWidgetFieldViewクラスのインスタンスをパラメーターとして受け取ります。 各CWidgetFieldクラスには、ウィジェット設定ビューで使用するためのそれぞれのCWidgetFieldViewクラスがあります。
  • addFieldset() - フィールドを結合して折りたたみ可能なコンテナにするCWidgetFieldsGroupViewクラスのインスタンスを受け取ります。
  • addFieldsGroup() - フィールドを視覚的に(境界線を使用して)グループに結合するCWidgetFormFieldsetCollapsibleViewのインスタンスを受け取ります。
  • includeJsFile() - JavaScriptファイルをウィジェット設定ビューに追加できます。
  • addJavaScript() - ウィジェット設定ビューがロードされるとすぐに実行されるインラインJavaScriptを追加できます。

CWidgetFormViewクラスはviewsディレクトリに配置する必要があります。

views/widget.edit.php example

<?php

/**
 * My custom widget form view.
 *
 * @var CView $this
 * @var array $data
 */

use Modules\MyCustomWidget\Includes\WidgetForm;

(new CWidgetFormView($data))
    ->addField(
        (new CWidgetFieldMultiSelectItemView($data['fields']['itemid']))->setPopupParameter('numeric', true)
    )
    ->addFieldset(
        (new CWidgetFormFieldsetCollapsibleView(_('Advanced configuration')))
            ->addField(
                new CWidgetFieldTextBoxView($data['fields']['description'])
            )
            ->addField(
                new CWidgetFieldColorView($data['fields']['chart_color'])
            )
    )
    ->includeJsFile('widget.edit.js.php')
    ->addJavaScript('my_custom_widget_form.init('.json_encode([
        'color_palette' => WidgetForm::DEFAULT_COLOR_PALETTE
    ]).');')
    ->show();

JavaScript

JavaScriptクラスを使用して、ウィジェット設定ビューに動的な動作と対話性を追加できます。 たとえば、CWidgetFormViewクラスで定義されたカラーピッカーを初期化できます。

JavaScriptクラスはフォームとともにロードする必要があるため、メソッドincludeJsFile()およびaddJavaScript()を使用してCWidgetFormViewクラスで参照する必要があります。

以下の例では、シングルトンクラスインスタンスがすぐに作成され、window.my_custom_widget_formという名前で保存されます。 したがって、フォームを2回目に開くとインスタンスが再作成されます。

JavaScriptクラスはviewsディレクトリに配置する必要があります。

views/widget.edit.js.php example

<?php

use Modules\MyCustomWidget\Widget;

?>

window.my_custom_widget_form = new class {

    init({color_palette}) {
        colorPalette.setThemeColors(color_palette);

        for (const colorpicker of jQuery('.<?= ZBX_STYLE_COLOR_PICKER ?> input')) {
            jQuery(colorpicker).colorpicker();
        }

        const overlay = overlays_stack.getById('widget_properties');

        for (const event of ['overlay.reload', 'overlay.close']) {
            overlay.$dialogue[0].addEventListener(event, () => { jQuery.colorpicker('hide'); });
        }
    }
};

CWidgetField

CWidgetField クラスは、すべてのフォームフィールドクラス(CWidgetFieldCheckBoxCWidgetFieldTextAreaCWidgetFieldRadioButtonList など)が継承する基底クラスです。
CWidgetField を拡張するクラスは、ウィジェット設定値の受信、保存、および検証を担当します。

以下の CWidgetField クラスが利用できます。

CWidgetField class Database field type Description
CWidgetFieldCheckBox int32 単一のチェックボックス。
CWidgetFieldCheckBoxList array of int32 1つの設定フィールド内に複数のチェックボックス。
CWidgetFieldColor string 色選択フィールド。
CWidgetFieldColumnsList array of (multiple mixed) Top hosts ウィジェットで使用するための、許可された型のカスタム列を持つテーブルを保存します。
CWidgetFieldDatePicker string 日付選択フィールド。
CWidgetFieldIntegerBox int32 整数を入力するフィールド。最小値と最大値の設定に使用できます。
CWidgetFieldLatLng string カンマ区切りの緯度、経度、およびマップのズームレベルを入力できるテキストボックス。
CWidgetFieldMultiSelect - 複数選択フィールドの基底クラスで、すべての CWidgetFieldMultiSelect* クラスによって拡張されます。
CWidgetFieldMultiSelectAction ID Alerts → Actions で定義されたアクション一覧からアクションを選択する複数選択フィールド。
CWidgetFieldMultiSelectGraph ID カスタムグラフを選択する複数選択フィールド。
CWidgetFieldMultiSelectGraphPrototype ID カスタムグラフのプロトタイプを選択する複数選択フィールド。
CWidgetFieldMultiSelectGroup ID ホストグループを選択する複数選択フィールド。
CWidgetFieldMultiSelectHost ID ホストを選択する複数選択フィールド。
CWidgetFieldMultiSelectItem ID アイテムを選択する複数選択フィールド。
CWidgetFieldMultiSelectItemPrototype ID アイテムのプロトタイプを選択する複数選択フィールド。
CWidgetFieldMultiSelectMap ID マップを選択する複数選択フィールド。
CWidgetFieldMultiSelectMediaType ID メディアタイプを選択する複数選択フィールド。
CWidgetFieldMultiSelectOverrideHost ID ダッシュボードまたは別のウィジェットからホストのデータソースを選択する複数選択フィールド。
CWidgetFieldMultiSelectService ID サービスを選択する複数選択フィールド。
CWidgetFieldMultiSelectSla ID SLAを選択する複数選択フィールド。
CWidgetFieldMultiSelectUser ID ユーザーを選択する複数選択フィールド。
CWidgetFieldNavTree array of (multiple mixed) Map navigation tree ウィジェットで使用するための、マップのナビゲーションツリー構造を保存します。
CWidgetFieldNumericBox string 浮動小数点数を入力するフィールド。
CWidgetFieldPatternSelect - パターン選択フィールドの基底クラスで、すべての CWidgetPatternSelect* クラスによって拡張されます。
CWidgetFieldPatternSelectHost string ホストを選択する複数選択フィールド。ホスト名パターンをサポートします。
CWidgetFieldPatternSelectItem string アイテムを選択する複数選択フィールド。アイテム名パターンをサポートします。
CWidgetFieldRadioButtonList int32 1つ以上のラジオボタンで構成されるラジオボタングループ。
CWidgetFieldRangeControl int32 整数型の値を選択するスライダー。
CWidgetFieldReference string ダッシュボード上でこのウィジェットの一意な識別子を保存します。ウィジェット間通信に使用されます。
CWidgetFieldSelect int32 ドロップダウン選択ボックス。
CWidgetFieldSeverities array of int32 トリガーの深刻度があらかじめ設定された CWidgetFieldCheckBoxList
CWidgetFieldTags array of (string, int32, string) 1つ以上のタグフィルタ行を設定できます。
CWidgetFieldTextArea string 複数行テキストを入力するためのテキストエリア。
CWidgetFieldTextBox string 1行テキストを入力するためのテキストボックス。
CWidgetFieldThresholds array of (string, string) 色と数値のペアを設定できます。
CWidgetFieldTimePeriod array of string 期間を選択するフィールド。
CWidgetFieldTimeZone string タイムゾーンのドロップダウン。
CWidgetFieldUrl string URLを入力できるテキストボックス。

int32 フィールドの最大長は 10 文字、ID フィールドは 20 文字、string フィールドは 2048 文字です。
複合型(例: array of (string, int32, string))では、制限は各要素ごとに個別に適用されます。
フィールド固有の長さ制限は、setMaxLength() などのメソッドを使用して設定できます。