MultiBlogを利用する際に、集約した情報を出力させたい時

MT4にはひとつのMTで複数のブログ(サイト)をまとめて扱える機能であるMultiBlogが備わってます。
(MT3にもあるけどそっちは以前に個人的に解決させちゃったんでMT4に絞ってのエントリー)

それで、あるお方が「トリガー設定してもリビルド反映されなくってうーむ」と唸っていたので、そういや3.3の頃同じ事で悩んでた時期もありました。。。みたいな事が浮上してきたので、それならバージョンも上がった事だし、MT4でも試してみる事にしました。

しかし「試す」といってもたくさんのブログを用意するまではいかないもんでその辺りがちとアレな感じですが。

MultiBlogについては以下。
MultiBlog を利用したポータルブログの作成 | Movable Type 4 ドキュメント

改めて眺めてみるといろいろ変わってるなぁ。すごいMT4。
MultiBlogとはいっても基本は変わってない。。。ハズ?

複数サイトのエントリーをひとつのFeedで

ブログA,ブログB,ブログC・・・みたいにサイトを複数立てていて、その全てのブログのエントリー情報をひとつのFeedでまとめて配信したい場合を例にしてみます。
ここではそして、中核となるブログをブログ・ゼロと名づけてみて進行。

ブログ・ゼロ(ここの階層でFeed配信)

┣━ブログA

┣━ブログB

┣━ブログC

全てのブログでのエントリー情報を、ブログ・ゼロの階層のFeedによりまとめて配信してます。
ここで、MultiBlogの設定で行えるリビルドのトリガーがスマートに働いてる人は問題ないです。

取り上げる点は、
『例えば、ブログAに新規のエントリーが行われた場合に、ブログ・ゼロのインデックスがリビルドされるように設定しており、かつ、ブログ・ゼロのFeed用テンプレートに対して
「インデックステンプレートを再構築するとき、このテンプレートも再構築する」チェックを入れてはいるけれども、ブログ・ゼロのFeed用テンプレが再構築されない」
症状についてです。

これって仕様なんでしょうか?再構築されるのはあくまでメイン・インデックスのみ?
とか疑問は湧いてるんですが、動かないものは仕方がないから解決策へ。

本来なら順序立てるんですが、ちょっと自分でもまとめながら書いてるんで以下より説明は前後します。

Feedの出力先

例えばブログAに新規投稿を行った際には、そのブログAにあるFeed用テンプレートは再構築されます。(再構築チェック入れてる事を前提で)
ブログBの場合やブログCも同様。

という事は、ブログ・ゼロに存在するFeedが、ブログAの投稿時にリビルドされるようにするには、言い換えればブログAのFeedをブログ・ゼロのFeedにしてしまえば良い、って事になります。

なので、ブログAのFeedの出力先を、ブログ・ゼロのFeedの出力先にしてしまいます。
Feed用テンプレートの出力先をサーバ・パスで
「/virtual/username/public_html/feed_filename.xml」
こんな風に記述。
ブログの上の階層へ出力させるのに相対パスが使えるならそれでも良いとは思います。
とにかく、ブログ・ゼロのFeedの出力先とブログAの出力先を同じにすること。

これで、再構築トリガーに関係無く、配信されてるFeedはブログのエントリーの度に再構築される事になりますた。

Feedの内容

このままではFeedの内容が、色んなブログのエントリー内容をまとめては配信してくれません。
ブログ・ゼロのFeedは確かにリビルドされるけど、その度に

  1. ブログAのみのエントリー配信
  2. ブログBのみのエントリー配信
  3. ブログ~の・・・・・

とどんどん上書きされちゃうので。
このままじゃいかんのでMultiBlogを用いて、Feed用テンプレートの内容を修正。

multiblog_a.txt

しかしこの内容を、仮に全部のブログに行ったとしても、内容上部のBlogNameとかBlogDescriptionも、再構築されるブログを基準に書き換えられてしまうので、それもまた困り者です。

なので、配信情報(ブログ名とかLastUpdateとか)は保ったまま、配信される内容のみを書き換えられるように変更。
(たぶん普段は)あまり使われる事のないグローバルテンプレートを持ち出してみます。
「システムメニュー⇒グローバルテンプレート⇒モジュールテンプレートを作成」

  • テンプレート名⇒module_common_feed
  • テンプレート内容⇒multiblog_b.txt
  • 出力ファイル名⇒好きなように.xml

それぞれのブログのFeed用テンプレートの内容をまっさらにして、以下の1文だけ記述して読み込ませます。

<$mt:Include module="module_common_feed"$>

ここまでやって、ブログAにしろブログBにしろ、そのFeedはエントリーの度に書き換えられるけれども、出力内容は調整したグローバルテンプレート内容に沿いつつ、みんな同じ場所に出力(ブログ・ゼロのFeed出力URL)される、って寸法になります。

なるんですが、マルチブログを用いて、複数ブログのエントリーを時系列順に並び替えた上で最新の○件を表示させる、って部分が自信ないです。
むしろ恐らく出来てなかったりするかもです。

色んなパターンやってたら混乱してわかんなくなりました。。。すんません(´+ω+`)

他の方法

使うとしたらサイト内トラックバック。
ブログ・ゼロをマスターとして、ブログAやブログBにエントリー入った時には更新Ping飛ばしてリビルドさせる方法。

むしろこっちをやった方が良いのかなー?とか思ったり思わなかったり。

まとめ

  1. Feedを配信するひとつのマスター・ブログを用意する
  2. マスター・ブログの出力Feed内容をMultiBlogで調節する
  3. 調節したFeed内容はひとつにまとめる
  4. ひとつにまとめたFeed内容を他のブログのFeed内容に用いる
  5. 他のブログのFeed出力URLをマスターと同じにする

こんな感じになるでしょうか。
もっとスマートな方法があるとは思うんですが、今の自分にはこれが精一杯ですね。。。

ちなみに、Feed内容を統一させる方法には、テンプレートの「ファイルへのリンク」を用いても良いです。
この「ファイルへのリンク」に書くパスを全部同じにしておけば、グローバルテンプレートを用いるのと同じ事になりますです。

参考

MultiBlog 機能を利用したテンプレートのカスタマイズ | Movable Type 4 ドキュメント
グローバルテンプレート | Movable Type 4 ドキュメント
テンプレートの作成・編集 | Movable Type 4 ドキュメント

【追記】

そこはかとなくMultiBlogEntriesってタグの存在を思い出したりしたんですが、これってMT4では廃止されてますよね?

その代わりにきっと mode モディファイア なるものが付いたと思うし。
でもこれ、lastnやsortさせる場合になんか混乱するんですがその混乱する説明になると言葉が詰まるんで、やっぱり理解力のない自分だけなんだろうな。。。と少しだけヘコむ件。

▲ to Top

トラックバック(0)

▲ to Top