設定

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

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 の例

<?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 クラスは、すべてのフォームフィールドクラス(CWidgetFieldCheckBox、CWidgetFieldTextArea、CWidgetFieldRadioButtonList など)が継承する基底クラスです。
CWidgetField を拡張するクラスは、ウィジェット設定値の受け取り、保存、検証を担当します。

以下の CWidgetField クラスを使用できます。

CWidgetField クラス データベースフィールドタイプ 説明
CWidgetFieldCheckBox int32 単一のチェックボックス。
CWidgetFieldCheckBoxList array of int32 1つの設定フィールドに含まれる複数のチェックボックス。
CWidgetFieldColor string 色の選択フィールド。
CWidgetFieldDatePicker string 日付の選択フィールド。
CWidgetFieldIntegerBox int32 整数を入力するフィールド。最小値と最大値を設定できます。
CWidgetFieldLatLng string 緯度、経度、地図のズームレベルをカンマ区切りで入力するテキストボックス。
CWidgetFieldMultiSelect - マルチセレクトフィールドの基底クラス。すべての CWidgetFieldMultiSelect* クラスが拡張します。
CWidgetFieldMultiSelectAction ID アラート > アクション で定義されたアクションの一覧からアクションを選択するマルチセレクトフィールド。
CWidgetFieldMultiSelectGraph ID カスタムグラフを選択するマルチセレクトフィールド。
CWidgetFieldMultiSelectGraphPrototype ID カスタムグラフのプロトタイプを選択するマルチセレクトフィールド。
CWidgetFieldMultiSelectGroup ID ホストグループを選択するマルチセレクトフィールド。
CWidgetFieldMultiSelectHost ID ホストを選択するマルチセレクトフィールド。
CWidgetFieldMultiSelectHostInventory array of int32 ホストインベントリフィールドを選択するマルチセレクトフィールド。
CWidgetFieldMultiSelectItem ID アイテムを選択するマルチセレクトフィールド。
CWidgetFieldMultiSelectItemPrototype ID アイテムのプロトタイプを選択するマルチセレクトフィールド。
CWidgetFieldMultiSelectMap ID マップを選択するマルチセレクトフィールド。
CWidgetFieldMultiSelectMediaType ID メディアタイプを選択するマルチセレクトフィールド。
CWidgetFieldMultiSelectOverrideHost ID ダッシュボードまたは別のウィジェットからホストのデータソースを選択するマルチセレクトフィールド。
CWidgetFieldMultiSelectService ID サービスを選択するマルチセレクトフィールド。
CWidgetFieldMultiSelectSla ID SLAを選択するマルチセレクトフィールド。
CWidgetFieldMultiSelectUser ID ユーザーを選択するマルチセレクトフィールド。
CWidgetFieldNavTree array of (multiple mixed) マップナビゲーションツリー ウィジェットで使用するマップのナビゲーションツリー構造を保存します。
CWidgetFieldNumericBox string 浮動小数点数を入力するフィールド。
CWidgetFieldPatternSelect - パターン選択フィールドの基底クラス。すべての CWidgetPatternSelect* クラスが拡張します。
CWidgetFieldPatternSelectHost string ホストを選択するマルチセレクトフィールド。ホスト名のパターンをサポートします。
CWidgetFieldPatternSelectItem string アイテムを選択するマルチセレクトフィールド。アイテム名のパターンをサポートします。
CWidgetFieldRadioButtonList int32 1つ以上のラジオボタンで構成されるラジオボタングループ。
CWidgetFieldRangeControl int32 整数値を選択するスライダー。
CWidgetFieldReference string ダッシュボード上のこのウィジェットの一意の識別子を保存します。ウィジェット間の通信に使用されます。
CWidgetFieldSelect int32 ドロップダウン選択ボックス。
CWidgetFieldSeverities array of int32 トリガーの深刻度があらかじめ設定された CWidgetFieldCheckBoxList。
CWidgetFieldSparkline array of (multiple mixed) スパークラインチャートを設定できます。
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 フィールドは65535文字です。
複合型(例: array of (string, int32, string))の場合、制限は各要素に個別に適用されます。
フィールド固有の長さ制限は、setMaxLength() などのメソッドを使用して設定できます。