お知らせ

Movable Type 5 Webサイト製作ガイドVolume 22010年4月19日

Movable Type 5 Webサイト製作ガイドVolume 2」を発売しました。
「Movable Type 5 Webサイト製作ガイドVolume 1」の続編で、変数等の応用的な機能や、ウェブサイトやテーマなどのMovable Type 5の新機能についてしっかり解説した書籍です。
Movable TypeでWeb製作をされている方などにお勧めです。
PDFによる販売で、当サイトでのみ購入できます(書店では購入できません)

他にも多数書籍を執筆しています。
こちらもぜひご覧ください。

アーカイブの制御(その7・複数アーカイブページ利用時のリンク系タグ)

| コメント(5) | トラックバック(0)

「アーカイブの制御」のシリーズで、前回の記事の最後に、以下のようなことを書きました。

PC用のブログ記事アーカイブページがすでにある状況で、追加でiPhone用のブログ記事アーカイブページも出力するようにしたとします。
その場合、MTEntryPermalinkタグの指すアドレスは、PC用のブログ記事アーカイブページのアドレスになります。
ここで、「iPhone用のブログ記事アーカイブページのアドレスを、どうやって表せば良いか」という疑問が出てきます。

今日はこのことについて解説します。

1.アーカイブマッピングの「優先」

前回解説したように、1種類のアーカイブタイプに複数のアーカイブマッピングを行うことができます。
例えば、「PC用」と「iPhone用」の2つのブログ記事アーカイブテンプレートを作り、両方を「ブログ記事」にアーカイブマッピングすることで、PC用/iPhone用それぞれのブログ記事アーカイブページを出力することができます。

ただし、この例のようにする場合は、MTEntryPermalinkなど、アーカイブページのアドレスを表すタグの出力は、「優先」に設定されているアーカイブページのアドレスになります。
上の例だと、「PC用」と「iPhone用」のアーカイブマッピングのうち、「PC用」が優先に設定されていると、MTEntryPermalinkタグの出力は、PC用のブログ記事アーカイブページのアドレスになります。

1つのタイプのアーカイブに複数のアーカイブマッピングを割り当てると、テンプレートの編集のページで、そのアーカイブマッピングの種類名の右に、チェックボックスが表示されるようになります。
チェックをオンにしたアーカイブマッピングが優先されます。
また、同じタイプのアーカイブの複数のアーカイブマッピングのうち、優先にできるのは1つだけです。

上で述べたような例だと、PC用/iPhone用のテンプレートのアーカイブマッピングの部分にチェックボックスが表示され、PC用のチェックがオンになり、iPhone用はオフになります。

PC用のアーカイブマッピングが優先されている

iPhone用のアーカイブマッピングは優先されていない

2.優先以外のアーカイブページのアドレスを出力する

優先に設定されていないアーカイブページのアドレスは、1つのテンプレートタグで直接的に出力することはできません。
アーカイブのパスの設定に応じて、テンプレートタグを組み合わせて出力する必要があります。

例えば、ここまでであげたような例だと、PC用のブログ記事アーカイブページのアドレスはMTEntryPermalinkタグで出力できます。
しかし、iPhone用のブログ記事アーカイブページは、アーカイブのパスの設定に応じて、テンプレートタグを組み合わせて出力します。

アーカイブのパスを設定する方法には、MTがデフォルトで用意している選択肢から選ぶ方法と、カスタムのパスを設定する方法がありました。
これらのパスの設定をテンプレートタグで表すには、「MTFileTemplate」というタグを使います。

2-1.MT標準の選択肢を使う場合

MT標準の選択肢を使う場合、それを「%y」などのカスタムのパスの書き方に置き換えてから、MTFileTemplateタグで以下のように表します。

<$mt:FileTemplate format="カスタムのパスの書き方">

例えば、ブログ記事アーカイブのパスの設定を、MT標準の選択肢の「yyyy/mm/entry-basename.html」に設定したとします。
yyyyなどは、それぞれ以下のように置き換えることができます。

置き換える元対応するカスタムのパスの書き方
yyyy%y
mm%m
entry-basename.html%-f

ただし、MTFileTemplateタグは、ページのアドレスのうち、アーカイブURLから後の部分しか出力しません。
アーカイブURLは、MTBlogArchiveURLタグで別途出力します。

ここまでの話から、「yyyy/mm/entry-basename.html」に対応する各ページのアドレスは、以下のタグで出力することができます。

<$mt:BlogArchiveURL$><$mt:FileTemplate format="%y/%m/%-f"$>

また、ページのタイトルを出力し、そのページにリンクするようにするなら、以下のようにタグを書きます。

<a href="<$mt:BlogArchiveURL$><$mt:FileTemplate format="%y/%m/%-f"$>"><$mt:EntryTitle$></a>

2-2.カスタムのパスを使う場合

アーカイブのパスとして、カスタムのパスを使うように設定した場合、「%y」等の記号の部分はMTFileTemplateタグで置き換えます。
また、カスタムのパスの中に、一般的なテンプレートタグを使った場合は、そのタグをそのまま使います。

例えば、iPhone用のブログ記事アーカイブを作り、パスを「i/%y/%m/%-f」に設定したとします。
この場合、iPhone用の各ブログ記事のページのアドレスは、以下のように表すことができます。

<$mt:BlogArchiveURL$>i/<$mt:FileTemplate format="%y/%m/%-f"$>

また、ページのタイトルを出力し、そのページにリンクするようにするなら、以下のようにタグを書きます。

<a href="<$mt:BlogArchiveURL$>i/<$mt:FileTemplate format="%y/%m/%-f"$>"><$mt:EntryTitle$></a>

トラックバック(0)

トラックバックURL: http://www.h-fj.com/mt/mt-tb.cgi/1771.

コメント(スレッド3件,コメント5件)

コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。

No.1 阿部 : 複数アーカイブページ利用時のリンク系タグ

リアルタイムで悩んでおりましたので
非常に参考になりました。

リンクURLにアーカイブのパスが使えることが解り、
早速使ってみると、イメージ通りの動作ができました。

ありがとうございました。

No.2 TAK : (無題)

とあるカテゴリだけ、保存先を通常のアーカイブとは変えておきたく、こちらの「アーカイブの制御」記事を参考にさせていただきました。
しかしながら、優先ではない方のブログ記事へのリンクにあたり(優先ではない方のブロク記事へのリンクが必要な)インデックスを再構築するとMTFileTemplateタグのエラーが出てしまいました。

こちらの記事を参考に、修正した箇所と関連するアーカイブマッピングは以下のとおりです。

インデックス(カスタムインデックスにて、Aカテゴリのみリストアップしたもの)記載のブログ記事のURL:
<a href="<$mt:BlogURL$>lvrp/<$mt:FileTemplate format="%y/%m%d"$>.php">リンク</a>
※BlogArchiveURLは特別設定してません

ブログ記事のアーカイブマッピング:
lvrp/%y/%m%d.php

エラー内容:
タグでエラーがありました: タグでエラーがありました: MTArchiveDateを日付コンテキストの外部で利用しようとしました。

MTArchiveDateタグは使用していないのですが…日付別のページには、この方法でリンクをすることができないのでしょうか?
(こちらの方法でアーカイブマッピングを変更する前は、マッピングの指定部分でMTArchiveDateタグを使用し、ファイル名を指定していました)

あまり説明が上手くなく、伝わるか心配なのですが、あちこち検索をかけてみても対処方法が見つけられなかったため、コメントをさせていただきました。
お忙しいところ、申し訳ありませんがアドバイス等、ご教授いただければと思います。

No.3  : (無題)

>TAKさん
こんにちは。

MTFileTemplateタグの「%y」「%m」「%d」は、MT内部でMTArchiveDateタグに変換されます。
MTArchiveDateタグは、MTArchiveListタグのブロック内か、日付系またはブログ記事のアーカイブページのテンプレートでないと使うことができません。

「カスタムインデックスにて、Aカテゴリのみリストアップしたもの」ということなので、おそらくMTArchiveListタグではなく、他のタグでブログ記事をリストアップされているのだと思います。
そうであれば、MTFileTemplateタグではなく、MTEntryDateタグを使って記事の日付を出力するようにする必要があります。

No.4 TAK : (無題)

壱さま

アドバイスいただき、ありがとうございました。
MTArchiveDateタグは、アーカイブページでないと使えないんですね。
今まで、デフォルトに近いブログ記事、カテゴリーアーカイブ、月別アーカイブでしか使ってこなかったので、気づきませんでした…。

MTEntryDateタグを使用して出力ということで、早速試してみたのですが、使用しているカスタムインデックスでは、MTEntriesタグを使用していないため、こちらもエラーとなってしまいました。

カスタムインデックスでのリストアップが、MTでやるには特殊なのかもしれません(今までは、全ての記事を同じルールで保存していたため、MTLinkタグでentry_idを指定していました)

カスタムインデックスが、「コンサートや演劇の公演日別リスト」でそこに「該当の公演のレポート記事をリンク」という内容なのですが、この公演日リストが、レポート記事ない場合もあるので(ようは、私の参加記録なのです)公演タイトルや公演日は普通にテキスト作成し、記事へのリンク部分だけMTタグを使うという形で作っております。

こう云った場合は、entry_id以外でのリンク指定は難しいのでしょうか…。
参考までに、アーカイブマッピングで優先設定にしている(優先にしないと記事が表示されないので)カスタムインデックスをリンクさせていただきます。

もし何か、アドバイス等ございましたらいただけますと幸いです。

せっかく、やりたかったことができる!と思ったので、もうしばらく、あちこち検索およびMTタグを調べてみようと思います。

No.5 TAK : (無題)

壱さま

先日は、アドバイスいただきありがとうございました。
1日時間をおいてみたところ、解決策にたどり着きましたのでご報告させていただきます。

ずっと、通常とは別にしたいアーカイブへのリンク方法を考えていたのですが、このカテゴリ以外はMTEntriesタグを使用してのリストアップ(MTの一般的な使い方)をしていたので、アーカイブマッピングの優先を逆にし、MTEntriesタグを使用してリストアップをしていた記事のリンクをMTEntryDateタグを使って指定するようにしたところ、無事に動作いたしました。

逆の発想に行き着くまでに1日かかってしまったのですが、上記アドバイスをいただいたことにより、訪問者からみた動作は意図したいものにできました。

ありがとうございました。
これからもいろいろなカスタマイズの紹介、楽しみにしております。

コメントする