MTAppjQuery v3 で大量のコンテンツデータ、コンテンツフィールドを作ると管理画面が重くなる場合がありますが、設定の変更と user.js への追記で対応できます。
MTAppjQuery v3 を利用している環境で、コンテンツタイプのコンテンツフィールドの数が大量になると、管理画面が著しく遅くなる場合があります。
この問題への対処法をご紹介します。
MTAppjQuery v3 では、mtappVars.contentTypes
というプロパティに全てのサイトのコンテンツタイプの情報がセットされます。
コンテンツタイプやコンテンツフィールドの数が増えると、このデータのロードに時間がかかってしまい、それが管理画面が遅くなる原因です。
この機能は、各サイトの MTAppjQuery プラグインの設定において、「利用データの設定 > 全てのコンテンツタイプの情報を利用する」を 無効
にすることで停止することができます。
ただ、MTAppjQuery の中の下記のメソッドでは、この mtappVars.contentTypes
のデータを利用しているので、これらのメソッドを利用している場合は、この機能を無効化すると不具合が発生してしまいます。
これらのメソッドを利用している場合は、下記の手順で user.js に手動で情報を加えることで不具合を防ぐことができます。
上記の「全てのコンテンツタイプの情報を利用する」の設定を無効にする前に、そのサイトの管理画面を開いた状態で、ブラウザの開発者ツールのコンソールに以下のコードをペーストして実行します(不要なプロパティを削除する処理が入っています)。
mtappVars.contentTypes.forEach((contentType) => {
delete contentType.unique_id;
delete contentType.description;
if (Array.isArray(contentType.fields)) {
contentType.fields.forEach((field) => {
delete field.unique_id;
delete field.description;
if (typeof field.options === 'object') {
for (let option in field.options) {
if (option !== 'category_set') {
delete field.options[option];
}
}
}
});
}
});
console.log(JSON.stringify(mtappVars.contentTypes));
すると現状の mtappVars.contentTypes
の内容が表示されるので、その内容をコピーします。Chrome の場合は「copy」ボタンをクリックしてコピーできます。
上でコピーした内容を下記のように mtappVars.contentTypes =
の後に続けて貼り付けます。貼り付けた文字列の先頭と最後にシングルクオーテーションがある場合は削除します。
mtappVars.contentTypes = [{"data_label":null,"description":"...省略...","fields":[{"description":"","id":1,"label":"Title","options":{}}],"id":334,"name":"サンプルサイトX","site_id":111}];
// 以下のように最初と最後のシングルクオーテーションが残らないように注意
// mtappVars.contentTypes = '[{"data_label":null,"description":"...省略...","fields":[{"description":"","id":1,"label":"Title","options":{}}],"id":334,"name":"サンプルサイトX","site_id":111}]';
これで不具合が発生ぜずに前掲のメソッドも引き続き利用することができます。
user.js がサイトごとに分かれているときは、上記の方法で管理するのは手間です。そこで、新規に mt-static/support/MTAppjQuery/contenttypes.js というファイルを作成し、上記の内容を貼り付けます。
そして、システムのMTAppjQueryプラグインの設定の「自由テキストエリア > head の開始タグの直後」に下記のテンプレートを貼り付けて保存します(「システムの管理画面に適用する設定」というセクションにも同じ設定項目がありますが、そちらではありませんのでご注意ください)。
<script defer type="text/javascript" src="<mt:StaticWebPath remove_host="1" />support/MTAppjQuery/contenttypes.js"></script>
上記の方法は mtappVars.contentTypes
の内容が固定されたものになってしまいますので、コンテンツタイプやコンテンツフィールドを追加した時は user.js の mtappVars.contentTypes
の内容も改めて更新する必要があります。
また、本番環境、開発環境など、環境が複数ある場合はそれぞれの環境で作業する必要があります。
今回紹介した対処法では制作者様にお手数をおかけしてしまいますので、今後のアップデートの際の課題とさせていただき、追って改善していきたいと思います。