2010年02月02日
ハッシュを活用してブログ記事とウェブページ混在のリストを表示する
ブログ記事/ウェブページ混在のエントリーのリスティングを行うテンプレートの実装例をご紹介します(Power CMS for MTのインストールされていない環境でも動作します)。
これを実現するにはMTテンプレートの「ハッシュ」を活用します。keyに日付をセットし(重複する可能性があるので、entry_idを末尾につけています)、 MTEntries と MTPages のループの中でフィードの中身をvalueとしてハッシュにセットし、keyでソートして MTLoop で取り出します。
下記の例ではatom.xmlテンプレートにブログ記事+ウェブページを混在して表示させます。
<$MTHTTPContentType type="application/atom+xml"$><?xml version="1.0" encoding="<$MTPublishCharset$>"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><$MTBlogName remove_html="1" encode_xml="1"$></title>
<link rel="alternate" type="text/html" href="<$MTBlogURL encode_xml="1"$>" />
<link rel="self" type="application/atom+xml" href="<$MTLink template="feed_recent"$>" />
<id>tag:<$MTBlogHost exclude_port="1" encode_xml="1"$>,<$MTTemplateCreatedOn format="%Y-%m-%d"$>:<$MTBlogRelativeURL encode_xml="1"$>/<$MTBlogID$></id>
<updated><MTEntries lastn="1"><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></MTEntries></updated>
<MTIf tag="BlogDescription"><subtitle><$MTBlogDescription remove_html="1" encode_xml="1"$></subtitle></MTIf>
<generator uri="http://www.sixapart.com/movabletype/"><$MTProductName version="1"$></generator>
<$MTSetVar name="lastn" value="15"$>
<$MTSetVar name="entries" function="undef"$>
<MTEntries lastn="$lastn">
<MTSetVarBlock name="key"><MTEntryDate format_name="iso8601">-<MTEntryID></MTSetVarBlock>
<MTSetVarBlock name="entries" key="$key">
<entry>
<title><$MTEntryTitle remove_html="1" encode_xml="1"$></title>
<link rel="alternate" type="text/html" href="<$MTEntryPermalink encode_xml="1"$>" />
<id><$MTEntryAtomID$></id>
<published><$MTEntryDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></published>
<updated><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></updated>
<summary><$MTEntryExcerpt remove_html="1" encode_xml="1"$></summary>
<author>
<name><$MTEntryAuthorDisplayName encode_xml="1"$></name>
<MTIf tag="EntryAuthorURL"><uri><$MTEntryAuthorURL encode_xml="1"$></uri></MTIf>
</author>
<MTEntryCategories>
<category term="<$MTCategoryLabel encode_xml="1"$>" scheme="http://www.sixapart.com/ns/types#category" />
</MTEntryCategories>
<MTEntryIfTagged><MTEntryTags><category term="<$MTTagName normalize="1" encode_xml="1"$>" label="<$MTTagName encode_xml="1"$>" scheme="http://www.sixapart.com/ns/types#tag" />
</MTEntryTags></MTEntryIfTagged>
<content type="html" xml:lang="<$MTBlogLanguage ietf="1"$>" xml:base="<$MTBlogURL encode_xml="1"$>">
<$MTEntryBody encode_xml="1"$>
<$MTEntryMore encode_xml="1"$>
</content>
</entry>
</MTSetVarBlock>
</MTEntries>
<MTPages lastn="$lastn">
<MTSetVarBlock name="key"><MTPageDate format_name="iso8601">-<MTPageID></MTSetVarBlock>
<MTSetVarBlock name="entries" key="$key">
<entry>
<title><$MTPageTitle remove_html="1" encode_xml="1"$></title>
<link rel="alternate" type="text/html" href="<$MTPagePermalink encode_xml="1"$>" />
<id><$MTEntryAtomID$></id>
<published><$MTPageDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></published>
<updated><$MTPageModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></updated>
<summary><$MTPageExcerpt remove_html="1" encode_xml="1"$></summary>
<author>
<name><$MTPageAuthorDisplayName encode_xml="1"$></name>
<MTIf tag="PageAuthorURL"><uri><$MTPageAuthorURL encode_xml="1"$></uri></MTIf>
</author>
<MTPageFolder>
<category term="<$MTFolderLabel encode_xml="1"$>" scheme="http://www.sixapart.com/ns/types#category" />
</MTPageFolder>
<MTPageIfTagged><MTPageTags><category term="<$MTTagName normalize="1" encode_xml="1"$>" label="<$MTTagName encode_xml="1"$>" scheme="http://www.sixapart.com/ns/types#tag" />
</MTPageTags></MTPageIfTagged>
<content type="html" xml:lang="<$MTBlogLanguage ietf="1"$>" xml:base="<$MTBlogURL encode_xml="1"$>">
<$MTPageBody encode_xml="1"$>
<$MTPageMore encode_xml="1"$>
</content>
</entry>
</MTSetVarBlock>
</MTPages>
<$MTSetVar name="i" value="0"$>
<MTLoop name="entries" sort_by="key reverse">
<$MTSetVar name="i" op="++"$>
<MTIf name="i" le="$lastn">
<$MTGetVar name="__value__"$>
</MTIf>
</MTLoop>
</feed>
Power CMS for MTのサポートへお問い合わせいただいた際にプラグインを書くと言う方法を検討したのですが、標準のテンプレートタグで出来るという話がスタッフからあがり、このテンプレートを作成しました。かなりプログラミングライクなことがMTMLで出来ることがおわかりいただけると思います。
- カテゴリー
- テンプレート作成Tips
コメントを投稿する