BlogTop > MovableType > MTカスタムフィールド Archive
MTカスタムフィールド Archive
1 of 2
メモ:MT:ウェブページむけの Next|Previous URL カスタムフィールド
- 2013年4月15日 14:51
- Last update: May 24, 2016 07:46
- MTカスタムフィールド | mt5
Movable Typeのウェブページ用カスタムフィールドで次のページURL を示すフィールドをつくってみました。
背景など
ウェブページの link 要素のrel=next および、rel=prev に入れるURLをあつかうとき、MTPageNext や MTPagePrevius がありますが、これはページの作成順序を考慮していないと、「本当はあのページを次のページとして指定したかったのに」なんてことがおこるかどうかは定かでありませんけれども、そんな環境を想定してみました。
細かな前提とかおいておき、さっそく作成例として示しておきます。
ざっと NextURL のほうだけですが以下のようなものです。previous は文字列変更するだけですので省略。
名前のところは、管理画面の「表示オプション」などが使用するので、わかりやすくて簡潔な名前のほうがいいでしょう(ここの例は思いつきでつけただけですので)。ベースネームは他のと重ならないもの、テンプレートタグも既存のものと違うもので、CFなどの接頭辞をつけてテンプレートタグとわけておくのがいいです。
システムオブジェクト ウェブページ 名前 nextURL 説明 次のページ 種類 テキスト 必須? なし 規定値 なし ベースネーム cf_pagenexturl テンプレートタグ CFPageNextURL テンプレートの例 <mt:If tag="CFPageNextURL"> nextURL: <mt:CFPageNextURL> </mt:If>
使用する場合は、 ウェブページのそれぞれのページ編集のところで、表示オプションで作成したフィールド名にチェックを入れてフィールド表示させておきます。
あとは、URLを入力すれば、MTCFPageNextURL
は入力したURLに展開されます。
以下は、簡単な link要素の next prev の設置です。
head 要素内に以下を追加します。
<mt:If tag="CFPageNextURL"><link rel="next" href="<mt:CFPageNextURL>"></mt:If>
<mt:If tag="CFPagePreviousURL"><link rel="prev" href="<mt:CFPagePreviousURL>"></mt:If>
title 属性を入れたい場合は、 :title=XXX とか独自に記法を決めておいて、URLとtitle部分を regex_replace で取り出すか、新たにタイトル用のフィールドも作るかになるとおもいます。
- Comments
- TrackBack Closed
カスタムフィールドとフラグメント識別子
- 2010年3月12日 07:55
- Last update: Jan 12, 2015 21:25
- MTカスタムフィールド
今回は、Movable Typeのカスタムフィールドで、フラグメント識別子を入れたものを利用して、ページ内のリストメニューとして出力させる方法のメモです。
MTでフラグメントをあつかう方法はいろいろとあるのですが、以前からカスタムフィールドを利用して何かできないものか考えていましたので試してみることにしました。
設定の流れとしては以下のとおりです。
- ブログ記事用として識別子を入力するカスタムフィールドを作る
- 値には区切り文字をいれて区切っておくようにする
- 区切り文字から内容を解析してテンプレートタグを使いリストを生成する
といった具合です。で、カスタムフィールドの作成はこの際端折ってしまうとして、問題は区切り文字をどう解釈させるかにあります。
ちょうどよさそうなプラグインが見つかりましたので、今回利用させていただくことにしました。以下に解説が記載されています。
以下のテンプレートタグによるコードは、カスタムフィールド(mt:cf_fragment)を作成して、エントリページのカスタムフィールドにsection_01,section_02,section_03のような入力があった場合に、a href="#section_01"
のようなリンクを出力します。
<mt:if tag="cf_fragment"> <$mt:setarray tag="cf_fragment" name="frag" sep=","$> <ul> <mtloop name="frag"> <li><a href="#<$mt:Var name="__value__"$>">section<$mt:var name="__counter__"$></a></li> </mtloop> </ul> </mt:if>
- Comments
- TrackBack Closed
メモ:特定カスタムフィールドの値は提供されたタグで
- 2010年1月30日 07:41
- Last update: May 24, 2016 07:46
- MTカスタムフィールド
特定のカスタムフィールドの値の出力のメモ。MTEntryCustomFieldsにおいてinculudeモディファイアを利用できるようですが、特定のカスタムフィールドには提供された専用のタグを使います
折角、カスタムフィールドのカテゴリを設けたので、久久にカスタムフィールドねたでいきます。
以下はカスタムフィールドにフラグメント識別子をいれてその内容にもとづいたURIを作成する目的のものです。
カスタムフィールド名として「フラグメント」、使用するテンプレートタグは「cf_fragment」にしたとします。
- カスタムフィールド用タグを利用した(通常の)書き方
-
<ul> <MTEntries> <mt:if tag="cf_fragment"> <li><$MTEntryTitle$>: <a href="<$MTEntryPermaLink$>#<$MTcf_fragment$>"> <$MTcf_fragment$></a> </li> </mt:if> </MTEntries> </ul>
で、以下はMTEntryCustomFieldsタグにinculudeモディファイアを使って、「フラグメント」のカスタムフィールドのみ出力になるようにした書き方です。
- MTEntryCustomFieldsでinculudeモディファイアを使った場合
-
<ul> <MTEntries> <MTEntryCustomFields include="フラグメント"> <MTIfNonEmpty tag="EntryCustomFieldValue"> <li><$MTEntryTitle$>: <a href="<$MTEntryPermaLink$>#<$MTEntryCustomFieldValue$>"> <$MTEntryCustomFieldValue$></a> </li> </MTIfNonEmpty> </MTEntryCustomFields> </MTEntries> </ul>
結果的には等しくなりますが、コードとしてどちらがすっきりとしているのかはいわずともわかりますね。
なお、MTEntryCustomFieldsについてはタグリファレンスには、exclude(特定のカスタムフィールドを除外する)のみのモディファイアが掲載されています。特定のカスタムフィールドの内容の出力は、そのカスタムフィールドのテンプレートタグを使う(*リファレンスにも明記されています)ということで頭の中にいれておけばいいのでないでしょうか。Tipsでもなんでもなく、リファレンスをよく読めばいいという話であります。
- Comments
- TrackBack Closed
ダッシュボードで最近のカスタムフィールドの内容を見れるウィジェット
- 2009年6月 7日 06:32
- Last update: May 23, 2021 17:25
- MTカスタマイズ | MTカスタムフィールド
Movable Typeのダッシュボードから最近の記事で使っているカスタムフィールドの内容を見ることができるようにウィジェットを作ってみました。
前にダッシュボードのウィジェットを作ったりしていたのですが(MT:ダッシュボードにブログパーツを表示させてみた)、その続きです。
まずはスクリーンショットを。

テンプレートファイルのソースはこのようなものです。
<mt:setvarblock name="html_head" prepend="1"> <link rel="stylesheet" href="<mt:var name="static_uri">plugins/c_field_widget/css/styles.css" type="text/css" media="screen" /> </mt:setvarblock> <mt:setvartemplate name="showCustomField"> <MTEntries days="30" sort_by="modified_on" limit="5"> <div id="cf_entry-<$MTEntryID$>" class="entry-<mt:if name="__odd__">odd<mt:else>even</mt:if>"> <MTEntryCustomFields> <MTIfNonEmpty tag="EntryCustomFieldValue"> <div class="entry-title cf_entryTitle"><MTEntryAuthorID setvar="entry_author_id"><MTSetVarBlock name="entry_title"><MTIfNonEmpty tag="MTEntryTitle"><$MTEntryTitle$><MTElse><__trans phrase="..."></MTIfNonEmpty></MTSetVarBlock> <h4><MTIf name="editable"><a href="<mt:var name="script_url">?__mode=view&_type=<$MTEntryClass lower_case="1"$>&blog_id=<MTEntryBlogID>&id=<MTEntryID>"><$MTEntryTitle$></a><MTElse name="author_id" eq="$entry_author_id"><a href="<mt:var name="script_url">?__mode=view&_type=<$MTEntryClass lower_case="1"$>&blog_id=<MTEntryBlogID>&id=<MTEntryID>"><$MTEntryTitle$></a><MTElse><$MTEntryTitle$></MTIf></h4> </div> <div class="entry-meta cf_fieldName"><$MTEntryCustomFieldName$><mt:if tag="EntryCustomFieldDescription">(<$MTEntryCustomFieldDescription$>)</mt:if></div> <div class="entry-content cf_fieldValue"><$MTEntryCustomFieldValue encode_html="1"$></div> </MTIfNonEmpty> </MTEntryCustomFields> </div> </MTEntries> </mt:setvartemplate> <mtapp:widget id="DashbordWidgetCalendar" class="widget" label="最近のカスタムフィールド" can_close="1"> <mt:getvar name="showCustomField"> </mtapp:widget>
直近の記事のカスタムフィールドの内容を全て出力します。EntryCustomFieldsのexcludeモディファイアを使えば、除外するフィールドを指定して、特定のフィールドだけ出すこともできます。
pluginとしてセットしたものをここに置いておきます。mt-staticフォルダにCSSファイルが入ってますが、気に入らなかったら使わないとか好きに書き換えするとよろしいかと。
- Download
- Comments
- TrackBack Closed
MovableTypeのカスタムフィールドで特定キーワードを含む記事をリストアップするテンプレート
- 2009年6月 1日 08:36
- Last update: May 24, 2016 07:46
- MTカスタムフィールド
Movable Typeのカスタムフィールドに書いてある内容から、任意の「キーワード」で記事を絞り込んでリストアップするというテンプレートを書いてみました。
コチラが説明しづらい部分がありますので、先ずは人力検索はてなの質問をご覧ください。
- Movable Type4.23でwebサイトを構築中です。 特定のカスタムフィールド中に、同一の単語を含む記事を一覧表示させたいのですが、 カテゴリを使わずにできる方法はありますでしょうか。人力検索はてな (#1233251618)
要点をまとめると、このようなかんじでしょうか。
- 大阪一円のレストランに関する記事が作成されている
- 各記事には、「最寄り駅」という名のカスタムフィールドがある
- カスタムフィールドには最寄り駅から何分という情報が記載されている
- カスタムフィールドに書いてある最寄り駅の駅名から記事をリストアップしたい
MovableType.jpの「カスタムフィールドの値で並べ替えやフィルタリングする」に書かれている、「カスタムフィールドの値を利用したフィルタリング」を試してみたのですが、どうもfield:customfieldbasename=fooの中身が完全一致でないと期待の動作にならないようなのです。
そうなると、大阪一円の駅名の部分だけのフィールドを「ドロップダウンメニュー」や「ラジオボタン」タイプで別途設けておいてそのフィールドのほうで、評価してみるというような使い方でないと、カスタムフィールドの値でソートというのが実現されないように思います。それならば、一旦変数にフィールドの内容を格納してそこから評価してみるというのでどうでしょうか。
ということで、回答は閉め切られてますが、コチラがこの命題に答えた解答は以下のような感じです。あまりすっきりしない感じですが。
カスタムフィールドから特定キーワードを含む記事をリストアップするテンプレート
<mt:setvars>filterName=JR大阪駅</mt:setvars> <mt:setvartemplate name="showMoyorieki"> <MTEntries><mt:setvarblock name="station"><mt:cf_MoyoriEki></mt:setvarblock><mt:if name="station" like="$filterName"><li><a href="<$MTEntryPermalink$>"><MTEntryTitle></a>:<mt:cf_Moyorieki></li> </mt:if></MTEntries> </mt:setvartemplate> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=<$mt:PublishCharset$>" /> <title>test custom field filtering</title> </head> <body> <div> <h1>最寄り駅: <em><mt:var name="filterName" /></em>を含む記事</h1> <ul> <mt:getvar name="showMoyorieki" trim="1" /> </ul> </div> </body> </html>
Note:
- カスタムフィールドは記事用で作成し、テキストタイプ、カスタムフィールドを出力するタグ名は「mt:cf_MoyoriEki」とした
- cf_MoyoriEkiを変数(station)に収め、任意のキーワードを含んでいる記事をリストアップさせた
参考までに、一連の動作の検証で使用したファイル群は以下。
- Download:
- Comments
- TrackBack Closed
カスタムフィールドを配信する(?)
- 2009年5月 1日 08:59
- Last update: Jan 12, 2015 21:09
- MTカスタマイズ | MTカスタムフィールド
記事に設定したカスタムフィールドもあわせてフィードに配信する方法を考えてみました
自分のところに検索された語から何かを読み取って勝手に回答してしまうエントリです。ということで今回はMovable Typeのカスタムフィールドネタをします。
ここで以前、カスタムフィールドに書いたものはフィード配信にならないという内容の記事を書きました。
今回はその逆ですね。フィードのテンプレートを少しカスタマイズすると恐らくいけるのかとおもいます。
フィードにカスタムフィールドの内容を反映させる(案)
まずカスタムフィールドを作成します。ありきたりですが、ここでは「関連記事」というカスタムフィールドを作り、複数行テキストにて、関連記事へのリンクを示すというものを作ったと仮定して説明してみます。
例として以下のようなカスタムフィールドを出力するコードをフィードのテンプレートに埋めてみます。
このフィールドはcf_relatedentry
というテンプレートタグ名とし、出力させるコードは以下のようなものとします。
<mt:If tag="cf_relatedentry"> <div id="related" class="relatedEntry"> <dl> <dt><b>関連記事</b>:</dt> <dd><mt:cf_relatedentry></dd> </dl> </div> </mt:If>
テンプレート編集で「最新記事のフィード」(Atomフィード)を編集します。
content要素の内容で、mt:EntryMoreタグの下に追加します。

カスタムフィールドの内容をCDATAセクションにします。
ただ、この方法ですと、mt:EntryBody
タグにある、encode_xml
オプションのために、CDATA区間が2箇所できることになります(*環境変数でNoCDATAを使用してない場合です)。このことが原因で正しく表示できないフィードリーダーがもしかしたらあるかもしれないです。
これがキモいというときは、encode_xml
を使わずに直接CDATA区間を指定する方法を使ってみます。

なお、確認は簡単なテスト記事にてIE7のフィードプレビューでしか(Firefoxだと、summary要素の内容がでてしまうので)おこなっていません。実際の運用のところまでは一寸自信がありませんのでその点はご承知おきいただけたらと思います。
- Comments
- TrackBack Closed
カスタムフィールドで選択項目が多い場合ドロップダウンを使ってみては。
- 2009年3月15日 09:04
- Last update: Jan 12, 2015 21:18
- MTカスタムフィールド | myown
カスタムフィールドのお話。カスタムフィールドであつかう内容にあったタイプを使って見るというのはどうでしょうか。
Movable Typeのカスタムフィールドで、管理画面をからみたスタイルを調整するのに、/mt-static/addons/Commercial.pack/styles-customfields.cssにスタイルを加える、といった情報を見つけたのですが、見た目だけの問題でしたら、ブラウザのユーザースタイルでおこなうというのもアリだと思っています。バージョンが変わるごとに書き換えの必要がでてきますし、userChrome.cssを書き換えるのと、styles-customfields.cssを書き換えてからサーバに上書アップロードするというのでは、どちらのほうが手間でしょうか。
さて、選択式ののフィールドでラジオボタンタイプなどを使われていたとして、項目が増えてきますと、横並びであったとしても少し見づらかったり、場所をとってしまったりもします(表示オプションの設定で使うたびに表示・非表示という手はありますが、勝手が悪いように思います)。
そこで選択項目が多く、ある程度までは増えることもないものであれば、ドロップダウンタイプを使って、フィールドの表示スペースを少なくしてみるという手もあります。
「二十八宿」をその日書いたエントリーで指定して表示させるといったカスタムフィールドを作るとします。ま、このようなフィールドを作るヒトはまずいないとおもうのですが、例えとしてですので。このような感じで設定しておきます。

カンマ(,)で区切ってデフォルトのところで、デフォルトで指定したい値を決めることができます。(=selected属性の値)
=====,角宿,亢宿,テイ宿,房宿, (・・・以下、軫宿まで)
小技ですが、デフォルト値を、選択項目にないものにしておき、選択をおこなわなかったときに表示されないといった振り分けもできます。
<MTIfNonEmpty tag="entrydatatestdropdowmenu"> <mt:SetVarBlock name="menu_value"><MTentrydatatestdropdowmenu></mt:SetVarBlock> </MTIfNonEmpty> <mt:if name="menu_value" ne="====="> <p>二十八宿: <MTentrydatatestdropdowmenu></p> </mt:if>
というわけで余計なお世話なことですが、型にあったフィールドのタイプを選択してみようということでした。
- Comments
- TrackBack Closed
BlogTop > MovableType > MTカスタムフィールド Archive
- Feeds
- Elsewhere
- logo