BlogTop > MovableType > MTカスタムフィールド Archive
MTカスタムフィールド Archive
2 of 2
使ってるカスタムフィールドの内容を出力してみた
- 2009年2月23日 18:28
- Last update: May 24, 2016 07:46
- MTカスタマイズ | MTカスタムフィールド

エントリアーカイブで使っているカスタムフィールドの中身を一覧表示させるためのテンプレートを書いてみました。
これまで使ってきたカスタムフィールドがどのような内容だったか忘れてしまったので、控として一覧表示できたらいいのでは、と思ったのでちょっとテンプレートを書いてみました。
参考にしたリンクを入れるフィールドの内容をXML形式にて出力して、Excelなどで読み出して管理してみる、というのを試みました。出力したXMLファイルをExcelで読みこんで操作してる様子は以下のようなものです。

記事エントリー内で使っているカスタムフィールドの内容を出力させるのに、MTEntryCustomFieldsを利用しています。
タグリファレンスをみると大体わかるのですが、比較的簡単なテンプレートで実現できるようでした。
テンプレート
テンプレートは以下のようなものです。
<?xml version="1.0" encoding="UTF-8"?>
<fields>
<$MTEntries lastn="20" sort_order="ascend"$><$MTEntryCustomFields exclude="test field,test2">$><mt:if tag="CustomFieldValue">
<items>
<Title><$mt:EntryTitle encode_xml="1" remove_html="1"$></Title>
<link><$mt:EntryPermalink encode_xml="1"$></link>
<CustomFieldValue><![CDATA[<$MTCustomFieldValue$>]]></CustomFieldValue>
</items></mt:if></MTEntryCustomFields>
</MTEntries>
</fields>
EntryCustomFieldsのタグリファレンスをみると、一部のフィールドだけを除きたい場合は、exclude モディファイアを
とあります。上の例は、「test」,「test field」,「test2」という3つのカスタムフィールドがあり、「test」という名前のフィールドのみをブログ記事の古い順から20記事のうちから抽出しますというテンプレートです。簡単なXSLTテンプレートも作ってみました。スタイルはセンスがないのでアレですが。
一部、ミスリードの可能性があるので追記しておきます。特定のカスタムフィールドの内容を出力したいときは、EntryCustomFieldsタグでなく、提供されたカスタムフィールド用タグを使います。このことはタグリファレンスにも明記されています。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output
method="html"
media-type="text/html"
omit-xml-declaration="yes"
doctype-public="-//W3C//DTD HTML 4.01//EN"
doctype-system="http://www.w3.org/TR/html4/strict.dtd"
indent="yes"
/>
<xsl:template match="/">
<html lang="ja">
<head>
<title>Custom Fields</title>
<style type="text/css">
#MAIN{padding : 0 20px;}
table{ border-spacing:0; border: 2px solid #0e0;}
th{background:#333;color:#FFF;}
td{border:1px dotted #0e0;background:#F1EFE2;}
</style>
</head>
<body>
<div id="MAIN">
<table border="1" cellspacing="0">
<tbody>
<tr><th>EntryTITLE</th><th>PermaLINK</th><th>Value</th></tr>
<xsl:apply-templates select="fields/items" />
</tbody>
</table>
</div>
</body>
</html>
</xsl:template>
<xsl:template match="fields/items">
<tr>
<td>
<xsl:value-of select="Title" />
</td>
<td>
<a href="{link}"><xsl:value-of select="link" /></a>
</td>
<td>
<xsl:value-of select="CustomFieldValue" />
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
これらのテンプレートをまとめたものを置いておきます。
- download
カスタムフィールド系のテンプレートは以下を参照するとよさようです。
XSLTの xmlns="http://www.w3.org/1999/xhtml"を削除しました。
- Comments
- TrackBack Closed
メモ:記事ごとに違う処理したいときのカスタムフィールド
- 2008年5月 9日 18:13
- Last update: Jan 13, 2015 14:53
- MTカスタムフィールド | mt4

特定記事のみで読み込むコードとかがある場合に、条件処理させたいと思い、カスタムフィールドを使ってやってみました。
1.カスタムフィールドの設定
カスタムフィールドを新規作成します。以下のような感じで、Yes,Noをラベルに使ったラジオボタンを作成します。
- 名前: 任意
- 説明: 任意
- 種類: ラジオボタン
- オプション: Yes,No
- 必須?: チェック(チェックにすることで、記事作成画面に常に表示されます)
- 規定値: NoまたはYesのラジオボタンにチェック
ここで作成されたタグの出力結果は、ラジオボタンにチェックを入れたほうの値となります。
Yes,Noでなくても自分でわかりやすい変数っぽいものでもいいでしょう。
2.ブログ記事テンプレートに変数を定義
Checkboxという名前でできたカスタムフィールドですと以下のような形となります。
場所は、ブログ記事テンプレートの上の辺りにでも
<MTIfNonEmpty tag="Checkbox"> <MTSetVarBlock name="check"><MTCheckbox></MTSetVarBlock> </MTIfNonEmpty>
MTIfNonEmptyタグは念のため記述してありますが、「必須」にしてあるのでもしかしたら要らないかもしれません。
3.処理を行いたい箇所のコード
条件分岐したい場所に以下のようにeq=...にて判断をおこないます。この場合は、Yesにチェックが入っていた場合の条件での処理になります。MTElseなどを入れることも考えられるでしょう。
<MTIf name="check" eq="Yes"> do something... </MTIf>
カスタムフィールドと条件分岐についてはだいたいこのような感じです。
- Comments
- TrackBack Closed
フィード配信しない内容をカスタムフィールドにて
- 2008年4月 6日 14:34
- Last update: May 24, 2016 07:46
- MTカスタムフィールド | MovableType

MT4.1のカスタムフィールドで生成されるタグを記述しないとカスタムフィールドの内容は表示されません。このことから、カスタムフィールド内にフィード配信しないコンテンツを含めて利用しよう、という使い方です。
W3CのFeed Validation Service を利用して、フィードチェックをすると、フィードの要素内に、scriptタグが含まれてると、以下のような警告が出ます。
element should not contain script tag
この警告についての説明ページをみますと、
http://validator.w3.org/feed/docs/warning/SecurityRisk.html より引用
Some feed elements are allowed to contain HTML.However, some HTML tags, like script, are potentially dangerous and could cause unwanted side effects in browser-based news aggregators.For this reason, these potentially dangerous tags are often stripped out on the client side.
JavaScriptのように危険なコードが含まれる可能性のあるタグは、クライアント側で除去されることがありますよ。といったところでしょうか。
例えば、ブログパーツを記事で紹介するようなとき記事内に公開されているソースコードを埋めたいようなことがあります。
ところが、記事本文内にscriptタグで埋め込みますと、Feed Validation Serviceで上記の警告がでてしまいます。
これを回避するのに、feedのテンプレートで、MTEntryExcerptは配信しないようにして、追記部分にソースコードを埋め込む、というのを以前やっていたことがありました。
そのほかには、フィードを概要配信に変えてしまうという手もあります。
この辺のお話は、WingMemoさまの記事、「RSSを配信するということ(2)」が参考になると思います。
ただこれらの方法ですと、全文配信派(この場合、読み手の立場からになるのか?)なひとからすると、一寸不満な部分はあると思います。
そのような場面で、カスタムフィールドを使うというのを考えました。
カスタムフィールドの説明などは、www.movabletype.jpのドキュメントにあるとおりなので、細かな説明は省略します。
冒頭に書いたとおりですが、カスタムフィールドを作成して生成されたタグをページに埋め込まないことには、カスタムフィールドの内容は表示されません。
記事ページ用のカスタムフィールドとして登録しておき、フィードのテンプレートはそのまま何も手を加えなければ、フィードでJavaScriptコードは出力されなくなるというわけです。
以上はカスタムフィールドを利用したほんの一例でしかありません。サイトの運営方針などもありますし。JavaScriptの動作確認をするのなら、テストページを作成して記事内でリンクの形のほうがいいのかも知れません。
おまけですが、例えば、なぞかけエントリなどで、「そのこころは」の部分をカスタムフィールドでといった使い方も考えられるでしょうね(これだけのために使うというのもアレなのでようせんけど)。
- Comments
- TrackBack Closed
BlogTop > MovableType > MTカスタムフィールド Archive
- Feeds
- Elsewhere
- logo