Top > Movable Type > テンプレートタグ [全て開く]
2008年4月30日

Movable Type のブロックタグにファンクションタグで使うモディファイアを指定する

April 30,2008 3:13 AM
Tag:[]
Permalink

「ブロックタグに、ファンクションタグで使うようなグローバルモディファイアを指定するとどうなるのか」という実験です。オチあはりません。

以下、MTEntries タグに encode_html="1" を設定しない場合と、設定した場合の「最近のエントリー」を出力してみます。

1.encode_htmlなしの場合

サブテンプレート

<mt:entries>
  <mt:entriesHeader><ul></mt:entriesHeader>
    <li><a href="<mt:entryPermalink />"><mt:entryTitle /></a></li>
  <mt:entriesFooter><ul></mt:entriesFooter>
</mt:entries>

出力結果

<ul>
<li><a href="http://user-dmain/2008/04/5.html">ブログ記事5</a></li>
<li><a href="http://user-dmain/2008/04/4.html">ブログ記事4</a></li>
<li><a href="http://user-dmain/2008/04/3.html">ブログ記事3</a></li>
<li><a href="http://user-dmain/2008/03/2.html">ブログ記事2</a></li>
<li><a href="http://user-dmain/2008/02/1.html">ブログ記事1</a></li>
<ul>

2.encode_htmlありの場合

サブテンプレート

<mt:entries encode_html="1">
  <mt:entriesHeader><ul></mt:entriesHeader>
    <li><a href="<mt:entryPermalink />"><mt:entryTitle /></a></li>
  <mt:entriesFooter><ul></mt:entriesFooter>
</mt:entries>

出力結果

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://user-dmain/2008/04/5.html&quot;&gt;ブログ記事5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://user-dmain/2008/04/4.html&quot;&gt;ブログ記事4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://user-dmain/2008/04/3.html&quot;&gt;ブログ記事3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://user-dmain/2008/03/2.html&quot;&gt;ブログ記事2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://user-dmain/2008/02/1.html&quot;&gt;ブログ記事1&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;

ということで、このサンプルでは見事にブロック内部全体がエンコードされました。
なお、これを使えばブラウザの[ページ]-[ソースの表示]を使わずに、ブラウザで直接ソースコードを見ることができます。

「グローバルモディファイア」という名前は伊達ではありませんでした。

Comments [0] | Trackbacks [0]
2008年2月24日

EntryCategoryID プラグイン

現在のブログ記事の主カテゴリーのID番号を出力する EntryCategoryID プラグインを作成しました。このプラグインは、MTEntries ブロック内か、ブログ記事アーカイブで使用できます。

1.ダウンロード

下記のリンクからプラグインアーカイブをダウンロードし、任意のフォルダに保存してください。

EntryCategoryID.zip

2.アップロード

プラグインアーカイブを解凍し、中にある EntryCategoryID.pl を plugins ディレクトリにアップロードしてください。
ブログ管理画面より「システム」→「プラグイン」でプラグイン一覧を表示し、次のように表示されればOKです。

3.サンプル

<MTEntries>
  <$MTEntryCategoryID$>
</MTEntries>

しょぼいサンプルですいません。具体的な使い方は次回エントリーします。

Comments [2] | Trackbacks [0]
2008年2月14日

MTIf タグの test モディファイアで Perl の式を利用する

February 14,2008 2:33 AM
Tag:[, ]
Permalink

Movable Type 4.1 の MTIf タグに test モディファイアというものが追加されていましたので、本エントリーにて紹介致します。

1.用途

test モディフィアの用途は、Perlの式を実行し、結果を利用して条件分岐を行うことです。Movable Type の MTSetVar タグ等で作成した変数の値を判定することもできます。

2.サンプル

MTSetVarタグで作った変数 foo の値が1文字以上の英文字であることを判定し、マッチすれば MTIf タグのブロックを実行します。

<$mt:setvar name="foo" value="OK"$>
 
<mt:if test="$foo =~ m/\w+/;">
  <$mt:getvar name="foo"$>
</mt:if>

MTSetVarタグで作った変数 bar の値が5以上であることを判定し、マッチすれば MTIf タグのブロックを実行します。

<$mt:setvar name="bar" value="10"$>
 
<mt:if test="$bar > 5">
  <$mt:getvar name="bar"$>
</mt:if>

このタグを利用すれば、かなりすごいことができそうに思われますが、とりあえず簡単なサンプルでお許しください。

Comments [0] | Trackbacks [0]
2008年2月10日

MTIf タグの tag モディファイアでテンプレートタグの値を直接参照する

February 10,2008 2:12 AM
Tag:[, , ]
Permalink

Movalbe Type 4.1 で、MTIf タグに tag モディファイアがいつのまにか追加されていました。本エントリーで紹介します。

使い方は簡単で、tag モディファイアにテンプレートタグ(ファンクションタグ)を指定すれば、変数のように値を参照できます。

1.基本

<mt:if tag="[ファンクションタグ名]">

指定したテンプレートタグに値がある場合は true、ない場合は false を返却します。

2.サンプル

ファンクションタグの値を MTSetVarBlock タグで一旦変数に取得して判定するケース

<mt:setvarblock name="count"><$MTEntriesCount$></mt:setvarblock>
<mt:if name="count">
     :
</mt:if>

は、

<mt:if tag="MTEntriesCount">
     :
</mt:if>

または

<mt:if tag="EntriesCount">
     :
</mt:if>

と書くことができます。

3.応用

以前紹介した、「ブログ記事に同一カテゴリーのブログ記事リストを表示(MT4版)」を少し書き換えてみます。

変更前

<MTIf name="entry_template">
<MTSetVarBlock name="entryid"><$MTEntryID$></MTSetVarBlock>
<MTSetVarBlock name="entrycategory"><$MTEntryCategory$></MTSetVarBlock>
 
<dt class="sidetitle">
Entries of this Category
</dt>
 
<dd class="side">
  <ul>
  <MTEntries category="$entrycategory">
  <MTSetVarBlock name="currententryid"><$MTEntryID$></MTSetVarBlock>
  <MTIf name="currententryid" ne="$entryid">
    <li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
  </MTIf>
  </MTEntries>
  </ul>
</dd>
</MTIf>

変更後

<MTIf name="entry_template">
<MTSetVarBlock name="entryid"><$MTEntryID$></MTSetVarBlock>
<MTSetVarBlock name="entrycategory"><$MTEntryCategory$></MTSetVarBlock>
 
<dt class="sidetitle">
Entries of this Category
</dt>
 
<dd class="side">
  <ul>
  <MTEntries category="$entrycategory">
  <MTIf tag="EntryID" ne="$entryid">
    <li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li>
  </MTIf>
  </MTEntries>
  </ul>
</dd>
</MTIf>

少し見通しが良くなりました。

Comments [2] | Trackbacks [0]
2007年12月27日

MTLoop タグによる配列変数・ハッシュ変数の制御

December 27,2007 1:35 AM
Tag:[, ]
Permalink

Movable Type 4.0 では管理画面用だった MTLoop タグが、Movable Type 4.1 ではテンプレート上で利用できるようになりました。これにより配列やハッシュの取得が MTLoop タグで実現できるようになります。

以下、MTLoop での配列とハッシュの利用方法を紹介します。

1.配列を取得する

MTFor タグで設定し、MTLoop タグで取得するサンプルを示します。

<mt:for var="i" from="0" to="9">
    <mt:setvar name="foo[$i]" value="$i">
</mt:for>
 
<mt:loop name="foo">
    <mt:getvar name="__value__">
</mt:loop>

MTLoop タグの使い方は、name モディファイアに配列変数名を設定するだけで、ここでは foo を設定しています。

配列変数 foo の値は予約変数 __value__ に自動的に設定されるので、あとは MTGetVar タグの name モディファイアに指定するだけです。

MTLoop タグの部分を MTFor タグで書くと

<mt:for var="i" from="0" to="9">
    <mt:setvar name="foo[$i]" value="$i">
</mt:for>

となるので、MTLoop タグの方が簡単に書けることがお分かりになると思います。

なお、MTLoopタグでは配列のインデックスが0から処理が開始されるため、設定側の MTFor タグの from モディファイアは「0」、to モディファイアは「9」を設定しています。

2.ハッシュを取得する

4.1 ベータ 2 から新しく追加された sethashvar タグ(ハッシュをまとめて定義できるタグ)を用いて、ハッシュを作成し、MTLoop タグで取得するサンプルを示します。

<mt:sethashvar name="week">
<mt:setvar name="mon" value="Monday">
<mt:setvar name="tue" value="Tuesday">
<mt:setvar name="wed" value="Wednesday">
<mt:setvar name="thu" value="Thursday">
<mt:setvar name="fri" value="Friday">
<mt:setvar name="sat" value="Saturday">
<mt:setvar name="sun" value="Sunday">
</mt:sethashvar>
 
<mt:loop name="week">
    <$mt:getvar name="__key__"$> <$mt:getvar name="__value__"$>
</mt:loop>

テンプレートを再構築すると、下のように出力されます。

sun Sunday
fri Friday
tue Tuesday
sat Saturday
mon Monday
wed Wednesday
thu Thursday

配列変数の時と同様、name モディファイアに配列変数名を設定します。ここでは week を設定します。

配列変数 week のキーの値は予約変数 __key__ に、キーに対応する値は予約変数 __value__ に自動的に設定されるので、それぞれ MTGetVar タグの name モディファイアに指定します。

ハッシュは配列のような順序性がありませんが、sort_by モディファイアを設定することで、一定の規則にしたがって出力されます。

キーの文字列順で並べ替え

<mt:loop name="[変数名]" sort_by="key">

キーの文字列順(逆順)で並べ替え

<mt:loop name="[変数名]" sort_by="key reverse">

キーに対応する値の文字列順で並べ替え

<mt:loop name="[変数名]" sort_by="value">

キーに対応する値の文字列順(逆順)で並べ替え

<mt:loop name="[変数名]" sort_by="value reverse">

キーに対応する値の文字を数値として比較・並べ替え

<mt:loop name="[変数名]" sort_by="value numeric">

キーに対応する値の文字を数値として比較・並べ替え(逆順)

<mt:loop name="[変数名]" sort_by="value numeric reverse">
Comments [2] | Trackbacks [0]
2007年12月19日

Movable Type 4.1 / MTOS における変数での算術演算子の利用方法

December 19,2007 12:10 AM
Tag:[]
Permalink

昨日エントリーした「Movable Type 4.1 / MTOS における配列とハッシュの利用方法」に加え、MT4.1/MTOS では算術演算子の利用が可能になりました。

詳細は後述しますが、可能な演算は、

  • 加算(+)
  • 減算(-)
  • 乗算(*)
  • 除算(/)
  • 剰余(%)
  • インクリメント(++)
  • デクリメント(--)

で、変数の演算結果を同一変数に保持したり、MTIf タグ等での判定や、判定と同時に演算すること等が可能です。

ということで、こちらについても以下に利用方法をまとめてみました。なお、利用可能と思われるテンプレートタグは下記の通りです。

MTIf
MTUnless
MTGetVar
MTSetVar
MTSetVarBlock
MTSetVarTemplate

1.加算

フォーマット

op モディファイアに"+"または"add"を設定します。定義済みの変数に加算する場合は value モディファイアを記述し、加算したい値を設定します。

値を加算のみする場合

<$mt:setvar name="[変数名]" op="+" value="[加算値]"$>
または
<$mt:setvar name="[変数名]" op="add" value="[加算値]"$>

加算後に表示する場合

<$mt:getvar name="[変数名]" op="+" value="[加算値]"$>
または
<$mt:getvar name="[変数名]" op="add" value="[加算値]"$>

加算した結果を判定する場合(例は等しい場合を判定)

<mt:if name="[変数名]" op="+" value="[加算値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="add" value="[加算値]" eq="[比較値]">

サンプル

変数hogeに+1した結果を設定

<$mt:setvar name="hoge" value="1"$>
<$mt:setvar name="hoge" op="+" value="1"$>

変数hogeに+1した結果を表示

<$mt:setvar name="hoge" value="1"$>
<$mt:getvar name="hoge" op="+" value="1"$>

変数hogeに+1した結果が2であるかを判定

<$mt:setvar name="hoge" value="1"$>
<mt:if name="hoge" op="+" value="1" eq="2">
OK
<mt:else>
NG
</mt:if>

2.減算

フォーマット

op モディファイアに"-"または"sub"を設定します。定義済みの変数に減算する場合は value モディファイアを記述し、減算したい値を設定します。

値を減算のみする場合

<$mt:setvar name="[変数名]" op="-" value="[減算値]"$>
または
<$mt:setvar name="[変数名]" op="sub" value="[減算値]"$>

減算後に表示する場合

<$mt:getvar name="[変数名]" op="-" value="[減算値]"$>
または
<$mt:getvar name="[変数名]" op="sub" value="[減算値]"$>

減算した結果を判定する場合(例は等しい場合を判定)

<mt:if name="[変数名]" op="-" value="[減算値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="sub" value="[減算値]" eq="[比較値]">

サンプル

変数hogeから-1した結果を設定

<$mt:setvar name="hoge" value="10"$>
<$mt:setvar name="hoge" op="-" value="1"$>

変数hogeから-1した結果を表示

<$mt:setvar name="hoge" value="10"$>
<$mt:getvar name="hoge" op="-" value="1"$>

変数hogeに-1した結果が2であるかを判定

<$mt:setvar name="hoge" value="3"$>
<mt:if name="hoge" op="-" value="1" eq="2">
OK
<mt:else>
NG
</mt:if>

3.乗算

フォーマット

op モディファイアに"*"または"mul"を設定します。定義済みの変数に乗算する場合は value モディファイアを記述し、乗算したい値を設定します。

値を乗算のみする場合

<$mt:setvar name="[変数名]" op="*" value="[乗数値]"$>
または
<$mt:setvar name="[変数名]" op="mul" value="[乗数値]"$>

乗算後に表示する場合

<$mt:getvar name="[変数名]" op="*" value="[乗数値]"$>
または
<$mt:getvar name="[変数名]" op="mul" value="[乗数値]"$>

乗算した結果を判定する場合(例は等しい場合を判定)

<mt:if name="[変数名]" op="*" value="[乗数値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="mul" value="[乗数値]" eq="[比較値]">

サンプル

変数hogeに2倍した結果を変数に設定

<$mt:setvar name="hoge" value="1"$>
<$mt:setvar name="hoge" op="*" value="2"$>

変数hogeを2倍した結果を表示

<$mt:setvar name="hoge" value="1"$>
<$mt:getvar name="hoge" op="*" value="2"$>

変数hogeに2倍した結果が6であるかを判定

<$mt:setvar name="hoge" value="3"$>
<mt:if name="hoge" op="*" value="2" eq="6">
OK
<mt:else>
NG
</mt:if>

4.除算

フォーマット

op モディファイアに"/"または"div"を設定します。定義済みの変数に除算する場合は value モディファイアを記述し、除算したい値を設定します。

値を除算のみする場合

<$mt:setvar name="[変数名]" op="/" value="[除数値]"$>
または
<$mt:setvar name="[変数名]" op="div" value="[除数値]"$>

除算後に表示する場合

<$mt:getvar name="[変数名]" op="/" value="[除数値]"$>
または
<$mt:getvar name="[変数名]" op="div" value="[除数値]"$>

除算した結果を判定する場合(例は等しい場合を判定)

<mt:if name="[変数名]" op="/" value="[除数値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="div" value="[除数値]" eq="[比較値]">

サンプル

変数hogeを2で割った結果を変数に設定

<$mt:setvar name="hoge" value="10"$>
<$mt:setvar name="hoge" op="/" value="2"$>

変数hogeを2で割った結果を表示

<$mt:setvar name="hoge" value="10"$>
<$mt:getvar name="hoge" op="/" value="2"$>

変数hogeを2で割った結果が3であるかを判定

<$mt:setvar name="hoge" value="6"$>
<mt:if name="hoge" op="/" value="2" eq="3">
OK
<mt:else>
NG
</mt:if>

5.剰余

フォーマット

op モディファイアに"%"または"mod"を設定します。定義済みの変数に剰余する場合は value モディファイアを記述し、剰余したい値を設定します。

値を剰余のみする場合

<$mt:setvar name="[変数名]" op="%" value="[剰余値]"$>
または
<$mt:setvar name="[変数名]" op="mod" value="[剰余値]"$>

剰余後に表示する場合

<$mt:getvar name="[変数名]" op="%" value="[剰余値]"$>
または
<$mt:getvar name="[変数名]" op="mod" value="[剰余値]"$>

剰余した結果を判定する場合(例は等しい場合を判定)

<mt:if name="[変数名]" op="%" value="[剰余値]" eq="[比較値]">
または
<mt:if name="[変数名]" op="mod" value="[剰余値]" eq="[比較値]">

サンプル

変数hogeを3で割った余りを変数に設定

<$mt:setvar name="hoge" value="5"$>
<$mt:setvar name="hoge" op="%" value="3"$>

変数hogeを3で割った余りを表示

<$mt:setvar name="hoge" value="5"$>
<$mt:getvar name="hoge" op="%" value="3"$>

変数hogeを3で割った余りが1であるかを判定

<$mt:setvar name="hoge" value="7"$>
<mt:if name="hoge" op="%" value="3" eq="1">
OK
<mt:else>
NG
</mt:if>

6.インクリメント

「インクリメント」とは、値に1を加算することを指します。

フォーマット

op モディファイアに"++"または"inc"を設定します。なお、定義済みの変数にしかインクリメントすることはできません。

値をインクリメントのみする場合

<$mt:setvar name="[変数名]" op="++"$>
または
<$mt:setvar name="[変数名]" op="inc"$>

インクリメント後に表示する場合

<$mt:getvar name="[変数名]" op="++"$>
または
<$mt:getvar name="[変数名]" op="inc"$>

インクリメントした結果を判定する場合(例は等しい場合を判定)

<mt:if name="[変数名]" op="++" eq="[比較値]">
または
<mt:if name="[変数名]" op="inc" eq="[比較値]">

サンプル

変数hogeをインクリメント

<$mt:setvar name="hoge" value="1"$>
<$mt:setvar name="hoge" op="++"$>

変数hogeをインクリメントした結果を表示

<$mt:setvar name="hoge" value="1"$>
<$mt:getvar name="hoge" op="++"$>

変数hogeをインクリメントした結果が2であるかを判定

<$mt:setvar name="hoge" value="1"$>
<mt:if name="hoge" op="++" eq="2">
OK
<mt:else>
NG
</mt:if>

7.デクリメント

「デクリメント」とは、値から1を減算することを指します。

フォーマット

op モディファイアに"--"または"dec"を設定します。なお、定義済みの変数にしかデクリメントすることはできません。

値をデクリメントのみする場合

<$mt:setvar name="[変数名]" op="--"$>
または
<$mt:setvar name="[変数名]" op="dec"$>

デクリメント後に表示する場合

<$mt:getvar name="[変数名]" op="--"$>
または
<$mt:getvar name="[変数名]" op="dec"$>

デクリメントした結果を判定する場合(例は等しい場合を判定)

<mt:if name="[変数名]" op="--" eq="[比較値]">
または
<mt:if name="[変数名]" op="dec" eq="[比較値]">

サンプル

変数hogeをデクリメント

<$mt:setvar name="hoge" value="10"$>
<$mt:setvar name="hoge" op="--"$>

変数hogeをデクリメントした結果を表示

<$mt:setvar name="hoge" value="10"$>
<$mt:getvar name="hoge" op="--"$>

変数hogeをデクリメントした結果が1であるかを判定

<$mt:setvar name="hoge" value="2"$>
<mt:if name="hoge" op="--" eq="1">
OK
<mt:else>
NG
</mt:if>

8.注意事項

文字列や数字を含んだ文字列に演算を行っても何も行われません。また、ベータ1a版の動作確認では、他のリスト系テンプレートタグとの組み合わせでは初期値が1でないと機能しないようです(下記)。

NG(初期値0)

<$mt:setvar name="hoge" value="0"$>
<MTEntries>
<$mt:setvar name="hoge" op="++"$>
</MTEntries>
<$mt:getvar name="hoge">

OK(初期値1)

<$mt:setvar name="hoge" value="1"$>
<MTEntries>
<$mt:setvar name="hoge" op="++"$>
</MTEntries>
<$mt:getvar name="hoge">
Comments [2] | Trackbacks [0]
2007年12月18日

Movable Type 4.1 / MTOS における配列とハッシュの利用方法

December 18,2007 1:11 AM
Tag:[, , ]
Permalink

公にアナウンスされていないようですが、MT4.1/MTOS では変数で配列とハッシュの操作が可能になり、変数処理がよりプログラマブルになりました。

ということで、以下に利用方法をまとめてみました。

1.配列

配列とは、同じ型のデータを連続的に並べた集合を指します。同一の変数名にインデックス(添え字)を付与することでデータを識別することができます。

例えば、week という変数に、Monday から Sunday までの文字列を設定するには、

week[0] = 'Monday'
week[1] = 'Tuesday'
week[2] = 'Wednesday'
week[3] = 'Thursday'
week[4] = 'Friday'
week[5] = 'Saturday'
week[6] = 'Sunday'

という感じになります。

MTSetVar による配列の設定

MTSetVar タグで配列を設定する方法は2通りあります。name モディファイアの変数名に直接インデックスを記述して、value モディファイアに値を設定するか(下)、

<MTSetVar name="week[0]" value="Mon">
<MTSetVar name="week[1]" value="Tue">
<MTSetVar name="week[2]" value="Wed">
     :

index モディファイアを記述し、そこにインデックスを設定します(下)。value モディファイアは同じです。

<MTSetVar name="week" index="0" value="Mon">
<MTSetVar name="week" index="1" value="Tue">
<MTSetVar name="week" index="2" value="Wed">
     :

MTSetVarBlock による配列の設定

MTSetVar タグに配列を設定する方法も、MTSetVar タグと大体同じで、name モディファイアの変数名に直接インデックスを記述し、value モディファイアの代わりにブロック内に値を記述します。

<MTSetVarBlock name="week[0]">
    :
</MTSetVarBlock>
<MTSetVarBlock name="week[1]">
    :
</MTSetVarBlock>
<MTSetVarBlock name="week[2]">
    :
</MTSetVarBlock>
    :

または、index モディファイアを記述し、そこにインデックスを設定します(下)。

<MTSetVarBlock name="week" index="0">
    :
</MTSetVarBlock>
<MTSetVarBlock name="week" index="1">
    :
</MTSetVarBlock>
<MTSetVarBlock name="week" index="2">
    :
</MTSetVarBlock>
    :

MTFor による配列の設定

単純な数値であれば MTFor で設定することも可能です。

下記に、0~6の値を配列に設定するサンプルを示します。MTFor タグの var モディファイアの変数名に配列のインデックスが設定されます。from モディファイアに最小値、to モディファイアに最大値を設定し、MTFor ブロック内に MTSetVar を記述して、配列のインデックスとなる $x を記述します。

<mt:for var="x" from="0" to="6">
    <MTSetVar name="week[$x]" value="$x">
</mt:for>

MTSetVar の name モディファイアと別に、index モディファイアに $x を記述してもOKです。

<mt:for var="x" from="0" to="6">
    <MTSetVar name="week" index="$x" value="$x">
</mt:for>

繰り返し処理による配列の設定

下記に、ブログ記事タイトルを配列の値に設定するサンプルを示します。

<MTEntries>
    <MTSetVarBlock name="counter"><$MTGetVar name="__counter__"$></MTSetVarBlock>
    <MTSetVarBlock name="entrytitle[$counter]"><$MTEntryTitle$></MTSetVarBlock>
</MTEntries>

2行目の counter は、インデックス値となる __counter__ の値を3行目に直接設定できないため、MTSetVarBlock でワンクッションおいてます。3行目でブログ記事タイトルを配列に設定しています。

配列の取得

配列の内容を取得・表示するには、MTGetVar(または MTVar)で name モディファイアにインデックスつきの変数名を指定します。

<MTGetVar name="week[0]">
<MTGetVar name="week[1]">
<MTGetVar name="week[2]">
     :

実行結果

Mon
Tue
Wed
 :

または、MTGetVar(または MTVar)で name モディファイアと別に index モディファイアにインデックス値を指定します。実行結果は同じです。

<MTGetVar name="week" index="0">
<MTGetVar name="week" index="1">
<MTGetVar name="week" index="2">
     :

さらに MTFor タグを使うことで、繰り返しによる取得も可能です。

MTFor タグの var モディファイアの値が配列のインデックス値となります。from モディファイアに最小値、to モディファイアに最大値を設定し、MTFor ブロック内に MTGetVar を記述して配列の値を取得します。MTGetVar の name モディファイアにインデックス値となる $x を記述します。

<mt:for var="x" from="0" to="6">
    <MTGetVar name="week[$x]">
</mt:for>

MTGetVar の name モディファイアと別に、index モディファイアに $x を記述してもOKです。

<mt:for var="x" from="0" to="6">
    <MTGetVar name="week" index="$x">
</mt:for>

配列の要素数を求める

count 関数により、配列を設定した後の要素数を求めます。
フォーマットは、

<MTGetVar name="count(week)">

で、name モディファイアに要素数を求める関数名(count)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。

実行結果

7

または、

<MTGetVar name="week" function="count">

と書いても同じです。function モディファイアに関数名 count を記述します。

配列の最後からデータを取得する

pop 関数により、配列の最後からデータを取得し、配列から取得データを削除します。
フォーマットは、

<MTGetVar name="pop(week)">

で、name モディファイアに関数名(pop)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。

実行結果(結果には表示されませんが配列のインデックスが-1されています)

Sun

または、

<MTGetVar name="week" function="pop">

と書いても同じです。function モディファイアに関数名 pop を記述します。

配列の先頭からデータを取得する

shift 関数により、配列の先頭からデータを取得し、配列から取得データを削除します。

<MTGetVar name="shift(week)">

で、name モディファイアに関数名(shift)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。

実行結果(結果には表示されませんが配列のインデックスが-1されています)

Mon

または、

<MTGetVar name="week" function="shift">

と書iいても同じです。

2.ハッシュ

ハッシュは、配列のインデックスが文字列となったものです。この文字列となったインデックスを「キー」と呼びます。先の1週間の例では、

week[mon] = 'Monday'
week[tue] = 'Tuesday'
week[wed] = 'Wednesday'
week[thu] = 'Thursday'
week[fri] = 'Friday'
week[sat] = 'Saturday'
week[sun] = 'Sunday'

となります。

MTSetVar にハッシュの設定

MTSetVar タグにハッシュを設定する方法は2通りあります。name モディファイアの変数名に直接キー({}で囲まれた部分)を記述するか(下)、

<MTSetVar name="week{mon}" value="Monday">
<MTSetVar name="week{tue}" value="Tuesday">
     :

key モディファイアを記述し、そこにキーを設定します(下)。

<MTSetVar name="week" key="mon" value="Monday">
<MTSetVar name="week" key="tue" value="Tuesday">
     :

MTSetVarBlock にハッシュの設定

MTSetVarBlock タグにハッシュを設定する方法も、MTSetVar タグと大体同じで、name モディファイアの変数名に直接キーを記述し、value 属性の代わりにブロック内に値を記述します。

<MTSetVarBlock name="week{mon}">
     :
</MTSetVarBlock>
<MTSetVarBlock name="week{tue}">
     :
</MTSetVarBlock>
     :

または、key モディファイアを記述し、そこにキーを設定します(下)。

<MTSetVarBlock name="week" key="mon">
     :
</MTSetVarBlock>
<MTSetVarBlock name="week" key="tue">
     :
</MTSetVarBlock>
     :

ハッシュの取得

ハッシュの内容を取得・表示するには、MTGetVar(または MTVar)で name モディファイアにキーつきの変数名を指定します。

<MTGetVar name="week{mon}">
<MTGetVar name="week{tue}">
     :

実行結果

Monday
Tuesday
  :

または、MTGetVar(または MTVar)で name モディファイアと別に key モディファイアにインデックス値を指定します。実行結果は同じです。

<MTGetVar name="week" key="mon">
<MTGetVar name="week" key="tue">
     :

ハッシュの要素数を求める

ハッシュを設定した後の要素数は次の方法で求めます。

<MTGetVar name="count(week)">

name モディファイアに要素数を求める関数名(count)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。

実行結果

7

または、

<MTGetVar name="week" function="count">

と書いても同じです。

ハッシュから要素を削除する

ハッシュから指定したキーの要素を取得し、同時にハッシュから該当要素を削除します。

<MTGetVar name="delete(week)" key="a">

name モディファイアに要素数を求める関数名(delete)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。

実行結果(結果には表示されませんがハッシュのキーが削除されています)

Monday

または、

<MTGetVar name="week" key="a" function="delete">

と書いても同じです。

以上です。
さらに複雑な制御も可能と思われますがとりあえずこの辺で。

Comments [0] | Trackbacks [0]
2007年12月 6日

サイドバーの表示をメインページと同じにする

December 6,2007 1:11 AM
Tag:[, , , ]
Permalink

Movable Type 4 で、サイドバーの表示をメインページと同じにするカスタマイズです。
複数の方から「各ページのサイドバーの表示をメインページを同じしたいのですが」という質問を頂きましたので、このエントリーで紹介致します。

ここでは当ブログの配布テンプレート「Movable Type テンプレート」を例に説明しますが、デフォルトテンプレートでも同様のカスタマイズが可能です。

なお、このエントリーのカスタマイズを行うだけではメインページと全く同じ表示にならないのですが、そのことについては次回のエントリーで解説します。

1.ページによってサイドバーの表示内容が異なる仕組み

ページによってサイドバーの表示内容が異なるのは、サイドバーの各リストを MTIf タグで括り、表示するページを振り分けているためです。MTIf は Movable Type 4 で新たに追加されたテンプレートタグで、ある値を判定することで処理を振り分ける、という機能をもっています。

例えば、タグクラウドがメインページでしか表示されないのは、下のように MTIf タグで全体を括っています。

<MTIf name="main_index">
<dt class="sidetitle">
Tag Clouds
</dt>
 
<dd class="side">
<ul id="tags">
<MTTags>
<li class="module-list-item taglevel<$MTTagRank$>">
<a href="<$MTTagSearchLink$>"><$MTTagName$></a>
</li>
</MTTags>
</ul>
</dd>
</MTIf>

そして、MTIf タグの name 属性に記述された main_index という変数の値が "1" の場合にのみ、MTIf タグブロック内部が実行(=再構築対象)されます。
main_index という変数は、メインインデックスを再構築する時だけ "1" になる仕組みになっています。

また、月別アーカイブリストは、

<MTIf name="module_monthly_archives">
<MTIfArchiveTypeEnabled archive_type="Monthly">
<dt class="sidetitle">
Monthly Archives
</dt>
 
<dd class="side">
<ul>
<MTArchiveList archive_type="Monthly">
<li><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a> [<$MTArchiveCount$>]</li>
</MTArchiveList>
</ul>
</dd>
</MTIfArchiveTypeEnabled>
</MTIf>

と、MTIf タグの name 属性に module_monthly_archives という変数名を用いています。そして月別アーカイブの再構築時だけ module_monthly_archives の値が "1" になり、MTIf タグブロック内が再構築対象となります。

2.メインページと同じ表示にする方法

方法は、各リストを括っているMTIf タグを外すだけです。ただし、「最近のエントリー」については冒頭に記した通り、MTIf タグを外しただけではメインページと同じ表示にならないので、その点は予めご了承ください。

以下、リスト別に示します。赤色部分を削除してください。

最近のエントリー

<MTIf name="module_recent_entries">
<dt class="sidetitle">
Recent Entries
</dt>
 
<dd class="side">
<ul>
<MTEntries lastn="10">
<li><a href="<$MTEntryPermalink$>" title="e<$MTEntryID$>"><$MTEntryTitle$></a></li>
</MTEntries>
</ul>
</dd>
</MTIf>

タグクラウド

<MTIf name="main_index">
<dt class="sidetitle">
Tag Clouds
</dt>
 
<dd class="side">
<ul id="tags">
<MTTags>
<li class="module-list-item taglevel<$MTTagRank$>">
<a href="<$MTTagSearchLink$>"><$MTTagName$></a>
</li>
</MTTags>
</ul>
</dd>
</MTIf>

カテゴリーリスト

<MTIf name="module_category_archives">
<MTIfArchiveTypeEnabled archive_type="Category">
<dt class="sidetitle">
Categories
</dt>
 
<dd class="side">
<div id="categories">
<MTTopLevelCategories>
<MTSubCatIsFirst><ul></MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel></a> [<$MTCategoryCount$>]
<MTElse>
<li><MTCategoryLabel>
</MTElse>
</MTIfNonZero>
<MTSubCatsRecurse max_depth="3">
</li>
<MTSubCatIsLast></ul></MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</dd>
</MTIfArchiveTypeEnabled>
</MTIf>

月別アーカイブリスト

<MTIf name="module_monthly_archives">
<MTIfArchiveTypeEnabled archive_type="Monthly">
<dt class="sidetitle">
Monthly Archives
</dt>
 
<dd class="side">
<ul>
<MTArchiveList archive_type="Monthly">
<li><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a> [<$MTArchiveCount$>]</li>
</MTArchiveList>
</ul>
</dd>
</MTIfArchiveTypeEnabled>
</MTIf>

3.注意事項

タグクラウドは再構築のパフォーマンスに影響があるため、他のアーカイブで表示させない(MTIf タグを外さない)ことをお勧めします。
表示させたい場合は Ajax モジュール化を行ないましょう。

4.サイドバーの MTIf タグに設定されている変数名

参考までに、デフォルトテンプレート(3 カラム)で、各リストの MTIf タグに設定されている変数名をまとめました(配布テンプレートも基本的にこの仕組みにしたがっています)。

リスト名変数名
タグクラウドmain_index
ユーザーアーカイブリストmodule_author_archives
月別アーカイブリストmodule_monthly_archives
月別カテゴリーアーカイブリストmodule_category-monthly_archives
月別ユーザアーカイブリストmodule_author-monthly_archives
最近のエントリーmodule_recent_entries
アイテムリストmain_index
サブカテゴリーリストmodule_category_archives

上記の各変数名がどのページで "1" になるかについては「予約変数一覧 for Movable Type 4(その1)」を参考にしてください。

なお、

main_index
module_recent_entries

の2つの変数については、どちらもメインページのみで "1" となります。

Comments [2] | Trackbacks [0]
2007年10月26日

MTIf タグの like 属性について

October 26,2007 1:38 AM
Tag:[, ]
Permalink

MTIf タグ(MTUnless タグ)の like 属性について、利用方法を紹介します。

この内容は、先日行われた「WebSig24/7 MT4分科会 第1回イベント『WebSig24/7 2007年秋 MT4の日』」で頂いたご質問、

  • like 属性に or 演算子のようなものは使えますか?
  • like 属性を使って、title 要素に表示するデータを収集したいのですが?

の回答です。ご返事が遅くなりましたこと、この場をお借りしてお詫びいたします。

1.like 属性の機能

MTSetVar タグに設定された変数、または MTSetVarBlock, MTSetVarTemplate ブロックタグの変数値が、like 属性に記述された文字列とマッチする場合に実行します。

また、属性値には perl の正規表現を使うことができます(厳密には、属性値は正規表現としてしか扱われません)。

2.ソースコード

lib/MT/Template/ContextHandlers.pm の MTIf タグ(MTUnless タグ)の like 属性の処理は下の青色部分です。

sub _hdlr_if {
    my ($ctx, $args, $cond) = @_;
    my $var = $args->{name} || $args->{var};
    my $value = $ctx->var($var);
      :
    } elsif (exists $args->{like}) {
        my $re = eval { qr/$args->{like}/ };
        return defined($value) && ($value =~ m/$re/) ? 1 : 0;
    }
      :
}

$args->{like} には like の内容が設定されており、内容が存在すれば変数 $re に代入します。この時、「qr// 演算子」を用いて、like の内容を正規表現として代入しています。
その後、m// 演算子を用いて、$value(事前に取得されたもの)とのパターンマッチの結果(1 または 0)を返却します。

3.サンプル1

MTSetVar タグで、変数 hoge の値に "foo" を設定しています。
MTIf タグでは hoge に "f" が含まれていたらブロック内を実行します。この場合は含まれているので、ブロック内の MTGetVar を実行します。

<$mt:setvar name="hoge" value="foo"$>
 
<mt:if name="hoge" like="f">
    <$mt:getvar name="hoge"$>
</mt:if>

Perl で書くと、多分下記のようになります。

my $hoge = 'foo';
 
if ($hoge =~ m/f/) {
    print $hoge;
}

4.サンプル2

MTSetVar タグで、変数 hoge の値に "foo" を設定しています。
MTIf タグでは hoge に "foo" または "var" が含まれていたらブロック内を実行します。この場合は含まれているので、ブロック内の MTGetVar を実行します。

<$mt:setvar name="hoge" value="foo"$>
 
<mt:if name="hoge" like="foo|var">
    <$mt:getvar name="hoge"$>
</mt:if>

Perl で書くと、多分下記のようになります。

my $hoge = 'foo';
 
if ($hoge =~ m/foo|var/) {
    print $hoge;
}

4.サンプル3

ブログ記事リストのタイトルに "foo" または "var" が含まれているものだけを表示します。

<MTEntries>
<mt:setvarblock name="entrytitle"><$MTEntryTitle$></mt:setvarblock>
<mt:if name="entrytitle" like="foo|var">
<$mt:getvar name="entrytitle"$>
</mt:if>
</MTEntries>

Perl で書くと、多分下記のようになります。

for my $entrytitle (@entries) {
    if ($entrytitle =~ m/foo|var/) {
        print $entrytitle;
    }
}

冒頭の2つめのご質問に適用する場合、このブロック全体を tilte 要素で括れば、ある程度期待する表示にできると思います。質問の解釈が誤ってましたら再度ご連絡ください。

5.参考

Comments [0] | Trackbacks [0]
2007年10月22日

MTSetVarBlock と MTSetVarTemplate の違いについて

Movable Type 4 では、MTSetVar タグや MTSetVarBlock タグを用いた制御が数多く行われています。 本エントリーでは、新たに追加された MTSetVarTemplate タグについて解説します。

1.MTSetVarTemplate タグの機能

MTSetVarTemplate タグで囲まれた内容を、変数として値を設定します。

<MTSetVarTemplate name="foo">
  <!-- do something -->
</MTSetVarTemplate>

なお、MTSetVarTemplate タグは、ドキュメントによれば MT 管理画面での使用が目的らしいので、ユーザのテンプレートで用いる可能性は低いかもしれません。

2.MTSetVarBlock タグとの違い

MTSetVarBlock タグは、ブロック内の内容が処理された結果を値として取得しますが、MTSetVarTemplate タグは、ブロックの内容が MTGetVar、あるいは MTVar タグで呼び出された時点ではじめて評価されます。

3.サンプル

ここでは MTIncludeタグ・MTGetVar タグと組み合わせた、MTSetVarBlock タグと MTSetVarTemplate タグの振舞いの違いを示したいと思います。

3.1 MTSetVarBlock + MTInclude + MTGetVar(OK)

MTSetVarTemplate タグは用いず、アーカイブテンプレートの MTInclude タグが実行された時点で MTEntries 全体が評価されるサンプルです。

アーカイブテンプレート

<$MTInclude module="test"$>
<$MTGetVar name="entries"$>

テンプレートモジュール(test)

<MTSetVarBlock name="entries">
<MTEntries>
<$MTEntryTitle$>
</MTEntries>
</MTSetVarBlock>

3.2 MTSetVarBlock + MTInclude + MTGetVar(NG)

アーカイブテンプレートの MTInclude で MTEntryTitle が評価されますが、評価時点では MTEntryTitle が MTEntries コンテキスト外のため、再構築エラーとなるサンプルです。

アーカイブテンプレート

<$MTInclude module="test"$>
<MTEntries>
<$MTGetVar name="entries"$>
</MTEntries>

テンプレートモジュール(test)

<MTSetVarBlock name="entries">
<$MTEntryTitle$>
</MTSetVarBlock>

3.3 MTSetVarTemplate + MTInclude + MTGetVar(OK)

3.2項の MTSetVarBlock タグを MTSetVarTemplate タグに置き換えることで、アーカイブのMTInclude 時点でMTEntryTitleは評価されず、MTGetVar(=MTEntires ブロック内)で評価されるので、期待通りの動作になります。

アーカイブテンプレート

<$MTInclude module="test"$>
<MTEntries>
<$MTGetVar name="entries"$>
</MTEntries>

テンプレートモジュール(test)

<MTSetVarTemplate name="entries">
<$MTEntryTitle$>
</MTSetVarTemplate>

4.参考:MT4 のデフォルトテンプレート

3項でサンプルをいくつか比較しましたが、実際には、デフォルトテンプレートの MTEntries 関連のタグデザインは下記の通りです。
MTGetVar は用いず、アーカイブテンプレートの MTEntries ブロックに直接 MTInclude が記述され、MTEntryTitleが評価されます。

アーカイブテンプレート

<MTEntries>
<$MTInclude module="test"$>
</MTEntries>

テンプレートモジュール(test)

<$MTEntryTitle$>

5.まとめ

MTSetVarTemplate を用いるケースとして、下記が考えられます。

  • テンプレートモジュールをひとつにまとめたい
  • ブロックタグとファンクションタグのテンプレートを分離したい
  • ファンクションタグのテンプレートモジュールに、複数のバリエーションをもたせる(MTGetVar で振り分ける)

管理画面テンプレートは調査していないので、実際にはもう少し適正な使用方法があるかもしれません。

Comments [0] | Trackbacks [0]
2007年9月 7日

strip 属性で日付の空白を削除する

September 7,2007 2:22 AM
Tag:[, , ]
Permalink

Movable Type の日付情報から空白を削除する小技です。

例えば、当サイトの配布テンプレートのブログ記事(エントリー)日付は、下記のように「日」の部分が1桁の場合は半角空白があります。

空白あり

この半角空白をなくすには、ブログ記事(エントリー)日付を表示しているMTタグ

<MTDateHeader>
<p class="date"><$MTEntryDate format="%x"$></p>
</MTDateHeader>

<MTDateHeader>
<p class="date"><$MTEntryDate format="%x" strip=""$></p>
</MTDateHeader>

と、空の strip 属性を与えればOKです。

空白なし

strip 属性は、Movable Type 4 で新しく追加されたグローバル・モディファイアで、Movable Type ドキュメントでは

テンプレートタグの値に含まれる、1つ以上の連続する半角空白文字を指定した内容に置き換えます。

となっています。したがって、何も指定しなければ空白が除去されます。

また、format 属性と順番を入れ替えて、

<MTDateHeader>
<p class="date"><$MTEntryDate strip="" format="%x"$></p>
</MTDateHeader>

としても大丈夫です。

Comments [0] | Trackbacks [0]
2006年11月20日

MTIgnore タグ

November 20,2006 2:10 AM
Tag:[, , ]
Permalink

Movable Type 3.3 では、MTIgnore というコンテナタグが追加されました。このタグで括られた部分は再構築で何も処理されません。HTML のコメントアウト(<!-- ? -->)ではコメントアウトした部分が HTML ソースに残りますが、このタグを使用すれば HTML ソースにも表示されなくなります。

例えば下記のようなタグ、

コメント1
<MTIgnore>コメント2</MTIgnore>
コメント3
リスト1.1 MTIgnore タグの使用例1

とすれば、HTML には

コメント1
コメント3
リスト1.2 リスト1.1 のHTMLソース

という表示になります。

コメント文字列だけでなく、MTタグを MTIgnore で括ることも可能です。リスト1.3 のように括れば、生成された HTML ページに MTEntries タグの内容は何も表示されません。

<MTIgnore>
  <MTEntries> 
    <$MTEntryTitle$><br />
  </MTEntries> 
</MTIgnore>
リスト1.3 MTIgnore タグの使用例2

実は、不要なMTタグにHTMLコメントアウト(<!-- ? -->)を施ししても、再構築時点ではそのMTタグは処理対象となってしまいます(Movable Type はHTMLコメントアウトを認識しないため)。つまりその分パフォーマンスに影響し、さらにHTMLソースに展開されたMTタグが残ってしまいますのでファイルサイズにも影響します。

HTMLコメントアウトの代わりにこのタグを用いれば、再構築対象にならず、HTMLソースにも残らないため、これらの欠点を一気に解消することができます。

カスタマイズ等で不要なタグを非表示にしたい場合に便利です。

Comments [0] | Trackbacks [2]
2005年12月27日

エントリーで table タグを記述する場合の注意

December 27,2005 11:59 PM
Tag:[, , ]
Permalink

Movable Type のエントリーで table タグを記述すると、テーブルの直前にある段落と大きな余白が生じる場合があります。
例えば以下のようになります。


段落





あいうえお
かきくけこ
さしすせそ


上記サンプルの「段落」という文字と、次に表示されているテーブルの間は1回改行しているだけですが、表示させるとこれだけの間隔が空いてしまいます。

原因は、エントリーのオプションにある「改行設定」が「改行を変換する」になっている場合、table タグに含まれる改行に全て改行タグが設定されてしまい、その改行が table タグの直前で有効になってしまうためです。

上記の例では、エントリー編集画面では

段落
<table border="1" cellpadding="2" cellspacing="0">
<tr><td>あいうえお</td></tr>
<tr><td>かきくけこ</td></tr>
<tr><td>さしすせそ</td></tr>
</table>

となっていますが、保存すると、

<p>段落<br />
<table border="1" cellpadding="2" cellspacing="0"><br />
<tr><td>あいうえお</td></tr><br />
<tr><td>かきくけこ</td></tr><br />
<tr><td>さしすせそ</td></tr><br />
</table></p>

と、全ての行末に改行マーク(赤色)が挿入されてしまいます。青色はその前後が空行の場合に挿入される段落用の p タグです。

table に改行タグを挿入させない策がいくつかありますのでご紹介します。

1.テーブル中の改行をなくす

これが一番手っ取り早いですが、エントリーの編集でやや見づらくなるのが欠点です。
追記:書き忘れてましたが、table タグが p タグの中に存在すると XHTML検証エラーとなります(つまり上記のリストはNGです)ので、2項を推奨します。

2.table 開始タグの直前に空行をいれる

Movable Type がエントリーに改行を付与する制御の仕組み上、先頭行(その前が空行であること)が下記のいずれかのタグに該当すれば、そのタグが含まれる行から次に空行が現れるまで改行タグおよび段落タグを挿入しない仕組みになっています。

h1|h2|h3|h4|h5|h6|table|ol|dl|ul|menu|dir|p|pre|center|form|fieldset|select|blockquote|address|div|hr

つまり、table タグの直前行に文章を書かなければ、1項の作業を行わなくても正常に表示されるようになります。これも手っ取り早い方法ですが、直前行を空けるという制約があります。

3.プラグインを利用する

The blog of H.Fujimoto の壱さんが「改行を変換する」を改良するプラグインを提供されていますので、これを用いることで正常に出力することができます。

Comments [5] | Trackbacks [1]
2005年8月22日

MTLink によるページ作成

Movable Type の変数タグで MTLink というものがあります。Movable Typeユーザー・マニュアルテンプレート・タグでは下記のような説明になっています。

Index Templateもしくは特定のエントリーへのURLを自動的に生成するためのタグ。

つまり、インデックス・テンプレートまたはある特定のエントリーに対するリンクを設定したい場合に使うためのタグです。
以下、インデックス・テンプレートおよびエントリーのリンク設定方法について説明します。

インデックス・テンプレートへのリンク
インデックス・テンプレートを新しく作成する時に「テンプレートの名前」欄を設定されると思いますが、その名前を MTLink の template 属性に指定することでリンクを生成します。

MTLink を使用しなければ、リンクのURLは

<a href="<$MTBlogURL$>profile.html">プロフィール</a>

と赤色部分のように書かれると思いますが、例えば「テンプレートの名前」を「Profile」と設定している場合、

<a href="<$MTLink template="Profile"$>">プロフィール</a>

と青色部分のように書くことで同様の効果を得ることができます。このタグを用いることによるメリットは、出力ファイル名に依存せずに記述できる、ということです。例えば途中でファイル名を変更するようなケースがあってもテンプレートに書かれたリンクを修正する必要はありません。

特定のエントリーへのリンク
エントリーに付与されるエントリーIDを MTLink の entry_id 属性に指定することで特定のエントリーに対するリンクを生成します。例えば書籍を紹介するエントリーを書き、このエントリーのリンクを作る場合(仮にエントリーIDは"562"とします)、下記の青色部分のように設定します。

<a href="<$MTLink entry_id="562"$>">書籍の紹介</a>

こちらはインデックス・テンプレートと異なり、個別エントリーアーカイブとしても生成されますが、あるエントリーに対して他のエントリーとは別に「おすすめコーナー」のようなリンクを作りたい場合等に役に立つと思います。
また template 属性と同様、個別エントリーアーカイブページのURLを直接記述しないので、URLやファイル名を変更しても、このリンクを修正する必要はありません。

エントリーIDの確認方法ですが、該当のエントリーを公開状態にした後、管理画面の該当のエントリー編集画面に遷移します。そこで表示される URL の query に

http://?/mt.cgi?__mode=view&_type=entry&blog_id=1&id=562&saved_changes=1

と表示されますので、赤色部分がエントリーIDになります。

Comments [0] | Trackbacks [1]
2005年6月21日

Movable Type のディレクトリ

カスタマイズする際の外部ファイル(JavaScript等)のアップロードで配置するディレクトリに戸惑う方が少なくありません。「どこにアップロードすればよいのでしょうか」という質問も時々頂きます。
その問題が解消されるかどうか定かではありませんが、改めてディレクトリについてまとめてみました。文中でパスディレクトリの表現が混在していますがあまり気にしないでください。厳密にはファイル名を含むのが「パス」のようですが、Movable Type の画面ではディレクトリを「パス」と表現しているようです。

CGIPath
適切な名称がありませんので mt.cfg の名称を使います(記事の中でも好んで用いています)。端的に言うと、各CGIスクリプトを配置するディレクトリです。レンタルサーバでは cgi-bin というディレクトリ名が付与されています。
このディレクトリには cgi ファイル(mt.cgi/mt-comment.cgi/mt-tb.cgi 等)と、CGIスクリプトを実行するために必要なライブラリのディレクトリ(下記)が配置されます。

extlib/
lib/
php/
plugins/
schemas/
search_templates/
tmpl/
tools/

ブラウザから閲覧できるファイルはここには存在しません。JavaScript 等の外部ファイルをここに配置することはありません。また CGIPath は Typekeyの登録URLとしても使われます。index.html があるURLを Typekey登録画面で登録されても Typekey は正常に動作しませんのでご注意ください。
このディレクトリはMT変数タグで

<$MTCGIPath$>

と表現されます。

ローカル・サイト・パス
index.html が配置されるディレクトリです。「ローカル・サイト・パス」は管理画面の基本設定の項目名で使われているので、当サイトではこの名称を好んで使っています。各インデックス・テンプレートを再構築した際に生成されるファイル(index.html/styles-site.css 等)がこのディレクトリに配置されます。カスタマイズ等で外部ファイルをアップロードする際には必ずこのディレクトリにアップロードしてください(プラグインファイルは除外)。
このディレクトリはMT変数タグで

<$MTBlogSitePath$>

と表現されます。これをURLにしたものが

<$MTBlogURL$>

です。

レンタルサーバではCGIスクリプトを特定のディレクトリでしか実行できないように制限していますが、そのような環境設定でない場合、例えば自宅サーバ等ではこのディレクトリにCGIスクリプトを配置して動作させることも可能です。とういか私は当初そのような使い方をしていたため、レンタルサーバご利用者の方に随分わかりにくい説明をしていました。

アーカイブ・パス
管理画面で「ローカル・アーカイブ・パス」と書かれているディレクトリです。再構築されたアーカイブ・テンプレート(カテゴリー・アーカイブ/日付アーカイブ/個別エントリーアーカイブ等)がここに生成されます。デフォルト設定では、ローカル・サイト・パスに archives というディレクトリを作るように仕組まれています。
このディレクトリのURLはMT変数タグで

<$MTBlogArchiveURL$>

と表現されます。

StaticWebPath
これもいい名称がありませんので mt.cfg の名称を使います。これは管理画面の表示に使われる

styles.css
mt.js
images/
docs/

を配置するためのディレクトリです。mt.cfg で設定する際はドキュメントルートからの指定になります(かつ前後を "/" で括る)のでご注意ください。
このディレクトリが必要な理由ですが、そもそも CGIPath は Apache の ScriptAlias で設定されたディレクトリで、このディレクトリに配置されたファイルは常にCGIスクリプトとして認識されるため、他のファイルやディレクトリを配置しても正常に振舞うことができないためです。ローカル・サイト・パスに配置しても構わないのですが、本来の使用目的から考えると専用のディレクトリに置いた方が好ましいでしょう。
このディレクトリはMT変数タグで

<$MTStaticWebPath$>

と表現されます。

Comments [2] | Trackbacks [0]
2005年5月 9日

全エントリーリスト・全コメントリスト・全トラックバックリストを表示

May 9,2005 11:55 PM
Tag:[, , , ,