「アーカイブの制御」のシリーズで、前回の記事の最後に、以下のようなことを書きました。
PC用のブログ記事アーカイブページがすでにある状況で、追加でiPhone用のブログ記事アーカイブページも出力するようにしたとします。
その場合、MTEntryPermalinkタグの指すアドレスは、PC用のブログ記事アーカイブページのアドレスになります。
ここで、「iPhone用のブログ記事アーカイブページのアドレスを、どうやって表せば良いか」という疑問が出てきます。
今日はこのことについて解説します。
1.アーカイブマッピングの「優先」
前回解説したように、1種類のアーカイブタイプに複数のアーカイブマッピングを行うことができます。
例えば、「PC用」と「iPhone用」の2つのブログ記事アーカイブテンプレートを作り、両方を「ブログ記事」にアーカイブマッピングすることで、PC用/iPhone用それぞれのブログ記事アーカイブページを出力することができます。
ただし、この例のようにする場合は、MTEntryPermalinkなど、アーカイブページのアドレスを表すタグの出力は、「優先」に設定されているアーカイブページのアドレスになります。
上の例だと、「PC用」と「iPhone用」のアーカイブマッピングのうち、「PC用」が優先に設定されていると、MTEntryPermalinkタグの出力は、PC用のブログ記事アーカイブページのアドレスになります。
1つのタイプのアーカイブに複数のアーカイブマッピングを割り当てると、テンプレートの編集のページで、そのアーカイブマッピングの種類名の右に、チェックボックスが表示されるようになります。
チェックをオンにしたアーカイブマッピングが優先されます。
また、同じタイプのアーカイブの複数のアーカイブマッピングのうち、優先にできるのは1つだけです。
上で述べたような例だと、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>









コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。
リアルタイムで悩んでおりましたので
非常に参考になりました。
リンクURLにアーカイブのパスが使えることが解り、
早速使ってみると、イメージ通りの動作ができました。
ありがとうございました。
とあるカテゴリだけ、保存先を通常のアーカイブとは変えておきたく、こちらの「アーカイブの制御」記事を参考にさせていただきました。
しかしながら、優先ではない方のブログ記事へのリンクにあたり(優先ではない方のブロク記事へのリンクが必要な)インデックスを再構築すると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タグを使用し、ファイル名を指定していました)
あまり説明が上手くなく、伝わるか心配なのですが、あちこち検索をかけてみても対処方法が見つけられなかったため、コメントをさせていただきました。
お忙しいところ、申し訳ありませんがアドバイス等、ご教授いただければと思います。
>TAKさん
こんにちは。
MTFileTemplateタグの「%y」「%m」「%d」は、MT内部でMTArchiveDateタグに変換されます。
MTArchiveDateタグは、MTArchiveListタグのブロック内か、日付系またはブログ記事のアーカイブページのテンプレートでないと使うことができません。
「カスタムインデックスにて、Aカテゴリのみリストアップしたもの」ということなので、おそらくMTArchiveListタグではなく、他のタグでブログ記事をリストアップされているのだと思います。
そうであれば、MTFileTemplateタグではなく、MTEntryDateタグを使って記事の日付を出力するようにする必要があります。
壱さま
アドバイスいただき、ありがとうございました。
MTArchiveDateタグは、アーカイブページでないと使えないんですね。
今まで、デフォルトに近いブログ記事、カテゴリーアーカイブ、月別アーカイブでしか使ってこなかったので、気づきませんでした…。
MTEntryDateタグを使用して出力ということで、早速試してみたのですが、使用しているカスタムインデックスでは、MTEntriesタグを使用していないため、こちらもエラーとなってしまいました。
カスタムインデックスでのリストアップが、MTでやるには特殊なのかもしれません(今までは、全ての記事を同じルールで保存していたため、MTLinkタグでentry_idを指定していました)
カスタムインデックスが、「コンサートや演劇の公演日別リスト」でそこに「該当の公演のレポート記事をリンク」という内容なのですが、この公演日リストが、レポート記事ない場合もあるので(ようは、私の参加記録なのです)公演タイトルや公演日は普通にテキスト作成し、記事へのリンク部分だけMTタグを使うという形で作っております。
こう云った場合は、entry_id以外でのリンク指定は難しいのでしょうか…。
参考までに、アーカイブマッピングで優先設定にしている(優先にしないと記事が表示されないので)カスタムインデックスをリンクさせていただきます。
もし何か、アドバイス等ございましたらいただけますと幸いです。
せっかく、やりたかったことができる!と思ったので、もうしばらく、あちこち検索およびMTタグを調べてみようと思います。
壱さま
先日は、アドバイスいただきありがとうございました。
1日時間をおいてみたところ、解決策にたどり着きましたのでご報告させていただきます。
ずっと、通常とは別にしたいアーカイブへのリンク方法を考えていたのですが、このカテゴリ以外はMTEntriesタグを使用してのリストアップ(MTの一般的な使い方)をしていたので、アーカイブマッピングの優先を逆にし、MTEntriesタグを使用してリストアップをしていた記事のリンクをMTEntryDateタグを使って指定するようにしたところ、無事に動作いたしました。
逆の発想に行き着くまでに1日かかってしまったのですが、上記アドバイスをいただいたことにより、訪問者からみた動作は意図したいものにできました。
ありがとうございました。
これからもいろいろなカスタマイズの紹介、楽しみにしております。