管理画面カスタム要素


管理画面のテンプレートで使えるカスタム要素(Web Components)です。タグを書くだけで、タグ選択・カテゴリー選択・ユニットエディター・ブロックエディターなどの UI が初期化されます。

対応バージョン: Ver. 3.2.29 以降

特徴

  • 後から挿入された要素も自動的に初期化されます。 カスタムフィールドの行追加、タブの切り替え、ダイアログの表示など、どの経路で挿入されても動作します。初期化用の JavaScript を呼ぶ必要はありません。
  • JavaScript から値を読み書きできます。 el.value と change イベントを持つ要素は、標準のフォーム要素と同じ感覚で扱えます。

要素の一覧

要素用途値の読み書きイベント
<acms-tag-select>タグの選択el.value(カンマ区切りのタグ名)change
<acms-category-select>カテゴリーの選択el.value(カテゴリー ID)change
<acms-sub-category-select>サブカテゴリーの選択el.value(カンマ区切りの ID)change
<acms-related-entry-editor>関連エントリーの編集el.value(エントリーの配列)change
<acms-unit-editor>ユニットエディターel.editor(読み取りのみ)change
<acms-block-editor>ブロックエディターel.editor(読み取りのみ)change
<acms-unit-inplace-editor>ユニットのインライン編集なしなし
<acms-unit-config-editor>編集設定のユニット設定なしなし
<acms-block-editor-menu-type-select>編集設定のブロック type 選択——

el.editor は、エディターのインスタンスです。マウントが完了する前は null になります。

基本の使い方

値は、target 属性で指定した <input> に同期されます。target を省略した場合は、要素の中に置いた最初の <input type="hidden"> に同期されます。

<form>
  <acms-tag-select default-value="CMS,JavaScript">
    <input type="hidden" name="tag" value="CMS,JavaScript">
  </acms-tag-select>
</form>

値を読み書きする

const tagSelect = document.querySelector('acms-tag-select');

// 読む
console.log(tagSelect.value); // 'CMS,JavaScript'

// 書く
tagSelect.value = 'CMS,JavaScript,a-blog cms';

// 変更を受け取る
tagSelect.addEventListener('change', (event) => {
  console.log(event.target.value);
});

disabled 属性(プロパティ)で入力を無効にできます。<acms-tag-select> / <acms-category-select> / <acms-sub-category-select> で使えます。

tagSelect.disabled = true;

属性

属性は要素が画面に追加された時点で一度だけ読み込まれます。後から属性を変えても再初期化はされません(disabled を除く)。

<acms-tag-select>

属性説明
target値を同期する input の CSS セレクタ(省略時は要素内の最初の hidden input)
default-value初期値(カンマ区切りのタグ名)
input-id入力欄に付ける id
is-disabledtrue で無効化
form / nameフォームとの関連付け
menu-portal-target選択メニューの描画先(CSS セレクタ)

<acms-category-select>

属性説明
target値を同期する input の CSS セレクタ(省略時は要素内の最初の hidden input)
default-value初期値(カテゴリー ID)
narrow-downtrue で、候補をコンフィグ entry_edit_category_filter で指定したカテゴリーに絞り込む(既定 false)
no-optiontrue で、先頭に「未選択」の選択肢(値は 0)を足す(既定 false)
mt-optiontrue で、先頭に値が -1 の選択肢を足す(既定 false)
is-creatabletrue で、その場でカテゴリーを新規作成できる(既定 false)
is-clearablefalse で、選択を解除するボタンを出さない(既定 true)
input-id入力欄に付ける id
is-disabledtrue で無効化
form / nameフォームとの関連付け
menu-portal-target選択メニューの描画先(CSS セレクタ)

<acms-sub-category-select>

属性説明
target値を同期する input の CSS セレクタ(省略時は要素内の最初の hidden input)
default-value初期値(カンマ区切りのサブカテゴリー ID)
default-labeldefault-value の各 ID に対応する表示名(カンマ区切り)
category-id連動するカテゴリー input の CSS セレクタ(既定 [name=category_id])。メインのカテゴリーが変わると、候補が切り替わる
limit選択できる数の上限。超えると警告を表示する
input-id入力欄に付ける id
is-disabledtrue で無効化
form / nameフォームとの関連付け
menu-portal-target選択メニューの描画先(CSS セレクタ)

<acms-related-entry-editor>

属性説明
type関連エントリーの種類名。フォームで送る値の名前にも使われる
module-id候補の検索に使うモジュール ID
ctx候補の検索に渡すコンテキスト(モジュールの ctx 指定と同じ書き方)
thumbnail候補にサムネイルを表示するかの指定(検索のテンプレートに渡す値)
max-item選べる件数の上限(0 なら制限なし)
json-id初期値の JSON を持つ <script> 要素の id(必須)
data-title表の見出し

<acms-unit-editor>

属性説明
default-valueユニットの JSON
settings設定の JSON

<acms-block-editor>

属性説明
settings設定の JSON

内容(HTML)は、属性ではなく、要素の中に置いた <input type="hidden"> の値から読み込まれ、編集のたびに同じ input に書き戻されます。hidden input が無いと初期化に失敗します。

<acms-block-editor settings='{"features":{"textItalic":false}}'>
  <input type="hidden" name="body" value="&lt;p&gt;本文&lt;/p&gt;">
</acms-block-editor>

<acms-unit-inplace-editor>

属性説明
default-valueユニットの JSON
settings設定の JSON
unit-id編集するユニットの ID

<acms-unit-config-editor>

属性説明
default-valueユニット構成の JSON
settings設定の JSON
label設定欄の見出し
data-id設定欄の識別子

共通の属性

属性説明
root-class画面に描画される本体の要素に付ける class

これらの要素は自身の表示ボックスを持たない(display: contents)ため、要素自身に class を付けても見た目には反映されません。class を付けたいときは、root-class を使います。

.js-block-editor を使っている場合

カスタムフィールド・カスタムユニットで .js-block-editor を使ったマークアップは、そのまま動作します。書き換えは不要です(内部で <acms-block-editor> に置き換えられます)。

新しく書く場合は <acms-block-editor> を直接使ってください。置き換えの処理を経由しないため、初期化が少し早くなります。

関連ページ