コンテンツデータの管理画面カスタマイズを少し便利にする方法

Movable Type Advent Calendar 2020 - Adventar 8日目の投稿になります。

突然ですが皆さんはMT7の管理画面のカスタマイズをしていますか?
私はMTAppjQueryと独自のライブラリを使って結構ガッツリやっています。

MT7になって導入されたコンテンツタイプのおかげで「記事」を「商品」と読み替えるとか、並び順をJavaScriptで制御するとかそういうことは必要無くなってきました。

そんな中でも標準のコンテンツフィールドでは機能が足りなかったり、案件の運用に適した管理画面にするための細かなカスタマイズはどうしても必要になってきます。

そんなコンテンツフィールドに細かなカスマイズをするときに困るのが、コンテンツフィールドにはカスタムフィールドと異なり「ベースネーム」が無いことです。(何でカテゴリにもあるのに無いんでしょうね…)

標準的な書き方

特定のコンテンツフィールドにJavaScriptを適用する場合、以下のような書き方になります。 このidは自動採番される数値のためフィールドを作るまで推測ができません。 また、後から見返したときにどのフィールドのカスタマイズなのかが一目で分かりません。

$("#content-field-3").MTAppXXX();

新しい書き方

今日紹介するのはそんな悩みの中で生まれたコードになります。 フィールド名の変更に弱いという問題はありますが、直感的に書けるのと可読性はとても良いのでもしよろしければお試しください。Let's Enjoy!

if ( parseInt(mtappVars.version) >= 7 ) {
	if ( mtappVars.screen_id == "edit-content-type-data" ) {
		var arr = [];

		$(".content-field").each(function() {
			var label = $(this).parent().find("label").text().replace("必須","").trim();
			var $field = $(this);

			arr[label] = $field;
		});

		contentDataFields = arr;
	}

	// 以下のような記述でラベルからコンテンツフィールドを参照できる
	// 「プロフィール」というコンテンツフィールドの場合
	contentDataFields["プロフィール"].MTAppXXX();
}