「MTAppjQueryの設定をWEBサイト内のBlogに一括で適用させる。 - 継続は力なり!なのか?」の記事にも書かれていますが、MTAppjQuery でウェブサイト内のブログに同じカスタマイズをまとめて適用したいという需要は結構ありますね。
この記事で紹介されている方法もその一つですが、他にもいくつか方法がありますので、それらの方法を紹介します。
1. システムメニューのプラグインの設定を利用する
MTAppjQuery v1.4.0 から、システムメニューのプラグインの設定で、システム全体に適用できるフリーエリアが利用できるようになりました(Released v1.4.0)。このフリーエリアというのは、管理画面のソースの中のいくつかの場所にテキストエリアに書いた内容をそのまま挿入できる機能です。これを利用すれば、システム全体に一括でカスタマイズを適用することができます。
1-1. ウェブサイトIDで分岐する
今回やりたいことは「ウェブサイト内のブログにまとめて適用」させることです。その場合「各ブログの親のウェブサイト ID が N の場合はこの user.js 等を読みこむ」というように出来れば良いことになります。
管理画面では、親のウェブサイト ID は <mt:Var name="curr_website_id">
で取得できます。ウェブサイトの管理画面にいるときはこの変数にそのウェブサイトの ID が入ります。ちなみに、 <mt:Var name="mtappVars" key="curr_website_id">
でも取得できます。
さて、例えば下記のような構成のウェブサイト/ブログがあったとします。
Website 1 [ID:1]
├── Blog 1-1 [ID:2]
├── Blog 1-2 [ID:3]
└── Blog 1-3 [ID:4]
Website 2 [ID:5]
├── Blog 2-1 [ID:6]
├── Blog 2-2 [ID:7]
└── Blog 2-3 [ID:8]
この構成で Website 1 とその配下の Blog にカスタマイズを適用させる場合の条件式は下記のようになります。
<mt:If name="curr_website_id" eq="1">
カスタマイズ
</mt:If>
ちなみに、このブログ ID が 2 と 3 のブログに適用させたい、といった場合は下記のようにすればOKです。
<mt:If name="blog_id" like="^(2|3)$">
カスタマイズ
</mt:If>
このようにウェブサイト ID で条件分岐して、その中に適用したい内容を書いていけばOKです。
1-2. 親ウェブサイトの user.js を読み込む
親ウェブサイトの user.js を、そのウェブサイトと子ブログ全部に読み込ませたい場合は下記のようになります。
<mt:If name="curr_website_id" eq="1">
<mt:Link template="user.js" blog_id="$curr_website_id">
</mt:If>
1-3. 親ウェブサイトのテンプレートモジュールを読み込む
親ウェブサイトのテンプレートモジュールを読み込ませたい場合は下記のようになります。
<mt:If name="curr_website_id" eq="1">
<mt:Include module="mdl-user.js" blog_id="$curr_website_id">
</mt:If>
なお、このフリーエリアに書いた内容はそのまま管理画面に挿入されるので、JavaScript や CSS を書く場合は、モジュールもしくはフリーエリアの方に <script>
や <style>
タグで囲むようにする必要があります。
2. 各ブログの user.js で親ウェブサイトのテンプレートモジュールを読み込む
この方法は「ウェブサイト内のブログすべてに共通の部分もあるけど個別の部分もある」というときに役立ちます。
この方法は、親ウェブサイトでテンプレートモジュールを作り、それを user.js で MTInclude すればOKです。
<mt:WebsiteID setvar="website_id">
<mt:Include module="mdl-user.js" blog_id="$website_id">
3. その他
他にもグローバルテンプレートモジュールに共通部分を作ったり、外部ファイル化してフリーエリアで読み込んだりといろいろ方法はありますのでお試しください。