mtde.info

Movable Type Developers Express

このカテゴリでは、エントリ(ブログ記事)の取り扱いに関するサンプルを紹介します。

『エントリ関連サンプル』カテゴリ内のエントリ一覧

素ノーマルエントリリスト

2008年2月 4日 21:26 | Writer: apstar | 記事本文 | コメント(2)

Movable Type 4.1のウィジェットに格納されているエントリリストのコードから不要部分を除去したコードサンプルです。

エントリを新しい順に10件表示します。

コード

<MTIfNonZero tag="BlogEntryCount">
   <MTEntries lastn="10">
   <MTEntriesHeader>
   <h3>最近のブログ記事</h3>
   <ul>
   </MTEntriesHeader>
      <li><a href="<MTEntryPermalink>"><MTEntryTitle></a></li>
   <MTEntriesFooter>
   </ul>
   </MTEntriesFooter>
   </MTEntries>
</MTIfNonZero>

素ノーマルエントリリストの続きを読む

ドロップダウンエントリリスト

2008年2月 4日 21:36 | Writer: apstar | 記事本文

Movable Type 4.1のウィジェットに格納されている月別アーカイブ(ドロップダウン)のコードをドロップダウンエントリリストに改造したコードサンプルです。

コード

<h3>ドロップダウンエントリリスト</h3>
<select onchange="nav(this)">
    <option>エントリを選択</option>
    <MTSetVarBlock name="CurEnt"><MTEntryCategory></MTSetVarBlock>
    <MTEntries category="$CurEnt">
        <option value="<MTEntryPermalink>"><MTEntryTitle></option>
    </MTEntries>
</select>

<script type="text/javascript" charset="utf-8">
function nav(sel) {
if (sel.selectedIndex == -1) return;
var opt = sel.options[sel.selectedIndex];
if (opt && opt.value)
location.href = opt.value;
}
</script>

ドロップダウンエントリリストの続きを読む

現在のエントリを強調表示するエントリリスト

2008年2月 4日 21:48 | Writer: apstar | 記事本文

現在のエントリのみstrongタグで強調表示するエントリリストのサンプルです。

このサンプルでは、CurEnt変数にはMTEntryTitleにMTEntryIDを付加した値を代入しています。MTEntriesブロックタグ内では単純にループ毎のエントリ名+エントリIDを代入したCompare変数とさきのCurEnt変数とを比較して、同じであったらstrongを付与して強調表示しリスト生成、そうでなければstrongを付与せずにリスト生成しています。

現在位置を強調表示することによって、観覧ユーザがサイト内で迷いづらくなるメリットがあると思われます。このサンプルではstrongタグにて太い文字にしているだけですが、マーカー画像などを用いるのもいいと思います。

コード

<MTIfNonZero tag="BlogEntryCount">
   <MTIf name="entry_template">
      <MTSetVarBlock name="CurEnt"><MTEntryTitle><MTEntryID></MTSetVarBlock>
   </MTIf>
   <MTEntries lastn="999">
   <MTSetVarBlock name="Compare"><MTEntryTitle><MTEntryID></MTSetVarBlock>
   <MTEntriesHeader>
   <h3>強調表示</h3>
   <ul>
   </MTEntriesHeader>
   <MTIf name="Compare" eq="$CurEnt">
      <li><a href="<MTEntryPermalink>"><strong><MTEntryTitle></strong></a></li>
   <MTElse>
      <li><a href="<MTEntryPermalink>"><MTEntryTitle></a></li>
   </MTIf>
   <MTEntriesFooter>
   </ul>
   </MTEntriesFooter>
   </MTEntries>
</MTIfNonZero>

現在のエントリを強調表示するエントリリストの続きを読む

現在のエントリの属するカテゴリ内のエントリリスト(リスト取得のみ)

2008年2月 4日 21:58 | Writer: apstar | 記事本文

現在のエントリの属するカテゴリ内の他のエントリを列挙するコードサンプルです。MTTagInvokeプラグインと同じようなことを行っています。

EntCat変数へMTEntryCategoryテンプレートタグで取得した「エントリの存在するカテゴリ」を取得します。次にMTEntriesでcategory="$EntCat"モデファイアを指定してリスト取得しています。

なお、以下のコードはエントリページにしか対応していません。

コード

<MTSetVarBlock name="EntCat"><MTEntryCategory></MTSetVarBlock>
<ul>
<MTEntries category="$EntCat">
   <li><a href="<MTEntryPermalink>"><MTEntryTitle></a></li>
</MTEntries>
</ul>

現在のエントリの属するカテゴリ内のエントリリスト(リスト取得のみ)の続きを読む

現在のエントリの属するカテゴリ内のエントリリスト(自エントリを含まない)

2008年2月 7日 23:55 | Writer: apstar | 記事本文

現在のエントリの属するカテゴリ内の他のエントリを列挙するコードサンプルです。MTTagInvokeプラグインと同じようなことを行っています。更にこのサンプルでは、自エントリをリストへ含まないようにしています。

EntCat変数へMTEntryCategoryテンプレートタグで取得した「エントリの存在するカテゴリ」を取得します。CurEnt変数へは自らのエントリタイトルを代入しておきます。

次にMTEntriesでcategory="$EntCat"モデファイアを指定してリスト取得しています。そのループの中では、LopEnt変数へループ毎のエントリタイトルを代入、それと自エントリ変数CurEnt変数とをMTIf文で比較し、一致しない場合(ne="$CurEnt" モデファイアを指定)のみリストを生成しています。

コード

<MTSetVarBlock name="EntCat"><MTEntryCategory></MTSetVarBlock>
<MTSetVarBlock name="CurEnt"><MTEntryTitle></MTSetVarBlock>
<ul>
<MTEntries category="$EntCat">
   <MTSetVarBlock name="LopEnt"><MTEntryTitle></MTSetVarBlock>
   <MTIf name="LopEnt" ne="$CurEnt">
      <li><a href="<MTEntryPermalink>"><MTEntryTitle></a></li>
   </MTIf>
</MTEntries>
</ul>

現在のエントリの属するカテゴリ内のエントリリスト(自エントリを含まない)の続きを読む

現在のエントリの属するカテゴリ内のエントリリスト(自エントリを強調表示)

2008年2月 8日 00:06 | Writer: apstar | 記事本文

現在のエントリの属するカテゴリ内の他のエントリを列挙するコードサンプルです。MTTagInvokeプラグインと同じようなことを行っています。更にこのサンプルでは、自エントリをstrongタグにて強調表示しています。

EntCat変数へMTEntryCategoryテンプレートタグで取得した「エントリの存在するカテゴリ」を取得します。CurEnt変数へは自らのエントリタイトルを代入しておきます。

次にMTEntriesでcategory="$EntCat"モデファイアを指定してリスト取得しています。そのループの中では、LopEnt変数へループ毎のエントリタイトルを代入、それと自エントリ変数CurEnt変数とをMTIf文で比較し、一致しない場合(ne="$CurEnt" モデファイアを指定)のみ普通のリスト生成、MTElse側(つまり、一致する)時にstrong強調表示にてリスト生成しています。

コード

<MTSetVarBlock name="EntCat"><MTEntryCategory></MTSetVarBlock>
<MTSetVarBlock name="CurEnt"><MTEntryTitle></MTSetVarBlock>
<ul>
<MTEntries category="$EntCat">
   <MTSetVarBlock name="LopEnt"><MTEntryTitle></MTSetVarBlock>
   <MTIf name="LopEnt" ne="$CurEnt">
      <li><a href="<MTEntryPermalink>"><MTEntryTitle></a></li>
   <MTElse>
      <li><a href="<MTEntryPermalink>"><strong><MTEntryTitle></strong></a></li>
   </MTIf>
</MTEntries>
</ul>

現在のエントリの属するカテゴリ内のエントリリスト(自エントリを強調表示)の続きを読む

現在のエントリと同じタグのついた他エントリのリストアップ(自エントリは含まない)

2008年2月 9日 00:01 | Writer: apstar | 記事本文

現在のエントリと同じタグのついた他のエントリを10件列挙するコードサンプルです。現在のエントリ・他のエントリに複数タグがつけられていても正常に動作します。

TagStrings変数へ、現在のエントリで使用されているタグをカンマ区切りで全て繋げた文字列を代入します。

MTEntriesループ中では、エントリひとつひとつのタグを変数へ代入、TagStrings変数へエントリひとつひとつのタグが含まれていないかチェックします。含まれている場合はFind変数へ1をセット、これをフラグとして次からのタグの評価をキャンセルします。これは、他のエントリの最後のタグが、現在のエントリに含まれていない場合フラグがクリアされるのを防ぐためです。

最後に、Find変数が1である(=同じタグが含まれている)他のエントリを、10件取得しています。10件のカウントはEntCnt変数をインクリメントカウントすることで実現しています。

コード

<MTSetvar name="EntCnt" value="0">
<MTSetVarBlock name="CurEnt"><MTEntryTitle></MTSetVarBlock>
<MTSetVarBlock name="TagStrings"><MTEntryTags grue=","><MTTagName></MTEntryTags></MTSetVarBlock>

<ul>
<MTEntries tag="$EntTags">
   <MTSetVarBlock name="LopEnt"><MTEntryTitle></MTSetVarBlock>

   <MTSetVar name="Find" value="0">
   <MTEntryTags>
      <MTSetVarBlock name="tmpTagName"><MTTagName></MTSetVarBlock>
      <MTIf name="Find" eq="0">
         <MTIf name="TagStrings" like="$tmpTagName">
            <MTSetVar name="Find" value="1">
         </MTIf>
      </MTIf>
   </MTEntryTags>

   <MTIf name="Find" eq="1">
      <MTIf name="LopEnt" ne="$CurEnt">
         <MTSetVar name="EntCnt" op="inc">
         <MTIf name="EntCnt" le="10">
            <li><a href="<MTEntryPermalink>"><MTEntryTitle></a></li>
         </MTIf>
      </MTIf>
   </MTIf>
</MTEntries>
</ul>

現在のエントリと同じタグのついた他エントリのリストアップ(自エントリは含まない)の続きを読む

現在のエントリと同じタグのついた他エントリのリストアップ(自エントリを強調表示)

2008年2月 9日 00:33 | Writer: apstar | 記事本文

現在のエントリと同じタグのついた他のエントリを100件まで列挙するコードサンプルです。リストへは、現在のエントリを強調表示して含めます。現在のエントリ・他のエントリに複数タグがつけられていても正常に動作します。

動作原理は「現在のエントリと同じタグのついた他エントリのリストアップ(自エントリは含まない)」と同じですが、このサンプルでは現在のエントリをstrongタグで強調表示しています。

注意点ですが、コード後半のMTIfの順序が、自エントリは含まない場合と異なります。

コード

<MTSetvar name="EntCnt" value="0">
<MTSetVarBlock name="CurEnt"><MTEntryTitle></MTSetVarBlock>
<MTSetVarBlock name="TagStrings"><MTEntryTags grue=","><MTTagName></MTEntryTags></MTSetVarBlock>

<ul>
<MTEntries tag="$EntTags">
   <MTSetVarBlock name="LopEnt"><MTEntryTitle></MTSetVarBlock>

   <MTSetVar name="Find" value="0">
   <MTEntryTags>
      <MTSetVarBlock name="tmpTagName"><MTTagName></MTSetVarBlock>
      <MTIf name="Find" eq="0">
         <MTIf name="TagStrings" like="$tmpTagName">
            <MTSetVar name="Find" value="1">
         </MTIf>
      </MTIf>
   </MTEntryTags>

   <MTIf name="Find" eq="1">
      <MTSetVar name="EntCnt" op="inc">
      <MTIf name="EntCnt" le="100">
         <MTIf name="LopEnt" ne="$CurEnt">
            <li><a href="<MTEntryPermalink>"><MTEntryTitle></a></li>
         <MTElse>
            <li><a href="<MTEntryPermalink>"><strong><MTEntryTitle></strong></a></li>
         </MTIf>
      </MTIf>
   </MTIf>
</MTEntries>
</ul>

現在のエントリと同じタグのついた他エントリのリストアップ(自エントリを強調表示)の続きを読む

更新のあったエントリーを新しい順に10件表示する

2008年2月 9日 01:09 | Writer: apstar | 記事本文

更新のあったエントリーを新しい順に10件表示するコードサンプルです。更新日時ですが、エントリの投稿日時ではなく、最後に編集して保存更新した日時です。

<MTEntries sort_by="modified_on" lastn="10">では、最新10件の記事から更新記事を探しますので、目的の結果は得られません。

このサンプルは、<MTEntries lastn="999">として全ての(999件の)エントリから更新日時の新しい順を配列へセットしてリスト化するという手法をとっています。エントリ名の横には、投稿日時と更新日時を付加しています。

コード

<MTSetVar name="IncN" value="0">
<MTEntries lastn="999" sort_by="modified_on">
   <MTSetVar name="IncN" op="++">
   <MTIf name="IncN" le="10">
      <MTSetVarBlock name="ModifiedEntry[$IncN]"><MTEntryTitle> / 投稿日時:<MTEntryCreatedDate> / 更新日時:<MTEntryModifiedDate></MTSetVarBlock>
   </MTIf>
</MTEntries>
<MTFor var="x" from="1" to="$IncN">
   <p><MTGetVar name="ModifiedEntry[$x]"></p>
</MTFor>

更新のあったエントリーを新しい順に10件表示するの続きを読む

エントリの投稿日時と更新日時を取得する

2008年2月 9日 21:29 | Writer: apstar | 記事本文

Movable Typeでは、エントリの更新日時のほかに、更新日時も取得できます。

MTEntryCreatedDate

MTEntryCreatedDateテンプレートタグは、ブログ記事、ウェブページの作成日時を出力するファンクションタグです。モディファイア format と language を指定して、日時の表示方法を変更することも可能です。

コード1

<p>投稿日時:<MTEntryCreatedDate></p>

このエントリにコード1を貼った動作サンプル

投稿日時:2008年2月 9日 21:38

MTEntryModifiedDate

MTEntryModifiedDateテンプレートタグは、ブログ記事、ウェブページの更新日時を出力するファンクションタグです。更新日時は再構築した日時ではなく、更新保存された日時です。モディファイア format と language を指定して、日時の表示方法を変更することも可能です。

コード2

<p>更新日時:<MTEntryModifiedDate></p>

このエントリにコード2を貼った動作サンプル

更新日時:2008年2月 9日 21:38

エントリリストへ、特定カテゴリ用画像を付与する

2008年2月12日 23:00 | Writer: apstar | 記事本文

エントリリストへ、特定カテゴリ用画像を付与するサンプルです。

先頭付近のCategory1、Category2というのはカテゴリ名であり、それをハッシュのキーに、それに応対する「特定カテゴリ用画像」へのリンクを値へ代入します。

MTEntriesループ中では、ハッシュのキー(カテゴリ名)がループ中のエントリのカテゴリと一致するかどうか判定し、一致したときに特定カテゴリ用画像を付加しています。内部ではFind変数を使いまわし、一度ループを繰り返すごとにリセットされます。

コード

<MTSetHashVar name="Compare">
   <MTSetVar name="Category1" value="<img src="http://www.example.com/blog/blogimg/001.gif" />">
   <MTSetVar name="Category2" value="<img src="http://www.example.com/blog/blogimg/002.gif" />">
</MTSetHashVar>
<ul>
<MTEntries lastn="999">
   <MTSetvar name="Find" value="0">
   <MTSetVarBlock name="EntCat"><MTEntryCategory></MTSetVarBlock>
   <MTLoop name="Compare" sort_by="key">
      <MTSetVar name="imga" value="$__value__">
      <MTIf name="__key__" eq="$EntCat">
         <li><MTEntryTitle><MTGetVar name="imga"></li>
         <MTSetvar name="Find" value="1">
      </MTIf>
   </MTLoop>
   <MTIf name="Find" eq="0">
      <li><MTEntryTitle></li>
   </MTIf>
</MTEntries>
</ul>

横並べカテゴリ内エントリリスト

2008年3月14日 22:15 | Writer: apstar | 記事本文

エントリリストを、スラッシュで区切って横並べにするサンプルです。

一度エントリ数を全て数えつつエントリへのリンクを取得(現在のエントリのみ強調表示するstrongタグを付与する)し、のちにMTForループにて一度にエントリリストを吐き出します。最後のエントリのみ、スラッシュを付与しません。

エントリ数がある程度少なく、スペース的に縦長の領域が取れないときなどに有効です。

コード

<MTSetVar name="Inc" value="0">
<MTSetVarBlock name="EntCat"><MTEntryCategory></MTSetVarBlock>
<MTSetVarBlock name="CurEnt"><MTEntryTitle><MTEntryID></MTSetVarBlock>
<MTEntries category="$EntCat">
   <MTSetVar name="Inc" op="++">
   <MTSetVarBlock name="LopEnt"><MTEntryTitle><MTEntryID></MTSetVarBlock>
   <MTIf name="LopEnt" ne="$CurEnt">
      <MTSetvarBlock name="EntrisData[$Inc]"><a href="<MTEntryPermalink>"><MTEntryTitle></a></MTSetvarBlock>
   <MTElse>
      <MTSetvarBlock name="EntrisData[$Inc]"><a href="<MTEntryPermalink>"><strong><MTEntryTitle></strong></a></MTSetvarBlock>
   </MTIf>
</MTEntries>
<MTFor var="x" from="1" to="$Inc">
   <MTIf name="x" lt="$Inc">
      <MTGetVar name="EntrisData[$x]"> / 
   <MTElse>
      <MTGetVar name="EntrisData[$x]">
   </MTIf>
</MTFor>

横並べカテゴリ内エントリリストの続きを読む

エントリリストをファイル名で並べ替える

2008年3月18日 18:04 | Writer: apstar | 記事本文

エントリリストを、ファイル名で並べ替えるサンプルです。

一度全てのエントリをハッシュ変数へ代入しますが、このときのキーにファイルのベースネーム(MTEntryBaseNameテンプレートタグで取得)を利用して、後のMTLoopで並べ替えのキーに利用する仕組みです。

このコードは、属するカテゴリに関係なくエントリを時系列に表示すればいい場合には特に役には立ちませんが、カテゴリ名・エントリ名ともにあらかじめ連番を振り、将来の「ファイル名による並べ替え」に備えているような設計のサイトでは役に立ちます。

コード

現在のカテゴリに属するエントリをファイル名順に並べ替えています。

<MTSetVarBlock name="CurCat"><MTEntryCategory></MTSetVarBlock>
<MTEntries category="$CurCat" lastn="0">
   <MTSetVarBlock name="EntBaseName"><MTEntryBaseName></MTSetVarBlock>
   <MTSetVarBlock name="EntLinkSet"><li><a href="<MTEntryPermalink>"><MTEntryTitle></a></li></MTSetVarBlock>
   <MTSetHashVar name="EntInfo">
      <MTSetVar name="$EntBaseName" value="$EntLinkSet">
   </MTSetHashVar>
</MTEntries>
<ul>
<mt:loop  name="EntInfo" sort_by="key">
   <$mt:getvar name="__value__"$>
</mt:loop>
</ul>

エントリリストをファイル名で並べ替えるの続きを読む

エントリ
タグ
はじめに
導入編
ローカル環境
変数
サンプル
その他
トラブル集
2008 mtde.info