一部のモジュールを統一化してみた
MT5になって以降,裏でちまちまと過去の日誌の別ブログ化と,並行してブログの方に突っ込まれていたウェブページをウェブサイトのウェブページとして移動する作業を行っていたのですが...
なんかタイムリー(そう?)な記事が小粋空間にアップされてました.
実をいいますと,MT5にするときにネックとなっていたのが「他のブログのコンテキストを持って行きたい時はどうすれば良いのか」ということだったのですが,この記事を見て納得.つか,<MTBlogs>ブロックタグなんてあったのね...ってな話なのですが(←気付け)
んで,早速各ブログ内で共通化出来そうなモジュールテンプレートを探してみたところ,以下の3つが浮かび上がりました.
- ヘッダー
- グローバルナビゲーション
- フッター
ただし,フッターについては掲示板(掲示板用プロフィールページを含む)とそれ以外とで微妙に違っていたりしますので,必ずしも全ブログに共通するって訳でもないんですが(^^;
しかも,うちの場合はmt.Vicunaのテンプレート用にかなりカスタマイズしていたりするので,特にグローバルナビゲーションのカレント判定部分で悩んだ感があります.ということで覚書します.
モジューの共通化の基本
もともと各ブログのモジュールテンプレートにあるものを,ウェブサイトテンプレートのモジュールテンプレートにそっくり移し替えるだけですが,ここで気を付けたいのが「ウェブサイトのモジュールテンプレートなので,<MTBlog>系のファンクションタグは<MTBlogs>の中で使うか,もしくは<MTWebsite>系のファンクションタグに置き換える」という作業が必要になります.
mt.Vicunaのヘッダーテンプレートには<MTBlog>系のファンクションタグが4つほどありますので,以下のように変えておくと良いと思います(変更部分を強調).
<div id="header"> <p class="siteName"><a href="<$MTWebsiteURL$>"><$MTWebsiteName encode_html="1"$></a></p> <MTIfNonEmpty tag="MTWebsiteDescription"><p class="description"><$MTWebsiteDescription remove_html="1"$></p></MTIfNonEmpty> <$MTInclude module="グローバルナビゲーション"$> </div> <!-- end div#header -->
グローバルナビゲーションにおけるカレント表示
キモはここだったりするのですが(苦笑),もともとブログ内にウェブページがある仕様のテンプレートなので,ウェブサイトだとブログのリンク(アーカイブ等)自体が表示されないのと,カレントの判定をどのように行うのかが問題です.
ブログが幾つもあって...というケースはmtVicunaでも想定していないはずなので,特にカレント判定をどうするかは非常に悩みました.うちの場合はブログが3つ(うち1つはリンク表示不要),またトップページは1つ目のブログのトップページを兼ねていますので,一筋縄ではいかない...ということはわかっていたのですが(^^;
んで,結局はこんなテンプレートとなりました.
<MTIgnore>
@globalNavi タグをつけたウェブページが項目に追加されます。
</MTIgnore>
<ul id="globalNavi">
<li<MTIf name="wstype" eq="wstop"> class="current"</MTIf>><a href="<$MTWebsiteURL$>" rel="nofollow">Home</a></li>
<MTIgnore><li<MTIf name="tempName" like="index_archive|index_yarchive|individual_entry"> class="current"</MTIf>><a href="<$MTLink template="アーカイブインデックス"$>">Archives</a></li></MTIgnore>
<MTPages tag="@globalNavi" sort_by="title">
<MTSetVarBlock name="keyw"><$MTEntryKeywords$></MTSetVarBlock>
<li<MTIf name="wpkey" eq="$keyw"> class="current"</MTIf>><a href="<$MTPagePermalink$>" title="<$MTPageTitle encode_html="1"$>"><$MTEntryKeyWords$></a></li>
</MTPages>
<MTBlogs blog_ids="2">
<li<MTIf name="wstype" eq="forum"> class="current"</MTIf>><a href="<$MTBlogURL$>" title="掲示板"><$MTBlogName$></a></li>
</MTBlogs>
<li><a href="https://kita2.net/kitamican/" title="きたみかん">きたみかん</a></li>
</ul>
とりあえず,変更した部分を強調表示しておいたんだけど,ひとつずつ説明しますね.
まず上半分(及び下の方)の部分だけど,元はtempNameがindex_mainである場合にカレントとなるようにしていたんだけど,他のブログのトップページもmtVicunaなもんだから(苦笑),他のトップページの時もカレントとなってしまうため,1つ目のブログのトップページのみと,掲示板の全てにwstypeという変数を設置して,トップページの場合はwstop,掲示板の場合はforumを格納するようにしました.これなら間違いない...と思ったもので(^^;
ちなみに下の方の<MTBlogs>部分ですが,どうせ掲示板用の表示のみなので,ブログIDを決め打ちしてしまっています.
んで,すっ飛ばしていた真ん中の部分ですけど,うちのプロフィールページってファイルが2つ以上あるので(ほら「100の質問に答える」ってあれ(ぉ),ウェブページの先頭でキーワードを変数にし,判定部分でエントリーのキーワードと照合して,一致する場合はカレントとなるようにしました.実はこれ苦肉の策だったんだけど一応うまく行っているようです(^^;
やり残していたフッター
...これについては,テンプレートを移すのみで全く変更点なしでした(^^;
ブログでの共有化
これについては,一応ソースを書いておきますけど,小粋空間で書いているとおりだったりします.
<MTBlogParentWebsite> <$MTWebsiteID setvar="wsid"$> <$MTInclude blog_id="$wsid" module="ヘッダー"$> </MTBlogParentWebsite>
なお,<$MTWebsiteID$>をわざわざ変数化しなくとも...と思うかもしれないけど(俺も最初はそう思っていた),ウェブサイトIDとブログIDには優先順位がなく全くといっていいほど同列でして,その結果グローバルテンプレートの方を読みに行ってしまうことが多々ありました.
なので,面倒と思うかもしれないけどきっちり変数化しておいて,インクルードの際にID番号を指定するようにした方が確実です.
なお,ウェブサイトやブログをまたいでも,そのテンプレートに設定しているサーバーサイドインクルードやモジュールのキャッシュ機能の設定は有効です.うちもウェブサイトのウェブページの方でメインブログのユーティリティを読み込んでいますが,FTP上のファイルで確認したところ,しっかりPHPのコードが記述されていましたので(^^).

Comments:0