Under the Bridge

a Picture of the Late Him

MTOS4.2RC1:各ページの拡張子を得る

2008年6月 8日 18:56 | Writer: yoshi | 記事本文 | コメント(0) | トラックバック(0)

Movable Type Open Source(以下MTOSと略)4.2 RC1での実験。

恐らくMT4.1と変わらないと思うが(注:試したわけではないので知らない)。

この記事は、グローバルナビゲーションを作成するときなど、index.htmlやarchives.htmlのファイル名を、拡張子まで含めて正確に取得するときに、恐らく役立つ。ブログの設定にて出力ファイルの拡張子を変更(php化なんかでやる)した場合、テンプレート側で自動的に拡張子を変更する処理をテンプレートへ追加できる。

MT4.1においては、(私が記憶している限りでは)拡張子の設定は以下の3箇所に存在する。

  • デザイン>インデックステンプレート>メインページ
  • デザイン>インデックステンプレート>アーカイブインデックス
  • 設定>公開>ファイルの拡張子

では、それぞれどうやって取得するのか?

以下のテストコード参考。なお、以下コードは、どこへ貼ってもコンテキストによる問題は発生しない。

メイン<$MTLink template="メインページ"$><MTIndexBasename extension="1"><br />
アーカイブ<$MTLink template="アーカイブインデックス"$><br />
拡張子<MTBlogFileExtension><br />

テストコードを貼ってみた

テストはMTOS4.2RC1で行っているが、MT4.1でも変わらんと思う。

メインhttp://www.apstars.com/blog/index.php
アーカイブhttp://www.apstars.com/blog/archives.php
拡張子.php

参考になるとこ

(※ちょっと調べる&解説書いている時間がないので、MTBlogFileExtensionについてだけ書く)

ContextHandlers.pm内に、「BlogFileExtension => \&_hdlr_blog_file_extension,」という記述がある。つまり

sub _hdlr_blog_file_extension {
    my($ctx, $args, $cond) = @_;
    my $blog = $ctx->stash('blog');
    return '' unless $blog;
    my $ext = $blog->file_extension || '';
    $ext = '.' . $ext if $ext ne '';
    $ext;
}

sub _hdlr_blog_file_extension関数に、処理内容が記述されている。

確認のためにPhpMyAdminでMySQLのDBを覗いてみる。blogテーブルのblog_file_extensionフィールドに、"html"というデータを発見。なお、このフィールド型と長さはvarchar(10)である。

追記

拡張子に関連するものでは、ほかにこういうタグもある。今回は割愛。貼ればわかると思う。

アーカイブファイルの設定は、<MTArchiveFile extension="1"><br />
アーカイブファイルの設定は(セパレータつき)、<MTArchiveFile extension="1" separator="-"><br />
エントリページの拡張子は、<MTBlogFileExtension><br />
ウェブページの拡張子は、<$MTPageBasename extension="1"$><br />

予告

テンプレートタグのみで、拡張子をクイックに取り出すコードを書く予定。呼び出しもとのコードは単にSetvarで変数名を指定するだけにし、再構築時の、呼ばれたときのみにMTSetVarTemplateで取得するようにすると、コンテキストの判断が必要になった場合でもMTSetVarTemplate内のみ一箇所で集中処理ができ(関数だからな)、全くエラーが出ないスマートなつくりにできるはず。

これはどういうことかというと、

  • 再構築時にどのモジュールが先に処理されるかがわからないから、変数取得用のモジュールはMTSetVarBlockなどでは書けない。使うならMTSetVarTemplateだ
  • 長ったらしいコードをいちいち書きたくないので、関数ちっくにMTSetVarTemplateで記述、使用するときのみ<MTSetVar name="FileExit">などとしてスマートに記述する

を狙っている。...あせって書いているので日本語が変だ。

トラックバック(0)

このブログ記事を参照しているブログ一覧: MTOS4.2RC1:各ページの拡張子を得る

このブログ記事に対するトラックバックURL:

コメントする






Categories
Entries
Feed
スポンサードリンク

parts

フィードメーター - Under the Bridge

あわせて読みたい

なかのひと

2008年4月5日開催、MT4LP5

2008 yoshi(apstar)