Movable Type 備忘録

 テンプレートセットのアーカイブにも build_type を有効にする

  • Dec052008
  • Vote:
    http://bizcaz.com/archives/2008/12/05-233159.php
  • Categories: Customize
  • Tags:
  • Social Bookmark

こんばんわ^^

今日はメッチャおもしろいことがありました (●´∀`●)

わたしの職場近辺(神田界隈)では歩行者の信号を無視して横断するのが日常茶飯事です。
お昼に同僚とランチに出かけたときのことです。 その同僚は普段マイペースでおっとりな娘なのですが、信号を無視して横断しようとしたので別に車は来てなかったけど、間がさしたというか、思い立ったというか、「危ないっ!!」って叫んだらいつもの Slowly な同僚とは打って変わって機敏に危険を避けようとした同僚の潜在能力を垣間見ました (; ̄∇ ̄A

ところがビックリしたのは同僚だけではなかったようです。

反対側から横断してきた中年男性もビックリしたようで、必死の形相でやっぱり危険を回避!? しようとした反面、必死のあまりになぜか靴が脱げちゃったみたい。
一部始終みてたわたしはその様子がとってもおかしかったのですが、その場は必死に我慢して中年男性が通り過ぎたのを確認してから、あまりにも予想外の出来事だったので同僚にも再現して見せてあげました (●>∀<●) 靴が脱げるとこも忠実にね。

世の中不景気でイヤになっちゃいますが、こんなときこそ笑って何とかやり過ごしたいですね。
笑いをくれてありがとう (●´∀`●) & 悪気はなかったんです。ビックリさせてしまってごめんなさい。by bzbell

さて、今日はテンプレートセットのお話です。
テンプレートセットはご存知のように自分専用のテンプレートをカンタンに差し替えるための機能(プラグイン)ですが、build_type というものをご存知でしょうか。
build_type というのはインデックステンプレートで指定可能な、再構築オプションになります。

通常だとテンプレートセットからはインデックス・テンプレートでしか指定できないのですが、面倒くさがりなわたしはアーカイブ・テンプレートでも同様の指定を可能とするようカスタマイズしてみましたのでご紹介です。

テンプレートセットに build_type を追加

テンプレートセットの作り方などは以下のページを参考にして頂くとして、build_type を指定するには以下のように記述します。

インデックス・テンプレートでの build_type 指定例

  1. templates:
  2.   index:
  3.     index_template_id:
  4.       label: インデックス・テンプレート名称
  5.       outfile: index.php
  6.       rebuild_me: 1
  7.       build_type: 1

青字の 1 行を追加します。build_type の指定は以下の通りです。

  • 非公開:0
  • スタティック・パブリッシング( デフォルト ):1
  • 手動:2
  • ダイナミック・パブリッシング:3
  • 公開キュー:4

同様にアーカイブ・テンプレートの場合には以下のように追加します。

アーカイブ・テンプレートでの build_type 指定例

  1. templates:
  2.        :
  3.        :
  4.        :
  5.   individual:
  6.     entry:
  7.       label: Blog Entry
  8.     mappings:
  9.       entry_archive:
  10.         archive_type: Individual
  11.         preferred: 0
  12.         build_type: 1
  13.  
  14.   archive:
  15.     entry_listing:
  16.       label: Blog Entry Listing
  17.       mappings:
  18.         monthly:
  19.           archive_type: Monthly
  20.         category:
  21.           archive_type: Category
  22.         build_type: 3

青字の部分をそれぞれのアーカイブ・テンプレートに追加します。
以上でテンプレートセットとしての再構築オプションの指定は完了です。 後はこれから説明するカスタマイズを行うことで、毎回テンプレートセット変更の度に再構築オプションを変更する必要がなくなります。

アーカイブ・テンプレートでも build_type を有効にする

これから説明するカスタマイズは Movable Type 4.22、4.23 を元にしてます。それより以前のバージョンの場合にはその都度読み替えてください。

mt/lib/MT/Blog.pm ファイルを以下の手順で少しだけカスタマイズします。

  1. create_default_templates を検索

    mt/lib/MT/Blog.pm 内から create_default_templates というキーワードを探してください。具体的には以下のような場所を探します。MT4.22、4.23 の場合なら 221 行目になります。

    create_default_templates の記述場所を検索

    1. sub create_default_templates {
    2.     my $blog = shift;
    3.  
    4.     require MT::DefaultTemplates;
    5.     my $tmpl_list = MT::DefaultTemplates->templates( @_ );
  2. build_type を反映にする記述追加

    次にテンプレートセット内で指定した build_type を反映する記述を追加します。 具体的には以下のようなコードになります。MT4.22、4.23 の場合なら 261 行目辺りになります。

    build_type 反映の為のコード追加

    1. if (@arch_tmpl) {
    2.     require MT::TemplateMap;
    3.     for my $map_set (@arch_tmpl) {
    4.         my $tmpl = $map_set->{template};
    5.         my $mappings = $map_set->{mappings};
    6.         foreach my $map_key (keys %$mappings) {
    7.             my $m = $mappings->{$map_key};
    8.             my $at = $m->{archive_type};
    9.             # my $preferred = $mappings->{$map_key}{preferred};
    10.             my $map = MT::TemplateMap->new;
    11.             $map->archive_type($at);
    12.             if ( exists $m->{preferred} ) {
    13.                 $map->is_preferred($m->{preferred});
    14.             }
    15.             else {
    16.                 $map->is_preferred(1);
    17.             }
    18.             $map->template_id($tmpl->id);
    19.             $map->file_template($m->{file_template}) if $m->{file_template};
    20.             $map->blog_id($tmpl->blog_id);
    21. # [2008.12.05] bzbell ADD
    22.             $map->build_type($m->{build_type}) if $m->{build_type};
    23. # [2008.12.05] bzbell ADD
    24.             $map->save;
    25.         }
    26.     }
    27. }

    青字の 1 行を追加します。
    デフォルト( mt/lib/MT/DefaultTemplates.pm 内で記述されてます )では build_type はスタティック・パブリッシング( 1 )に設定されます。ですので、テンプレートセット内に build_type の記述がない場合にはスタティック・パブリッシングとして作成されることになります。

以上です。
今後はテンプレートセットの差し替え時の再構築オプション変更の手間が省けます (●>∀<●)/

後はテンプレートモジュールのサーバサイドインクルード( SSI )の有効/無効をテンプレートセット内から制御したいのですが・・・ちょと難航してます(; ̄- ̄)
分かる人いましたら教えてください。

では、では。

 Trackback Pings(0)

No trackbacks found.

 Comments(0)

No comments found.

 Post a Comment

 

コメント用フィード