一筋縄ではいかない~Movable Type(MT)のスタティックパブリッシングとダイナミックパブリッシングにおけるコードの読み込まれ方の違い~その4ー自分用覚書
August 31, 2012
表題とは直接関係ありませんが、昨日Movable Type(MT)5.2のベータ5が出たので、早速アップデートしました。
昨今、これまでスタティックパブリッシングのみでテーマの開発を進めていたものをダイナミックパブリッシングにも対応するようにしていますが、やはりダイナミックパブリッシングでだとコードの読み込まれ方がスタティックパブリッシングの時と少し異なるようで(そのパブリッシュのされ方で利用されるエンジンがPHPとPerlという違いがあるからなのかというのもあると思うのですが)、昨日つくづく、一筋縄ではいかないのぅ~、と思った次第でした。疲れて、夫に「ひとすじなわではいかないのぅ」としみじみ言ったところ、「ナワデワイカナイノゥ~」と、のほほん顔でリピートしていました。。私にとって夫は癒しの存在で、疲れたらハグーすると疲れが飛んでいきます。妊婦さんですか?と言わんばかりのあの大きなお腹を見ると、コロコロしていてとても幸せそうに見えるのですよねぇ。遠い目・・。
っと、スタティックではうまく行くので、微妙な違いというか、そういう部分なのですが、その「ズバリ!」な箇所を見つけるまでがとても時間がかかるのです。これが体力を消耗するというか。最近は、疲れたらiPadでハイウェイライダーなどと言うプラグインをダウンロードしたゲームで遊んでいるのですが、結構スリリングで、こちらの方がストレスになるというか、知らず知らずのうちに冷や汗をかきながら「This highway is my home ♪」とか(キャラクターが)言いながら、バイクでハイウェイを走りまくっています。ゲームとか、これまであまりした事ありませんでしたが、結構面白いですね。でも、時間の無駄だとも思ったり・・。
と、また脱線しましたが、少し前に同じコードは出来るだけ使いまわすようにしようと、テンプレート全体を大幅にいじったのですが、これがダイナミックパブリッシングにはあまり良くなかったようで・・(「くぅ~~~」という気分です)、と言うのが、静的パブリッシングの時でも、システムの箇所だけはダイナミックに動いていると思いますが、あれと同じような現象が発生している感じです。【後記】・・・と思ったのですが、症状としては確かに似ているのですが、少~しだけ違いました。どうもタグがおかしいような??
例えば、1つのサイトをウェブサイトとブログで構成しているとして、双方のシステムテンプレート配下に検索結果用のテンプレートがあり、ウェブサイトの方の検索結果用テンプレート1つでコードの一元化を図りましょう~としても駄目なのですよね。ウェブサイトから出力されているページ上から検索する場合と、ブログから出力されるページ上から検索する時とでは、それぞれ別のシステムの検索結果テンプレートが使われるので、たとえ同じコード内容で見栄えが同じであっても、コードの一元化はできず、ウェブサイトとブログの両方に、検索結果用のテンプレートが存在しないと、エラーになってしまいます。
また、検索結果ページのコンテンツの部分だけのコードをウェブサイトの方で一元化しようとする場合でも、ウェブサイトとブログの両方に、同じ内容の検索結果テンプレートがなければ駄目なので、例えば、とあるモジュールがウェブサイトの方にあるとします。これをウェブサイトの検索結果テンプレートでもブログの検索結果テンプレートでも使いたいとします。普通のスタティックパブリッシングで動く部分であれば、ウェブサイトの方で、そのモジュールをInclude、ブログの方では、ウェブサイトのそのモジュールをマルチブログでInclude、ですが、いくらスタティックパブリッシング環境のシステムテンプレートでも、システムだけはダイナミック(?)に扱われるようで、テンプレートの内容を同じものにしないとエラーが発生します。ですので、マルチブログを使う必要の無いウェブサイトの方でも、マルチブログを使ってウェブサイトのそのモジュールをIncludeするようにし、ブログと同じ書き方にします。
で、ここで、また出てくる問題があります。ウェブサイト側にあるモジュール。ウェブサイトからもブログからもマルチブログでIncludeされています。なので、このウェブサイト側に存在するモジュールは、ウェブサイト側で一元管理が出来ると思いきや、そうは簡単に問屋は卸してくれません!ブログ側にそのモジュールと同じ名前のモジュールがないと、エラーが発生するのです。上でも書きましたように、ブログ側の検索結果テンプレートには、マルチブログを使って、ウェブサイトのモジュールがIncludeされています。なのに、同じ名前のモジュールがブログの方にもないと、ダダをこねてエラー発生しちゃうぞ、なのです。ですので、ただこれだけの為にですが、ブログの方にも同じモジュール名のモジュールを作成し、そのモジュールの中身は、ウェブサイトのモジュールの内容をマルチブログでIncludeするという、入り組んだ構造になります。でも、これでエラーは発生しませんし、上記ではモジュールとしていますが、私の場合はウィジェットセットでウィジェットを使っており、これでだと、スタイルをいくつか作りたい場合、便利が良いです。
と、長くなりましたが、上記の例と似たようなことが、ダイナミックパブリッシング下でも起きているっぽいというのを昨日発見し、これからそれを検証していかなければ~なのでした。チャレンジは続く。。
【後記その1】検証しましたところ、システムのテンプレートの時に出会ったような症状でしたが、似て非なるもの(?)でした。たぶん、タグの不具合なのかな~?という感じがするのですが、よくわかりません。症状としては、ブログサイドで、マルチブログとしてIncludeされているウェブサイトのウィジェットセットですが、そのウィジェットセットとその配下のウィジェットの名前だけは読み込んでいるのですが、何故か、そのウィジェットの中身は、ブログサイドにある同名のウィジェットの中身を読み込んでいるのでした。なので、もしもブログサイドに、ウェブサイトサイドにあるウィジェットと同名のウィジェットがなければ何も表示されませんし、本来であれば表示されるべきウェブサイトの方のウィジェットの中身は全く表示されません。しかし、その中身が読み込まれているブログサイドにあるウィジェットをサイト上に表示するかしないかは、ウェブサイト側にあるウィジェットセットのウィジェットを利用可能にするかインストール済みにするかという具合になります。本来であれば、ブログサイドで、マルチブログとしてIncludeされているウェブサイトのウィジェットセットとウィジェットだけで全てが完結するはず・・スタティックパブリッシングの方では完結するので、この件をダイナミックパブリッシング下での不具合としてMTさんに報告してみたいと思います。
【後記その2】その後、MTWebsitesなどで囲んでいた箇所をMTMultiBlogに変更したらうまく行きました。この2つのタグの動作はマルチブログタグで似ているのですが、強さが少し違うのかもしれません?MTMultiBlogの方が強いのか??
【後記その3】MTさんへリポートした結果、タグの不具合だということがわかりました。なので、今後の新しいベータバージョンで良くなっていると思います。