<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>mtde.info</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/" />
    <link rel="self" type="application/atom+xml" href="http://www.mtde.info/atom.xml" />
    <id>tag:www.mtde.info,2008-03-09://7</id>
    <updated>2008-04-26T01:53:55Z</updated>
    <subtitle>Movable Type Developers Express</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Open Source 4.1</generator>

<entry>
    <title>ハッシュ変数を使って同一カテゴリ内の前・次リンク表示(投稿日時順)</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/0770samplenavi/samplenavi_040.php" />
    <id>tag:www.mtde.info,2008://7.606</id>

    <published>2008-03-26T14:46:27Z</published>
    <updated>2008-03-26T14:59:02Z</updated>

    <summary>ハッシュ変数を用い、同一カテゴリ内エントリのみの前のリンク・次のリンクを、エントリの投稿日時順に取得します。つまり、別のカテゴリのリンクは生成されません。</summary>
    <author>
        <name>apstar</name>
        <uri>http://www.mtde.info/</uri>
    </author>
    
        <category term="ナビゲーション関連サンプル" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="navigation" label="Navigation" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="next" label="Next" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="previous" label="Previous" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sample" label="Sample" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.mtde.info/">
        <![CDATA[<p>ハッシュ変数を用い、同一カテゴリ内エントリのみの前のリンク・次のリンクを、エントリの投稿日時順に取得します。つまり、別のカテゴリのリンクは生成されません。</p>
<p>コードや説明は、こちらを参照してください。</p>
<a href="http://bizcaz.com/">Movable Type 備忘録</a>：<a href="http://bizcaz.com/archives/2008/02/01-004205.php">ハッシュ変数を使って同一カテゴリ内の前・次リンク表示</a>
<p>このコードは、通常「ブログ記事の詳細」モジュールの一箇所へ貼ります。</p>
<p>Movable Type 4.1 で使用できるようになった変数を駆使すれば、プラグインを用いなくともこのような制御が可能となります。</p>
]]>
        
    </content>
</entry>

<entry>
    <title>ハッシュ変数を使って同一カテゴリ内の前・次リンク表示(エントリベースネーム順)</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/0770samplenavi/samplenavi_050.php" />
    <id>tag:www.mtde.info,2008://7.607</id>

    <published>2008-03-26T15:00:02Z</published>
    <updated>2008-03-28T16:40:48Z</updated>

    <summary>ハッシュ変数を用い、同一カテゴリ内エントリのみの前のリンク・次のリンクを、エントリのベースネーム（ファイル名）順に取得します。別のカテゴリのリンクは生成されません。</summary>
    <author>
        <name>apstar</name>
        <uri>http://www.mtde.info/</uri>
    </author>
    
        <category term="ナビゲーション関連サンプル" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="navigation" label="Navigation" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="next" label="Next" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="previous" label="Previous" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sample" label="Sample" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.mtde.info/">
        <![CDATA[<p>ハッシュ変数を用い、同一カテゴリ内エントリのみの前のリンク・次のリンクを、エントリのベースネーム（ファイル名）順に取得します。別のカテゴリのリンクは生成されません。</p>
<p>サイトをファイル名で厳密に管理運用する場合には、カテゴリ内の次・前のエントリへのリンクは、エントリベースネーム順で生成したい場合があります。例えば、このサイト（mtde.info）ではエントリベースネーム名に10番単位でソート用インデックスを付加しており、あとからエントリとエントリの間へ別のエントリを追加して挟むことができる設計となっており、そのような理由でエントリベースネームで判断するコードを先行実装しています。</p>
<h3>コード</h3>
<p>コードは、先のエントリでも紹介しました、こちらのものを改造させて頂きました。</p>
<a href="http://bizcaz.com/">Movable Type 備忘録</a>：<a href="http://bizcaz.com/archives/2008/02/01-004205.php">ハッシュ変数を使って同一カテゴリ内の前・次リンク表示</a>
<pre><code>&lt;MTIf name=&quot;entry_template&quot;&gt;
&lt;ul&gt;
&lt;MTIfNonEmpty tag=&quot;EntryCategory&quot;&gt;
    &lt;MTEntryCategories&gt;
        &lt;MTSetVarBlock name=&quot;cat_name&quot;&gt;&lt;$MTCategoryLabel$&gt;&lt;/MTSetVarBlock&gt;
    &lt;/MTEntryCategories&gt;
&lt;MTSetVarBlock name=&quot;cat&quot;&gt;&lt;MTGetVar name=&quot;cat_name&quot; index=&quot;0&quot;&gt;&lt;/MTSetVarBlock&gt;
&lt;MTSetVarBlock name=&quot;EntBaseName&quot;&gt;&lt;$MTEntryBaseName$&gt;&lt;/MTSetVarBlock&gt;
&lt;MTEntries lastn=&quot;0&quot; category=&quot;$cat&quot;&gt;
        &lt;MTSetVarBlock name=&quot;LopEntBaseName&quot;&gt;&lt;$MTEntryBaseName$&gt;&lt;/MTSetVarBlock&gt;
        &lt;MTSetVarBlock name=&quot;ent_name&quot; key=&quot;$LopEntBaseName&quot;&gt;&lt;$MTEntryTitle$&gt;&lt;/MTSetVarBlock&gt;
        &lt;MTSetVarBlock name=&quot;ent_link&quot; key=&quot;$LopEntBaseName&quot;&gt;&lt;$MTEntryPermalink$&gt;&lt;/MTSetVarBlock&gt;
&lt;/MTEntries&gt;
&lt;MTLoop name=&quot;ent_name&quot; sort_by=&quot;key value reverse&quot;&gt;
        &lt;MTIf name=&quot;EntBaseName&quot; eq=&quot;$__key__&quot;&gt;
            &lt;$MTSetVar name=&quot;find&quot; value=&quot;1&quot;$&gt;
        &lt;MTElseIf name=&quot;find&quot;&gt;
            &lt;li class=&quot;prev&quot;&gt;前のエントリ: &lt;a href=&quot;&lt;MTGetVar name=&quot;ent_link&quot; key=&quot;$__key__&quot;&gt;&quot; title=&quot;前のエントリ&quot;&gt;&lt;MTGetVar name=&quot;ent_name&quot; key=&quot;$__key__&quot;&gt;&lt;/a&gt;&lt;/li&gt;
            &lt;$MTSetVar name=&quot;find&quot; value=&quot;0&quot;$&gt;
        &lt;/MTIf&gt;
&lt;/MTLoop&gt;
&lt;MTLoop name=&quot;ent_name&quot; sort_by=&quot;key value&quot;&gt;
        &lt;MTIf name=&quot;EntBaseName&quot; eq=&quot;$__key__&quot;&gt;
            &lt;$MTSetVar name=&quot;find&quot; value=&quot;1&quot;$&gt;
        &lt;MTElseIf name=&quot;find&quot;&gt;
            &lt;li class=&quot;next&quot;&gt;次のエントリ: &lt;a href=&quot;&lt;MTGetVar name=&quot;ent_link&quot; key=&quot;$__key__&quot;&gt;&quot; title=&quot;次のエントリ&quot;&gt;&lt;MTGetVar name=&quot;ent_name&quot; key=&quot;$__key__&quot;&gt;&lt;/a&gt;&lt;/li&gt;
            &lt;$MTSetVar name=&quot;find&quot; value=&quot;0&quot;$&gt;
        &lt;/MTIf&gt;
&lt;/MTLoop&gt;
&lt;MTElse&gt;
    &lt;MTEntryPrevious&gt;&lt;li class=&quot;prev&quot;&gt;前のエントリ: &lt;a href=&quot;&lt;$MTEntryPermalink$&gt;&quot; title=&quot;前のエントリ&quot;&gt;&lt;$MTEntryTitle$&gt;&lt;/a&gt;&lt;/li&gt;&lt;/MTEntryPrevious&gt;
    &lt;MTEntryNext&gt;&lt;li class=&quot;next&quot;&gt;次のエントリ: &lt;a href=&quot;&lt;$MTEntryPermalink$&gt;&quot; title=&quot;次のエントリ&quot;&gt;&lt;$MTEntryTitle$&gt;&lt;/a&gt;&lt;/li&gt;&lt;/MTEntryNext&gt;
&lt;/MTIfNonEmpty&gt;
&lt;/ul&gt;
&lt;/MTIf&gt;
</code></pre>
<p>このコードは、通常「ブログ記事の詳細」モジュールの一箇所へ貼ります。</p>
<h3>動作サンプル</h3>
<p>2008年3月現在、このサイトに実装しています。そちらでご確認ください。</p>]]>
        
    </content>
</entry>

<entry>
    <title>ページ末尾付近に「ページ先頭へ」のアンカーリンクをつける</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/0770samplenavi/samplenavi_060.php" />
    <id>tag:www.mtde.info,2008://7.608</id>

    <published>2008-03-26T15:17:12Z</published>
    <updated>2008-03-26T15:29:40Z</updated>

    <summary>「ページ先頭へ」というリンクを生成する方法を紹介します。</summary>
    <author>
        <name>apstar</name>
        <uri>http://www.mtde.info/</uri>
    </author>
    
        <category term="ナビゲーション関連サンプル" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="navigation" label="Navigation" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sample" label="Sample" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.mtde.info/">
        <![CDATA[<p>次の画像ような、「ページ先頭へ」というリンクを生成する方法を紹介します。</p>
<span class="mt-enclosure mt-enclosure-image" /><img alt="totop01.png" src="http://www.mtde.info/images/totop01.png" width="330" height="133" style="" /></span>
<p>これは、単にid要素へのアンカーリンクを貼ればよいです。例えば、このサイトの場合は、（CSSで見た目を調整しています）以下のような「ページ先頭へ」リンクを設けています。headcontentのid要素（つまり、ヘッダー）を目的地アンカーとしています。</p>
<pre><code>&lt;a href=&quot;#headcontent&quot; title=&quot;&lt;$MTEntryTitle$&gt;&quot;&gt;ページ先頭&lt;/a&gt;へ</code></pre>
<p>このようなコードは、「ブログ記事の詳細」や「ブログ記事の概要」、あるいは「ブログ記事」や「ブログ記事リスト」など、ページが長くスクロールしそうなモジュールへ貼るとよいです。</p>]]>
        
    </content>
</entry>

<entry>
    <title>カテゴリ別に見た目を切り替える（異なる画像の差し込み）</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/0710samplecat/samplecat_150.php" />
    <id>tag:www.mtde.info,2008://7.609</id>

    <published>2008-03-31T10:40:20Z</published>
    <updated>2008-03-31T15:50:55Z</updated>

    <summary>カテゴリ別に見た目を切り替える方法のひとつを説明します。この方法は、カテゴリごとに異なる画像ファイルを表示する方法です。</summary>
    <author>
        <name>apstar</name>
        <uri>http://www.mtde.info/</uri>
    </author>
    
        <category term="カテゴリ関連サンプル" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="category" label="Category" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sample" label="Sample" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.mtde.info/">
        <![CDATA[<p>カテゴリ別に見た目を切り替える方法のひとつを説明します。この方法は、カテゴリごとに異なる画像ファイルを表示する方法です。</p>
<p>カテゴリ1、カテゴリ2、カテゴリ3というカテゴリがあるとします。このカテゴリページを開いた際に、異なる3種類の画像を表示するには、以下のようにする方法が一般的かもしれません。</p>
<pre><code>&lt;MTIf name=&quot;archive_listing&quot;&gt;
   &lt;MTIfCategory name=&quot;カテゴリ1&quot;&gt;
      &lt;img src=&quot;http://www.mtde.info/blogimg/category1.gif&quot; width=&quot;500&quot; height=&quot;100&quot; alt=&quot;&lt;MTCategoryLabel&gt;&quot; /&gt;
   &lt;/MTIfCategory&gt;
   &lt;MTIfCategory name=&quot;カテゴリ2&quot;&gt;
      &lt;img src=&quot;http://www.mtde.info/blogimg/category2.gif&quot; width=&quot;500&quot; height=&quot;100&quot; alt=&quot;&lt;MTCategoryLabel&gt;&quot; /&gt;
   &lt;/MTIfCategory&gt;
   &lt;MTIfCategory name=&quot;カテゴリ3&quot;&gt;
      &lt;img src=&quot;http://www.mtde.info/blogimg/category3.gif&quot; width=&quot;500&quot; height=&quot;100&quot; alt=&quot;&lt;MTCategoryLabel&gt;&quot; /&gt;
   &lt;/MTIfCategory&gt;
&lt;/MTIf&gt;
</code></pre>
<p>MTIfCategory テンプレートタグを用いて、カテゴリ名でカテゴリを判断するやり方です。この方法はコードは簡素ではありますが、決め打ちが発生していますし、「将来増えるかも知れないカテゴリ」には対応していません。つまり将来カテゴリが増え、そのカテゴリにも異なる画像を与えたいときは、テンプレートの修正が必要です。</p>
<h3>改良コード</h3>
<p>そこで、「カテゴリ名を決め打ちしない」、「将来的にカテゴリが増えたときもテンプレートの改造を行わずに対処できる」ようなコードとして、以下のようなやり方があります。</p>
<pre><code>&lt;MTIf name=&quot;archive_listing&quot;&gt;
   &lt;MTIgnore&gt;カテゴリのイメージ画像を切り替える。概要に記述した画像ファイル名を取得して利用する。&lt;/MTIgnore&gt;
   &lt;MTIfNonEmpty tag=&quot;CategoryDescription&quot;&gt;
      &lt;img src=&quot;&lt;MTBlogURL&gt;&lt;MTCategoryDescription&gt;&quot; width=&quot;500&quot; height=&quot;100&quot; alt=&quot;&lt;MTCategoryLabel&gt;&quot; /&gt;
   &lt;/MTIfNonEmpty&gt;
&lt;/MTIf&gt;</code></pre>
<p>この方法は、管理ページの「カテゴリの編集」ページで、「説明」部分へファイル名をディレクトリ名まで含めて入力しています。イメージのパスを取得するときは、MTBlogURLテンプレートタグの出力結果+MTCategoryDescriptionテンプレートタグの出力結果としています。</p>
<span class="mt-enclosure mt-enclosure-image" /><img alt="samplecat_150_01.PNG" src="http://www.mtde.info/images/samplecat_150_01.PNG" width="500" height="368" style="" /></span>
<p>カテゴリを増やす場合は、決められた画像サイズで画像を作成し、「説明」欄へ入力したディレクトリ・ファイル名の通りに画像ファイルをアップロードすれば追加作業は完了します。決め打ちはまったく発生せず、ファイル名を記述しない（つまり「説明」欄を空白にしている）場合は単に画像が出力されないだけです。</p>
<p>「説明」欄を本来の使途である「概要の入力」に使用しない場合には有効な手段です。逆に、「説明」欄を本来の使途に使用したい場合にはまったく使えない方法です。（当たり前ですが）概要を入力したカテゴリでは、画像が表示されないという不具合が出ます。</p>
<p>このサンプルコードは「ブログ記事リスト」テンプレートの適切な位置へ貼り付けるとよいです。</p>
]]>
        
    </content>
</entry>

<entry>
    <title>カテゴリ別に見た目を切り替える（カテゴリリード文へ異なる背景画像）</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/0710samplecat/samplecat_160.php" />
    <id>tag:www.mtde.info,2008://7.610</id>

    <published>2008-03-31T11:08:06Z</published>
    <updated>2008-03-31T15:49:17Z</updated>

    <summary>カテゴリ別に見た目を切り替える方法のひとつを説明します。この方法は、カテゴリごとにリード文（管理ページの「カテゴリの編集」ページで、「説明」部分）を入力し、カテゴリごとにpブロックタグでそのリード文を表示し、pブロックへ背景画像を与えるというものです。</summary>
    <author>
        <name>apstar</name>
        <uri>http://www.mtde.info/</uri>
    </author>
    
        <category term="カテゴリ関連サンプル" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="category" label="Category" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sample" label="Sample" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.mtde.info/">
        <![CDATA[<p>カテゴリ別に見た目を切り替える方法のひとつを説明します。この方法は、カテゴリごとにリード文（管理ページの「カテゴリの編集」ページで、「説明」部分。カテゴリの概要。MTCategoryBaseNameテンプレートタグで取得できる値。）を入力し、カテゴリごとにpブロックタグでそのリード文を表示し、pブロックへ背景画像を与えるというものです。</p>

<p>準備ですが、管理ページの「カテゴリの編集」ページで、「説明」部分に適切なカテゴリ説明文章を入れます。管理ページの「カテゴリの編集」ページで、カテゴリの「出力ファイル/フォルダ名」には、それぞれ010、020、030と入力しているものとします。</p>

<p>次にテンプレートへ追加するコードサンプルです。非常に短いです。</p>

<pre><code>&lt;MTIf name=&quot;archive_listing&quot;&gt;
   &lt;MTIgnore&gt;カテゴリリード文（背景画像つき）&lt;/MTIgnore&gt;
   &lt;MTIfNonEmpty tag=&quot;CategoryDescription&quot;&gt;
      &lt;p class=&quot;catlead&lt;MTCategoryBaseName&gt;&quot;&gt;&lt;MTCategoryDescription&gt;&lt;/p&gt;
   &lt;/MTIfNonEmpty&gt;
&lt;/MTIf&gt;
</code></pre>

<p><code>&lt;p class=&quot;cat_&lt;MTCategoryBaseName&gt;&quot;&gt;</code>の記述が示すとおり、この方法ではpタグへclass=カテゴリベース名（ファイル名）という指定がなされます。CSSでこのスタイルを定義しておき、表示を切り替えます。また、MTIgnoreというテンプレートタグを記述している部分はいわゆるコメント行で、再構築時には出力されません。</p>

<p>以下は上記の追加コードの場合でのCSSサンプルです。</p>
<pre><code>.catlead010 {
background:#dedede;
background-image: url(&quot;blogimg/catlead010.gif&quot;);
border: 1px solid #cccccc;
font-size:100%;
padding:6px;
margin:0 0 6px 0;
}

.catlead020 {
background:#dedede;
background-image: url(&quot;blogimg/catlead020.gif&quot;);
border: 1px solid #cccccc;
font-size:100%;
padding:6px;
margin:0 0 6px 0;
}

.catlead030 {
background:#dedede;
background-image: url(&quot;blogimg/catlead030.gif&quot;);
border: 1px solid #cccccc;
font-size:100%;
padding:6px;
margin:0 0 6px 0;
}
</code></pre>

<p>この方法は、ブログ運用中でのカテゴリの追加がある場合には、注意が必要です。カテゴリを追加した場合には、そのカテゴリのファイル/フォルダ名に対応したスタイルをCSSへ書き加えないと、そのカテゴリのリード文には、背景画像はおろかスタイル定義もされません。</p>
<p>このサンプルコードは「ブログ記事リスト」テンプレートの適切な位置へ貼り付けるとよいです。リード文というくらいですから、本文エリア先頭付近が適切かもしれません。</p>
<p class="box">管理ページの「カテゴリの編集」ページで、カテゴリの「出力ファイル/フォルダ名」は、省略しても自動的に任意の名前が付けられてしまいます。</p>]]>
        
    </content>
</entry>

<entry>
    <title>カテゴリ別に見た目を切り替える（hn見出しの背景画像）</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/0710samplecat/samplecat_170.php" />
    <id>tag:www.mtde.info,2008://7.611</id>

    <published>2008-03-31T11:38:16Z</published>
    <updated>2008-04-01T16:19:01Z</updated>

    <summary>カテゴリ別に見た目を切り替える方法のひとつを説明します。この方法は、カテゴリおよびエントリで、見出し（このサンプルではh2）へ、カテゴリごとに異なる背景画像を与えるというものです。</summary>
    <author>
        <name>apstar</name>
        <uri>http://www.mtde.info/</uri>
    </author>
    
        <category term="カテゴリ関連サンプル" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="category" label="Category" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sample" label="Sample" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.mtde.info/">
        <![CDATA[<p>カテゴリ別に見た目を切り替える方法のひとつを説明します。この方法は、カテゴリおよびエントリで、見出し（このサンプルではh2）へ、カテゴリごとに異なる背景画像を与えるというものです。</p>

<p>今回の場合は、カテゴリのみならず、そのカテゴリに含まれるエントリのh2見出しもすべて同じ背景画像を用いることにします。管理ページの「カテゴリの編集」ページで、カテゴリの「出力ファイル/フォルダ名」には、それぞれ010、020、030と入力しているものとします。</p>

<p>まず、ブログ記事の概要・ブログ記事の詳細モジュールの中で、h2見出しを使っている箇所を探します。h2見出しにはすべてエントリのタイトルが入っていると仮定します。そのh2見出しのコードを、以下のコードに差し替えます。</p>
<pre><code>&lt;$MTInclude module=&quot;h2bycategory&quot;$&gt;</code></pre>
<p>なぜh2見出し部分のコードを、h2bycategoryモジュールをインクルードするコードに変更するのかというと、ブログ記事の概要モジュールとブログ記事の詳細モジュールとで、同じような記述で使用できるからです。</p>
<p>なお、このモジュール化は必須ではなく、次に示す同じコードをブログ記事の概要モジュールとブログ記事の詳細モジュール両方へベタ書きしてもいいです。</p>

<p>次に h2bycategory というモジュール（名前は任意に決めてください）を作成し、中へ以下のようなコードを記述します。</p>

<pre><code>&lt;MTIgnore&gt;カテゴリのベースネームを取得する&lt;/MTIgnore&gt;
&lt;MTIf name=&quot;archive_listing&quot;&gt;
   &lt;MTSetVarBlock name=&quot;CurCatBaseName&quot;&gt;&lt;MTCategoryBaseName&gt;&lt;/MTSetVarBlock&gt;
&lt;MTElseIf name=&quot;entry_template&quot;&gt;
   &lt;MTSetVarBlock name=&quot;CurCatName&quot;&gt;&lt;MTEntryCategory&gt;&lt;/MTSetVarBlock&gt;
   &lt;MTCategories&gt;
      &lt;MTSetVarBlock name=&quot;LopCatName&quot;&gt;&lt;MTCategoryLabel&gt;&lt;/MTSetVarBlock&gt;
      &lt;MTIf name=&quot;LopCatName&quot; eq=&quot;$CurCatName&quot;&gt;
         &lt;MTSetVarBlock name=&quot;CurCatBaseName&quot;&gt;&lt;MTCategoryBaseName&gt;&lt;/MTSetVarBlock&gt;
      &lt;/MTIf&gt;
   &lt;/MTCategories&gt;
&lt;/MTIf&gt;

&lt;MTIgnore&gt;h2タグへclass名をmidasi+カテゴリベースネームとして与える&lt;/MTIgnore&gt;
&lt;h2 class=&quot;midasi&lt;MTGetVar name=&quot;CurCatBaseName&quot;&gt;&quot;&gt;&lt;a href=&quot;&lt;$MTEntryPermalink$&gt;&quot;&gt;&lt;$MTEntryTitle$&gt;&lt;/a&gt;&lt;/h2&gt;</code></pre>

<p>コードが多少複雑になっているのは、このモジュールはカテゴリ再構築時もエントリ再構築時もインクルードされるので、MTIfで処理を切り替えているためです。エントリページの再構築時には、そのエントリがどのカテゴリに属しているかを変数を用いてチェックしています。</p>
<p><code>&lt;h2 class=&quot;midasi&lt;MTGetVar name=&quot;CurCatBaseName&quot;&gt;&quot;&gt;</code>の記述が示すとおり、この方法ではh2タグへclass=カテゴリベース名（ファイル名）という指定がなされます。CSSでこのスタイルを定義しておき、表示を切り替えます。</p>

<p>以下は上記の追加コードの場合でのCSSサンプルです。</p>
<pre><code>.midasi010 {
background:#dedede;
background-image: url(&quot;blogimg/midasi010.gif&quot;);
border: 1px solid #cccccc;
font-size:120%;
padding:6px;
margin:0 0 6px 0;
clear: both;
}

.midasi020 {
background:#dedede;
background-image: url(&quot;blogimg/midasi020.gif&quot;);
border: 1px solid #cccccc;
font-size:100%;
padding:6px;
margin:0 0 6px 0;
clear: both;
}

.midasi030 {
background:#dedede;
background-image: url(&quot;blogimg/midasi030.gif&quot;);
border: 1px solid #cccccc;
font-size:80%;
padding:6px;
margin:0 0 6px 0;
clear: both;
}
</code></pre>

<p>この方法は、ブログ運用中でのカテゴリの追加がある場合には、注意が必要です。カテゴリを追加した場合には、そのカテゴリのファイル/フォルダ名に対応したスタイルをCSSへ書き加えないと、背景画像は切り替わりません。</p>
]]>
        
    </content>
</entry>

<entry>
    <title>カテゴリ別に見た目を切り替える（サイドバーの状態を変える）</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/0710samplecat/samplecat_180.php" />
    <id>tag:www.mtde.info,2008://7.612</id>

    <published>2008-03-31T12:00:47Z</published>
    <updated>2008-03-31T15:55:23Z</updated>

    <summary>カテゴリ別に見た目を切り替える方法のひとつを説明します。この方法は、カテゴリ（※カテゴリのみではなくエントリやメインインデックスページにも有効）のサイドバーの見た目を切り替えます。準備したテンプレートが、3カラム用であるとします。カテゴリページでは2カラムにしたいときの方法のひとつです。</summary>
    <author>
        <name>apstar</name>
        <uri>http://www.mtde.info/</uri>
    </author>
    
        <category term="カテゴリ関連サンプル" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="category" label="Category" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sample" label="Sample" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.mtde.info/">
        <![CDATA[<p>カテゴリ別に見た目を切り替える方法のひとつを説明します。この方法は、カテゴリ（※カテゴリのみではなくエントリやメインインデックスページにも有効）のサイドバーの見た目を切り替えます。準備したテンプレートが、3カラム用であるとします。カテゴリページでは2カラムにしたいときに、以下のような方法があります。</p>

<p>このサンプルは、mtde.infoのテンプレートを用いて説明を進めます。mtde.infoのXHTML構造は、以下のようになっています。</p>
<pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;

&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;ja&quot; lang=&quot;ja&quot; id=&quot;sixapart-standard&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
&lt;meta http-equiv=&quot;Content-Style-Type&quot; content=&quot;text/css&quot; /&gt;
&lt;meta http-equiv=&quot;Content-Script-Type&quot; content=&quot;text/javascript&quot; /&gt;
&lt;title&gt;Sample&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;

   &lt;div id=&quot;headcontent&quot;&gt;
      &lt;h1&gt;This Is a Sample&lt;/h1&gt;
      &lt;p id=&quot;sitedescription&quot;&gt;This In a Sample XHTML Pages.&lt;/p&gt;
   &lt;/div&gt;

   &lt;div id=&quot;maincontainer&quot;&gt;

      &lt;div id=&quot;maincontent&quot;&gt;
         &lt;p&gt;メインコンテンツ&lt;/p&gt;
      &lt;/div&gt;

      &lt;div id=&quot;subcontent&quot;&gt;
         &lt;p&gt;サイドバー1&lt;/p&gt;
      &lt;/div&gt;

      &lt;div id=&quot;extracontent&quot;&gt;
         &lt;p&gt;サイドバー2&lt;/p&gt;
      &lt;/div&gt;

   &lt;/div&gt;

   &lt;div id=&quot;footcontent&quot;&gt;
      &lt;address&gt;アドレス&lt;/address&gt;
   &lt;/div&gt;

&lt;/body&gt;
&lt;/html&gt;</code></pre>

<p>ブログ記事リストのテンプレートの変数宣言部分（テンプレートの先頭付近です）へ、次のような一行のコードを書き足します。</p>
<pre><code>&lt;MTSetVar name=&quot;colmn&quot; value=&quot;&quot;&gt;</code></pre>
<p>colmnという名前の変数へ、空白が代入されています。後述しますが、これは、ブログの初期の設計どおりのサイドバーカラム数・スタイルであるということになります。</p>

<p>以下のように、colmnという名前の変数へ、2を代入すると、サイドバーのうち一本を削除し、2カラムにするということになります。</p>
<pre><code>&lt;MTSetVar name=&quot;colmn&quot; value=&quot;2&quot;&gt;</code></pre>

<p>次に、メイン記事エリアmaincontentのdiv部分を改造します。</p>
<p>改造前</p>
<pre><code>&lt;div id=&quot;maincontent&quot;&gt;</code></pre>
<p>改造後</p>
<pre><code>&lt;div id=&quot;maincontent&lt;MTGetVar name=&quot;colmn&quot;&gt;&quot;&gt;</code></pre>

<p>colmn変数へ2という数字を値として与えたときには、それがそのまま「maincontent」というid名へ付加され、「maincontent2」という名前に変わる仕組みです。</p>

<p>サイドバーにも細工をします。2カラムのとき表示したくないサイドバーへ、以下のように大外をMTIfでcolmn変数に値が入っていなければ実行、と記述します。つまりこの部分は、colmn変数に2という値が入っている（=2カラムである）場合は実行されずにスルーされます。</p>
<pre><code>&lt;MTIf name=&quot;colmn&quot; eq=&quot;&quot;&gt;&lt;MTIgnore&gt;2カラム指定がないときのみ&lt;/MTIgnore&gt;
&lt;div id=&quot;subcontent&quot;&gt;

...（サイドバーの記述）

&lt;/div&gt;
&lt;/MTIf&gt;
</code></pre>

<p>CSSには、3カラム用のmaincontent定義と2カラム用のmaincontent2の記述を同時に併記しておきます。大きな違いは、maincontent2の幅がmaincontentとはサイドバー一本ぶん広いことです。</p>
<pre><code>#maincontent,#maincontent2 {
float:left;
line-height:1.5;
margin-right:20px;
text-align:left;
width:500px;
clear:both;
}

#maincontent img, #maincontent2 img {
margin:15px 10px 15px 0;
}


#maincontent li.nomark, maincontent2 li.nomark {
list-style:none;
margin-left:10px;
}

/* 2 Column */
#maincontent2 {
width:700px;
}
</code></pre>

<p>この方法は、カテゴリのみではなく、エントリやメインインデックス、アーカイブ、検索ページなど各テンプレートモジュールへ実装すれば、すべてのテンプレートのサイドバーの本数を制御できます。</p>
<p>2カラム→3カラム、3カラム→2カラムへの切り替えは容易で、各テンプレートモジュールの先頭のcolmn変数を空白にするか、2という値を与えるかのみでサイドバーの本数を切り替えることができます。</p>
<p class="box">このmtde.info サイトは、この手法でエントリページを2カラム化しています。</p>
]]>
        
    </content>
</entry>

<entry>
    <title>カテゴリ別に見た目を切り替える（テンプレートを切り替える）</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/0710samplecat/samplecat_190.php" />
    <id>tag:www.mtde.info,2008://7.613</id>

    <published>2008-04-02T05:27:29Z</published>
    <updated>2008-04-02T05:46:38Z</updated>

    <summary>カテゴリ別に見た目を切り替える方法のひとつを説明します。この方法は、カテゴリへインクルードするテンプレートを、表示するカテゴリによって切り替えるというものです。</summary>
    <author>
        <name>apstar</name>
        <uri>http://www.mtde.info/</uri>
    </author>
    
        <category term="カテゴリ関連サンプル" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="category" label="Category" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sample" label="Sample" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.mtde.info/">
        <![CDATA[<p>カテゴリ別に見た目を切り替える方法のひとつを説明します。この方法は、カテゴリへインクルードするテンプレートを、表示するカテゴリによって切り替えるというものです。</p>
<p>これに関しては、既に詳しく紹介されているサイトがいくつかありますので、そちらの紹介に留めておきます。</p>

<p><a href="http://bizcaz.com/">Movable Type 備忘録</a></p>
<ul>
<li><a href="http://bizcaz.com/archives/2007/04/14-114241.php">カテゴリごとにテンプレートを切り替える</a></li>
</ul>

<p><a href="http://www.koikikukan.com/">小粋空間</a></p>
<ul>
<li><a href="http://www.koikikukan.com/archives/2008/02/19-020053.php">Movable Type 4 でカテゴリー別にデザインを切り替える方法（その1）</a></li>
<li><a href="http://www.koikikukan.com/archives/2008/02/20-012525.php">Movable Type 4 でカテゴリー別にデザインを切り替える方法（その2）</a></li>
<li><a href="http://www.koikikukan.com/archives/2008/02/22-020202.php">Movable Type 4 でカテゴリー別にデザインを切り替える方法（その3）</a></li>
</ul>

<p><a href="http://www.movabletype.jp/">MovableType.jp</a></p>
<ul>
<li><a href="http://www.movabletype.jp/blog/template_selector.html">カスタムフィールドを利用してブログ記事ごとにテンプレートを選択可能にする ※</a></li>
</ul>
<p class="box">※ このページではエントリへのテンプレート分岐の解説が行われているが、カテゴリに応用することも可能。</p>
]]>
        
    </content>
</entry>

<entry>
    <title>エントリリストにおいて、ある特定の条件の場合のみ先頭にアイコンを出す</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/0760samplecfld/samplecfld_030.php" />
    <id>tag:www.mtde.info,2008://7.615</id>

    <published>2008-04-06T07:07:38Z</published>
    <updated>2008-04-06T08:02:03Z</updated>

    <summary>エントリリストにおいて、ある特定の条件の場合のみ先頭にアイコンを出す場合の、カスタムフィールドの利用例です。このケースのように「このエントリは&quot;イベント&quot;という種類の記事である」という明示的なデータの与え方を行いたい場合は、カスタムフィールドを用いる手段が考えられます。</summary>
    <author>
        <name>apstar</name>
        <uri>http://www.mtde.info/</uri>
    </author>
    
        <category term="カスタムフィールド関連サンプル" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="customfield" label="Custom Field" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="entry" label="Entry" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sample" label="Sample" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.mtde.info/">
        <![CDATA[<p>エントリリストにおいて、ある特定の条件の場合のみ先頭にアイコンを出す場合の、カスタムフィールドの利用例です。</p>
<p>このケースのように「このエントリは"イベント"という種類の記事である」という明示的なデータの与え方を行いたい場合は、カスタムフィールドを用いる手段が考えられます。</p>
]]>
        <![CDATA[<h3>フィールドを作成する</h3>
<p>エントリの情報として、「イベント識別用チェックボックス」を追加するとします。</p>
<p>まずーダッシュボードより「設定」→「カスタムフィールド」をクリックします。</p>
<span class="mt-enclosure mt-enclosure-image" /><img alt="samplecfld_020_02.gif" src="http://www.mtde.info/images/samplecfld_020_02.gif" width="500" height="499" /></span>

<p>「イベント識別用チェックボックス」を追加します。</p>
<span class="mt-enclosure mt-enclosure-image" /><img alt="samplecfld_030_01.png" src="http://www.mtde.info/images/samplecfld_030_01.png" width="500" height="567" style="" /></span>

<h3>サイドバーのエントリリストのコードを書き換える</h3>
<p>修正前エントリリスト。</p>
<pre><code>&lt;dl&gt;
&lt;dt&gt;New Entries&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;MTEntries lastn=&quot;5&quot;&gt;
   &lt;li class=&quot;arrow01&quot;&gt;&lt;a href=&quot;&lt;MTEntryPermalink&gt;&quot;&gt;&lt;MTGetVar name=&quot;eventmark&quot;&gt;&lt;MTEntryTitle&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/MTEntries&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
</code></pre>

<p>追加したカスタムフィールドが「entryevent」というテンプレートタグで扱えるようになります。コードは以下のように書き換えます。アイコン画像の表示コードを書き足しています。</p>
<pre><code>&lt;dl&gt;
&lt;dt&gt;New Entries&lt;/dt&gt;
&lt;dd&gt;
&lt;ul&gt;
&lt;MTEntries lastn=&quot;5&quot;&gt;
   &lt;MTIfNonEmpty tag=&quot;entryevent&quot;&gt;
      &lt;MTSetVarblock name=&quot;eventmark&quot;&gt;
         &lt;img src=&quot;&lt;MTBlogURL&gt;images/event.png&quot; width=&quot;54&quot; height=&quot;17&quot; alt=&quot;イベント&quot; /&gt;
      &lt;/MTSetVarblock&gt;
   &lt;MTElse&gt;
      &lt;MTSetVar name=&quot;eventmark&quot; value=&quot;&quot;&gt;
   &lt;/MTIfNonEmpty&gt;
   &lt;li class=&quot;arrow01&quot;&gt;&lt;a href=&quot;&lt;MTEntryPermalink&gt;&quot;&gt;&lt;MTGetVar name=&quot;eventmark&quot;&gt;&lt;MTEntryTitle&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/MTEntries&gt;
&lt;/ul&gt;
&lt;/dd&gt;
&lt;/dl&gt;
</code></pre>

<h3>エントリの投稿</h3>
<p>エントリ投稿時に、「そのエントリが"イベント"である」場合は、「イベントチェック」チェックボックスがチェックされた状態にして投稿します。</p>
<span class="mt-enclosure mt-enclosure-image" /><img alt="samplecfld_030_02.png" src="http://www.mtde.info/images/samplecfld_030_02.png" width="500" height="513" style="" /></span>
]]>
    </content>
</entry>

<entry>
    <title>再構築するテンプレートを変数で制御する</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/0605variable/var_090.php" />
    <id>tag:www.mtde.info,2008://7.616</id>

    <published>2008-04-10T14:59:52Z</published>
    <updated>2008-04-10T15:38:03Z</updated>

    <summary>再構築するテンプレートを変数で制御する方法を説明します。</summary>
    <author>
        <name>apstar</name>
        <uri>http://www.mtde.info/</uri>
    </author>
    
        <category term="変数" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="template" label="Template" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="variable" label="Variable" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.mtde.info/">
        <![CDATA[<p>再構築するテンプレートを変数で制御する方法を説明します。</p>
<p>例えば、全てのテンプレートからインクルードされるサイドバーがあるとします。以下の非常に簡単なコードをサイドバーのモジュールに記述し、再構築します。</p>
<pre><code>&lt;MTCategoryLabel&gt;</code></pre>
<p>すると、以下のようなエラーが出ます。</p>
<p class="box">テンプレート「メインページ」の再構築中にエラーが発生しました: テンプレートタグMTIncludeでエラーが発生しました: error in module サイドバー: テンプレートタグMTCategoryLabelでエラーが発生しました: <$MTCategoryLabel$>タグを不正なコンテキストで利用しようとしました。</p>
<p>テンプレートタグには、特定のテンプレートタグの内部や、特定の種類のアーカイブ内部でのみ使用可能なものがあります。この外側で使用した場合、メッセージにあるとおり「不正なコンテキスト」や「コンテキスト外」エラーが発生するのです。</p>
<h3>ではどうやって回避するのか</h3>
<p>先ほどの、再構築時にエラーとなったコードです。</p>
<pre><code>&lt;MTCategoryLabel&gt;</code></pre>
<p>このコードは、実は現在のカテゴリ位置を示す目的でサイドバーへ貼ろうとしていたものとします。</p>
<p>少し考えると、これには次のような矛盾があることに気がつかないでしょうか？</p>
<h4>取得できるはずのないカテゴリラベルを取得しようとしている</h4>
<p>メインインデックスページの再構築時には、MTCategoryLabelタグのみでのカテゴリのラベルは取得できません。MTCategoryLabelだけでは、カテゴリが特定できないためです。</p>
<p>同じ理由で、月別アーカイブやウェブページでもMTCategoryLabelタグのみでのカテゴリのラベルは取得できなさそうです。</p>
<p>実際は、MTCategoriesブロックタグで括ってあげると、全てのカテゴリラベルが取得できますが、今回は「トップページから特定のカテゴリのラベルを取得する」ことはしないとします。</p>
<p>そこで、このサイドバーの記述は、「カテゴリとエントリでのみ、有効にしたい」とします。そうすると、コードは以下のようになります。</p>
<pre><code>&lt;MTIf name=&quot;category_archive&quot;&gt;
   &lt;MTCategoryLabel&gt;
&lt;/MTIf&gt;
&lt;MTIf name=&quot;entry_template&quot;&gt;
   &lt;MTCategoryLabel&gt;
&lt;/MTIf&gt;</code></pre>

<p>このコードは、「カテゴリページあるいはエントリページでのみ、このコードを再構築する」という挙動を示します。</p>


<h3>テンプレートの種類を識別するための予約変数および定義変数</h3>
<p>再構築時に、「どのテンプレートでのみこのコードを適用する」といった制御には必須な、テンプレートの種類を識別するための 予約変数※1 および定義変数※2 を以下に記します。先ほどのサンプルコードは、これを利用しているわけです。</p>

<dl>
<dt>メインインデックスであるかどうか判断 ※2</dt>
<dd>MTIf name="main_index"</dd>
<dt>アーカイブインデックスであるかどうか判断 ※2</dt>
<dd>MTIf name="archive_index"</dd>

<dt>カテゴリ類全部であるかどうか判断 ※1</dt>
<dd>MTIf name="archive_listing"</dd>
<dt>カテゴリのみであるかどうか判断 ※1</dt>
<dd>MTIf name="category_archive"</dd>
<dt>エントリのみであるかどうか判断 ※1</dt>
<dd>MTIf name="entry_template"</dd>
<dt>ウェブページのみであるかどうか判断 ※1</dt>
<dd>MTIf name="page_template"</dd>
<dt>エントリおよびウェブページであるかどうか判断 ※1</dt>
<dd>feedback_template</dd>
<dt>日時用カテゴリのみであるかどうか判断 ※1</dt>
<dd>MTIf name="datebased_only_archive"</dd>
<dt>Auther用カテゴリのみであるかどうか判断 ※1</dt>
<dd>MTIf name="author_archive"</dd>

<dt>システムページであるかどうか判断 ※2</dt>
<dd>MTIf name="system_template"</dd>
<dt>検索ページであるかどうか判断 ※2</dt>
<dd>MTIf name="search_results_template"</dd>
<dt>コメントプレビューページであるかどうか判断 ※2</dt>
<dd>MTIf name="comment_preview_template"</dd>
</dl>
<p class="box">※1 予約変数です。システム内部で予約されています。</p>
<p class="box">※2 定義変数です。テンプレート先頭付近にMTSetVarで変数定義されています。</p>
]]>
        
    </content>
</entry>

<entry>
    <title>繰り返し処理における予約変数</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/0605variable/var_100.php" />
    <id>tag:www.mtde.info,2008://7.617</id>

    <published>2008-04-10T15:02:40Z</published>
    <updated>2008-04-10T15:43:34Z</updated>

    <summary>Movable Type では、ループ（繰り返し処理）において、システム内部的な予約変数を用いることができます。</summary>
    <author>
        <name>apstar</name>
        <uri>http://www.mtde.info/</uri>
    </author>
    
        <category term="変数" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="loop" label="Loop" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="variable" label="Variable" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.mtde.info/">
        <![CDATA[<p>Movable Type では、ループ（繰り返し処理）において、以下のような予約変数を用いることができます。</p>

<dl>
<dt>__first__</dt>
<dd>ループ先頭の場合、実行されます。</dd>
<dt>__last__</dt>
<dd>ループ末尾の場合、実行されます。</dd>
<dt>__odd__</dt>
<dd>ループ奇数回目の場合、実行されます。</dd>
<dt>__even__</dt>
<dd>ループ偶数回目の場合、実行されます。</dd>
<dt>__index__</dt>
<dd>ループインデックスを、格納します。</dd>
<dt>__counter__</dt>
<dd>ループ回数を、格納します。</dd>
</dl>

<p>書き方は、MTForループで使用する場合は、以下を参考にしてください。</p>
<pre><code>&lt;MTFor var=&quot;x&quot; from=&quot;1&quot; to=&quot;10&quot;&gt;

   &lt;MTIf name=&quot;__first__&quot;&gt;
      &lt;p&gt;先頭：&lt;MTGetVar name=&quot;x&quot;&gt;&lt;/p&gt;
   &lt;/MTIf&gt;

   &lt;MTIf name=&quot;__last__&quot;&gt;
      &lt;p&gt;末尾：&lt;MTGetVar name=&quot;x&quot;&gt;&lt;/p&gt;
   &lt;/MTIf&gt;

   &lt;MTIf name=&quot;__odd__&quot;&gt;
      &lt;p&gt;奇数：&lt;MTGetVar name=&quot;x&quot;&gt;&lt;/p&gt;
   &lt;/MTIf&gt;

   &lt;MTIf name=&quot;__even__&quot;&gt;
      &lt;p&gt;偶数：&lt;MTGetVar name=&quot;x&quot;&gt;&lt;/p&gt;
   &lt;/MTIf&gt;

   &lt;MTIf name=&quot;__counter__&quot;&gt;
      &lt;p&gt;カウンタ：&lt;MTGetVar name=&quot;x&quot;&gt;&lt;/p&gt;
   &lt;/MTIf&gt;

&lt;/MTFor&gt;
</code></pre>

<p>MTForのほかに、MTLoop、MTEntries、MTCategoriesなどの、繰り返し処理を行えるブロックタグで使用することができます。また、そのループ中において条件分岐を行うMTIfでも使用することができます。</p>

<p>また、これらの予約変数は、既に代入（MTSetVar）されたものとして、通常の変数と同じように取り扱うことができます。以下のサンプルコードでは、MTGetvarテンプレートタグでループのインデックスを取得します。</p>
<pre><code>&lt;MTFor var=&quot;x&quot; from=&quot;1&quot; to=&quot;10&quot;&gt;

   &lt;MTGetVar name=&quot;__index__&quot;&gt;

&lt;/MTFor&gt;
</code></pre>


<h3>この機能を用いたストライプ柄のエントリリストのサンプル</h3>
<p>MTEntriesブロックタグを用いエントリリストを生成します。このとき、リストの背景色を、奇数回を白、偶数回を灰色とします。</p>

<p>CSS</p>
<pre><code>.odd {
background:#ffffff;
}

.even {
background:#cccccc;
}
</code></pre>

<p>エントリリストのコード</p>
<pre><code>&lt;ul&gt;
&lt;MTEntries lastn=&quot;10&quot;&gt;
&lt;li class=&quot;&lt;MTIf name=&quot;__odd__&quot;&gt;odd&lt;MTElse&gt;even&lt;/MTIf&gt;&quot;&gt;&lt;a href=&quot;&lt;MTEntryPermaLink&gt;&quot;&gt;&lt;MTEntryTitle&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/MTEntries&gt;
&lt;/ul&gt;
</code></pre>

<h3>注意点</h3>
<p>MTForで__index__、__odd__、__even__を用いる場合は、以下の点に注意してください。</p>
<ul>
<li>ループを0から開始した場合、__index__はループの先頭が取得できません。</li>
<li>ループを偶数回から開始した場合、__odd__と__even__の結果が入れ替わるときがあります。</li>
</ul>
]]>
        
    </content>
</entry>

<entry>
    <title>MTにおける変数の有効範囲や、それに関わる問題点</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/0605variable/var_110.php" />
    <id>tag:www.mtde.info,2008://7.618</id>

    <published>2008-04-10T15:04:24Z</published>
    <updated>2008-04-10T15:06:40Z</updated>

    <summary>Movable Typeで使用される変数の扱いに関して、有効範囲やそれに関わる問題点を説明します。</summary>
    <author>
        <name>apstar</name>
        <uri>http://www.mtde.info/</uri>
    </author>
    
        <category term="変数" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="variable" label="Variable" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.mtde.info/">
        <![CDATA[<p>Movable Typeで使用される変数は、<strong>全てグローバル変数</strong>です。</p>
<p class="box">本来、プログラムで変数を用いる場合には、有効範囲（スコープ）があります。どういうことかというと、有効範囲が広い変数は全ての範囲にて有効（グローバル）である、有効範囲が狭い変数は限られた範囲で使用後に破棄されてしまう（ローカル）、ということです。</p>
<p>変数が全てグローバルであるということは、どこかのモジュールで使用した変数を再利用する場合、初期化しておかないと既に値が入っていて変な挙動を示すことは十分に考えられます。</p>
<p>以下に一例を示します。</p>
<pre><code>&lt;p&gt;変数初期化&lt;/p&gt;
&lt;MTSetVar name=&quot;hoge&quot; value=&quot;1&quot;&gt;
 
&lt;p&gt;1回目ループ&lt;/p&gt;
&lt;MTFor var=&quot;x&quot; from=&quot;0&quot; to=&quot;100&quot;&gt;
   &lt;MTSetVar name=&quot;hoge&quot; op=&quot;++&quot;&gt;
   &lt;MTGetBar name=&quot;hoge&quot;&gt;&lt;br /&gt;
&lt;/MTFor&gt;



...（なんかの処理）



&lt;p&gt;2回目ループ&lt;/p&gt;
&lt;MTFor var=&quot;x&quot; from=&quot;0&quot; to=&quot;100&quot;&gt;
   &lt;MTSetVar name=&quot;hoge&quot; op=&quot;++&quot;&gt;
   &lt;MTGetBar name=&quot;hoge&quot;&gt;&lt;br /&gt;
&lt;/MTFor&gt;</code></pre>

<p>このコードには、ふたつのForループがあります。</p>
<p>最初のループでは、変数hogeを初期化し、ループ内で+1ずつ増やしていく処理（インクリメント）にて使用しています。</p>
<p>間に、「...（なんかの処理）」という処理を挟んでいるとしましょう。</p>
<p>2回目のループでは、変数hogeを初期化し忘れ、1回目と同じ結果を期待して、同じ処理を行っています。</p>
<p>このコードは、実行すると、2回目ループでのhoge変数の出力が102から開始されてしまいます。これは、hoge変数を初期化するのを怠ったためで、1回目のループ・インクリメント処理で使用したhoge変数に値が残ったままであるためです。</p>

<p>このひとつ目のループとふたつ目のループが、別モジュールに入っていたらとすると、意図しない不具合が発生して、しかも不具合の特定が難しくなってしまいます。</p>

<p>このコードを正しく動作させるためには、以下のように2回目のループの直前にhoge変数の初期化を行うコードを挿入すればOKです。</p>
<pre><code>&lt;p&gt;変数初期化&lt;/p&gt;
&lt;MTSetVar name=&quot;hoge&quot; value=&quot;1&quot;&gt;
 
&lt;p&gt;1回目ループ&lt;/p&gt;
&lt;MTFor var=&quot;x&quot; from=&quot;0&quot; to=&quot;100&quot;&gt;
   &lt;MTSetVar name=&quot;hoge&quot; op=&quot;++&quot;&gt;
   &lt;MTGetBar name=&quot;hoge&quot;&gt;&lt;br /&gt;
&lt;/MTFor&gt;



...（なんかの処理）



&lt;p&gt;2回目ループ&lt;/p&gt;
<font color="#0000ff">&lt;MTSetVar name=&quot;hoge&quot; value=&quot;1&quot;&gt;</font>
&lt;MTFor var=&quot;x&quot; from=&quot;0&quot; to=&quot;100&quot;&gt;
   &lt;MTSetVar name=&quot;hoge&quot; op=&quot;++&quot;&gt;
   &lt;MTGetBar name=&quot;hoge&quot;&gt;&lt;br /&gt;
&lt;/MTFor&gt;</code></pre>]]>
        
    </content>
</entry>

<entry>
    <title>変数への適切な代入場所</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/0605variable/var_120.php" />
    <id>tag:www.mtde.info,2008://7.619</id>

    <published>2008-04-10T15:07:02Z</published>
    <updated>2008-04-10T15:47:23Z</updated>

    <summary>変数を使用するには、MTSetVarやMTSetVarBlockなどのテンプレートタグを用いて「変数への値の代入」を行います。この代入をどこに記述するのかは、ケースバイケースです。</summary>
    <author>
        <name>apstar</name>
        <uri>http://www.mtde.info/</uri>
    </author>
    
        <category term="変数" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="variable" label="Variable" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.mtde.info/">
        <![CDATA[<p>変数を使用するには、MTSetVarやMTSetVarBlockなどのテンプレートタグを用いて「変数への値の代入」を行います。</p>
<p>この代入をどこに記述するのかは、ケースバイケースです。</p>

<h3>ケース1：テンプレート先頭付近</h3>
<p>プログラムで変数を使用する場合は、一般的に「変数の宣言はコード先頭付近に置くほうが見通しが良い」とされます。Movable Typeにおいては、テンプレートの制御に使用する変数はこのケースに当てはまります。</p>

<p>以下はデフォルトテンプレートの、インデックステンプレート＞メインページのテンプレートです。先頭行から5行が、テンプレート制御などに使用される変数の代入コードです。</p>

<pre><code><font color="#0000ｆｆ">
&lt;MTSetVar name=&quot;body_class&quot; value=&quot;mt-main-index&quot;&gt;
&lt;MTSetVar name=&quot;main_template&quot; value=&quot;1&quot;&gt;
&lt;MTSetVar name=&quot;main_index&quot; value=&quot;1&quot;&gt;
&lt;MTSetVar name=&quot;sidebar&quot; value=&quot;1&quot;&gt;
&lt;MTSetVarBlock name=&quot;title&quot;&gt;&lt;$MTBlogName encode_html=&quot;1&quot;$&gt;&lt;/MTSetVarBlock&gt;
</font>

&lt;$MTInclude module=&quot;&lt;__trans phrase=&quot;Header&quot;&gt;&quot;$&gt;

&lt;MTEntries&gt;
    &lt;$MTEntryTrackbackData$&gt;
    &lt;$MTInclude module=&quot;&lt;__trans phrase=&quot;Entry Summary&quot;&gt;&quot;$&gt;
&lt;/MTEntries&gt;

&lt;div class=&quot;content-nav&quot;&gt;
    &lt;a href=&quot;&lt;$MTLink template=&quot;archive_index&quot;$&gt;&quot;&gt;&lt;__trans phrase=&quot;Archives&quot;&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;$MTInclude module=&quot;&lt;__trans phrase=&quot;Footer&quot;&gt;&quot;$&gt;
</code></pre>

<p>ここで宣言している変数は（「わたし」というのはテンプレート自身）、</p>
<ul>
<li>わたしはbody_class変数にmt-main-indexをセットしています。</li>
<li>わたしはmain_template変数に1をセットしています。</li>
<li>わたしはmain_index変数に1をセットしています。</li>
<li>わたしはsidebar変数に1をセットしています。</li>
<li>わたしはtitle変数にMTBlogName（ブログ名）をセットしています。</li>
</ul>
<p>ということをインクルードされるモジュールへ知らせるような役目を持っています。</p>

<p>例えば、フッターモジュールで</p>
<pre><code>&lt;MTIf name=&quot;sidebar&quot;&gt;
    &lt;$MTInclude module=&quot;サイドバー&quot;$&gt;
&lt;/MTIf&gt;
</code></pre>
<p>というコードがある場合、これはメインページには「わたしはsidebarに1をセットしています。」という記述があるので、メインページにはサイドバーがインクルードされるのです。もし、sidebar変数へ0が代入されていれば、サイドバーはインクルードされません。</p>

<p>このような記述は、デフォルトテンプレートでは以下の8つのテンプレートモジュールで行われています。「(1)(2)(3)テンプレートファイル」は、再構築されると一枚のXHTMLページになります。</p>

<dl>
<dt>(1)インデックステンプレート</dt>
<dd>
<ul>
<li>main_index.mtml（メインページ）</li>
<li>archive_index.mtml（アーカイブインデックス）</li>
</ul>

</dd>
</dl>

<dl>
<dt>(2)アーカイブテンプレート</dt>
<dd>
<ul>
<li>entry.mtml（ブログ記事）</li>
<li>entry_listing.mtml（ブログ記事リスト）</li>
<li>page.mtml（ウェブページ）</li>
</ul>
</dd>
</dl>

<dl>
<dt>(3)システムテンプレート</dt>
<dd>
<ul>
<li>search_results.mtml（検索結果）</li>
<li>comment_response.mtml（コメント完了）</li>
<li>comment_preview.mtml（コメントプレビュー）</li>
</ul>
</dd>
</dl>

<p>これらの変数は、インクルードするモジュール内で同じ変数名へ値をうっかり代入して上書きしないようにしましょう。</p>

<h3>ケース2：使用直前</h3>
<p>Movable Type 4.xのテンプレートでは細かいモジュール化が進んでおり、管理ページでの各モジュール間の移動に時間がかかります。変数を多用してカスタマイズを行っている場合、変数代入部分をいちいち一箇所へまとめたり、テンプレート先頭付近へまとめて記述すると、かえって効率が落ちる場合があります。</p>
<p>Movable Typeのテンプレート内で、変数を使用する場合のほぼ大多数を占めると思われるこのケースでは、使用直前に代入を行い、適切なコメントを記述しておくとわかりやすく、保守もやりやすいです。</p>

<p>例えば以下のコードでは、狙ったカテゴリのみを抽出してリスト化するコードですが、変数は使用直前に値の代入を行っています。</p>

<p>keyword変数はMTCategoriesブロックの外側で値を代入します。これは、ブロック内へ記述すると、カテゴリの個数回ループにてkeyword変数への無駄な代入が繰り返されるためです。</p>

<p>対してCurCat変数は、MTCategoriesブロックの内側で値を代入します。こうすると、MTCategoriesループでカテゴリ名が次々に切り替わり代入されます。</p>

<pre><code>&lt;MTSetVar name=&quot;keyword&quot; value=&quot;カテゴリ1,カテゴリ3,カテゴリ5&quot;&gt;
&lt;ul&gt;
&lt;MTCategories&gt;
   &lt;MTSetVarBlock name=&quot;CurCat&quot;&gt;&lt;MTCategoryLabel&gt;&lt;/MTSetVarBlock&gt;
   &lt;MTIf name=&quot;keyword&quot; like=&quot;$CurCat&quot;&gt;
      &lt;li&gt;&lt;a href=&quot;&lt;$MTCategoryArchiveLink$&gt;&quot;&lt;MTIfNonEmpty tag=&quot;MTCategoryDescription&quot;&gt; title=&quot;&lt;$MTCategoryDescription$&gt;&quot;&lt;/MTIfNonEmpty&gt;&gt;&lt;$MTCategoryLabel$&gt; (&lt;$MTCategoryCount$&gt;)&lt;/a&gt;&lt;/li&gt;
   &lt;/MTIf&gt;
&lt;/MTCategories&gt;
&lt;/ul&gt;
</code></pre>

<p>上記コードに、MTIgnoreテンプレートタグでコメントを付与してみた例です。MTIgnoreテンプレートタグで括られた部分は、再構築時にはカットされますのでhtmlソースには出力されません。</p>
<p>なお、MTIgnoreでのコメント付与は必須ではありません。時間が経ったあとで、このコードを見て、何をやっているか解読する自信がない方は、つけておいたほうが良いかもしれません。</p>
<pre><code>&lt;MTIgnore&gt; ***** 表示するカテゴリの一覧をカンマ区切りでkeyword変数へ代入 ***** &lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;keyword&quot; value=&quot;カテゴリ1,カテゴリ3,カテゴリ5&quot;&gt;
&lt;ul&gt;
&lt;MTCategories&gt;
   &lt;MTIgnore&gt; ***** CurCat変数=ループ中のカテゴリラベル ***** &lt;/MTIgnore&gt;
   &lt;MTSetVarBlock name=&quot;CurCat&quot;&gt;&lt;MTCategoryLabel&gt;&lt;/MTSetVarBlock&gt;
   &lt;MTIgnore&gt; ***** keyword変数内にCurCat変数が含まれるかチェック ***** &lt;/MTIgnore&gt;
   &lt;MTIf name=&quot;keyword&quot; like=&quot;$CurCat&quot;&gt;
      &lt;li&gt;&lt;a href=&quot;&lt;$MTCategoryArchiveLink$&gt;&quot;&lt;MTIfNonEmpty tag=&quot;MTCategoryDescription&quot;&gt; title=&quot;&lt;$MTCategoryDescription$&gt;&quot;&lt;/MTIfNonEmpty&gt;&gt;&lt;$MTCategoryLabel$&gt; (&lt;$MTCategoryCount$&gt;)&lt;/a&gt;&lt;/li&gt;
   &lt;/MTIf&gt;
&lt;/MTCategories&gt;
&lt;/ul&gt;
</code></pre>
]]>
        
    </content>
</entry>

<entry>
    <title>便利なコメントアウトの仕方</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/0605variable/var_130.php" />
    <id>tag:www.mtde.info,2008://7.620</id>

    <published>2008-04-10T15:08:24Z</published>
    <updated>2008-04-10T15:49:03Z</updated>

    <summary>Movable Typeには、以前からMTIgnoreというテンプレートタグがあります。このテンプレートタグを用いて、コメント行ももちろんですが、実験中のコードなどをコメント化することが可能です。</summary>
    <author>
        <name>apstar</name>
        <uri>http://www.mtde.info/</uri>
    </author>
    
        <category term="変数" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mtignore" label="MTIgnore" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="variable" label="Variable" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.mtde.info/">
        <![CDATA[<p>Movable Typeには、バージョン4以前からMTIgnoreというテンプレートタグがあります。このテンプレートタグを用いて、コメント行ももちろんですが、実験中のコードなどをコメント化することが可能です。</p>

<p><a href="http://www.movabletype.jp/documentation/appendices/tags/ignore.html">本家のドキュメント</a>にも記述はありますが、あまり詳しく書いていませんのでここで説明します。</p>

<p>基本コードは以下のようになります。コメントアウトしたい部分をMTIgnoreタグで括ってあげるだけです。</p>
<pre><code>&lt;MTIgnore&gt;
コメントアウトしたいコード
&lt;/MTIgnore&gt;</code></pre>

<h3>コメント行として使う</h3>
<p>コード中のコメント行として使用することができます。以下は、わかりづらいと思われる部分にコメント行を付加してみた例です。なお、このMTIgnoreテンプレートタグを用いて記述したコメント行は、再構築時にはカットされ、htmlソース中には出力されません。</p>
<pre><code><font color="#0000ff">&lt;MTIgnore&gt; ***** 表示するカテゴリの一覧をカンマ区切りでkeyword変数へ代入 ***** &lt;/MTIgnore&gt;</font>
&lt;MTSetVar name=&quot;keyword&quot; value=&quot;カテゴリ1,カテゴリ3,カテゴリ5&quot;&gt;
&lt;ul&gt;
&lt;MTCategories&gt;
   <font color="#0000ff">&lt;MTIgnore&gt; ***** CurCat変数=ループ中のカテゴリラベル ***** &lt;/MTIgnore&gt;</font>
   &lt;MTSetVarBlock name=&quot;CurCat&quot;&gt;&lt;MTCategoryLabel&gt;&lt;/MTSetVarBlock&gt;
   <font color="#0000ff">&lt;MTIgnore&gt; ***** keyword変数内にCurCat変数が含まれるかチェック ***** &lt;/MTIgnore&gt;</font>
   &lt;MTIf name=&quot;keyword&quot; like=&quot;$CurCat&quot;&gt;
      &lt;li&gt;&lt;a href=&quot;&lt;$MTCategoryArchiveLink$&gt;&quot;&lt;MTIfNonEmpty tag=&quot;MTCategoryDescription&quot;&gt; title=&quot;&lt;$MTCategoryDescription$&gt;&quot;&lt;/MTIfNonEmpty&gt;&gt;&lt;$MTCategoryLabel$&gt; (&lt;$MTCategoryCount$&gt;)&lt;/a&gt;&lt;/li&gt;
   &lt;/MTIf&gt;
&lt;/MTCategories&gt;
&lt;/ul&gt;
</code></pre>

<h3>再利用したいかも、という箇所をとりあえず残しておく</h3>
<p>2種類のコードを書いて、双方を比べる際などに使用すると、開発の効率は一気に上がります。</p>
<p>以下のコードは、このmtde.info開発中の際のスタイルシートのコードで、固定幅にするかリキッドレイアウトにするかを何度も切り替え、調整を行っていたときのものです。もしMTIgnoreテンプレートタグが無ければ、切り替えが面倒になりますので、初めからリキッド固定のみしかテストしなかったと思います。</p>
<p>コード中にもありますが、MTIgnoreテンプレートタグは多重の入れ子にすることも可能です。</p>

<pre><code>&lt;MTIgnore&gt;定数セクション&lt;/MTIgnore&gt;

&lt;MTIgnore&gt;色の設定&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;COLOR_TEXT&quot; value=&quot;#333333&quot;&gt;                  &lt;MTIgnore&gt;Cテキスト色&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;COLOR_TEXT_A&quot; value=&quot;#104e8b&quot;&gt;                &lt;MTIgnore&gt;Cリンクテキスト色&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;COLOR_TEXT_A_HOVER&quot; value=&quot;#ff7f00&quot;&gt;          &lt;MTIgnore&gt;Cリンクテキストホバー色&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;COLOR_TEXT_R&quot; value=&quot;#ffffff&quot;&gt;                &lt;MTIgnore&gt;RCテキスト色(リバース)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;COLOR_TEXT_A_R&quot; value=&quot;#ffffff&quot;&gt;              &lt;MTIgnore&gt;RCリンクテキスト色(リバース)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;COLOR_TEXT_A_HOVER_R&quot; value=&quot;#ff7f00&quot;&gt;        &lt;MTIgnore&gt;RCリンクテキストホバー色(リバース)&lt;/MTIgnore&gt;

&lt;MTIgnore&gt;ヘッダとフッタ&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;COLOR_BACKGROUND_HEADER&quot; value=&quot;#ffffff&quot;&gt;     &lt;MTIgnore&gt;Cバック色(ヘッダ)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;HEIGHT_HEADER&quot; value=&quot;150px&quot;&gt;                 &lt;MTIgnore&gt;H高さ(ヘッダ)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;COLOR_BACKGROUND_FOOTER&quot; value=&quot;#333333&quot;&gt;     &lt;MTIgnore&gt;Cバック色(フッタ)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;HEIGHT_FOOTER&quot; value=&quot;32px&quot;&gt;                  &lt;MTIgnore&gt;H高さ(フッタ)&lt;/MTIgnore&gt;

&lt;MTSetVar name=&quot;COLOR_BACKGROUND_GLOBALNAVI&quot; value=&quot;#333333&quot;&gt; &lt;MTIgnore&gt;Cバックグラウンド色(グローバルナビゲーション)&lt;/MTIgnore&gt;

<font color="#0000ff">&lt;MTIgnore&gt;
&lt;MTIgnore&gt;固定幅&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;WIDTH_HEADER&quot; value=&quot;100%&quot;&gt;                   &lt;MTIgnore&gt;W幅(ヘッダ)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;WIDTH_BACKGROUND_GLOBALNAVI&quot; value=&quot;100%&quot;&gt;    &lt;MTIgnore&gt;W幅(グローバルナビ)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;WIDTH_CONTENT_TOTAL&quot; value=&quot;1000px&quot;&gt;          &lt;MTIgnore&gt;W幅(メイン総合)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;WIDTH_CONTENT_MAIN&quot; value=&quot;575px&quot;&gt;            &lt;MTIgnore&gt;W幅(メイン)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;WIDTH_CONTENT_MAIN2&quot; value=&quot;770px&quot;&gt;           &lt;MTIgnore&gt;W幅(メイン)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;WIDTH_CONTENT_SUB&quot; value=&quot;195px&quot;&gt;             &lt;MTIgnore&gt;W幅(サイドバー1)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;WIDTH_CONTENT_EXTRA&quot; value=&quot;195px&quot;&gt;           &lt;MTIgnore&gt;W幅(サイドバー2)&lt;/MTIgnore&amp;gt;
&lt;MTSetVar name=&quot;WIDTH_FOOTER&quot; value=&quot;100%&quot;&gt;                   &lt;MTIgnore&gt;W幅(フッタ)&lt;/MTIgnore&gt;
&lt;/MTIgnore&gt;</font>

&lt;MTIgnore&gt;リキッド(96%で)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;WIDTH_HEADER&quot; value=&quot;100%&quot;&gt;                   &lt;MTIgnore&gt;W幅(ヘッダ)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;WIDTH_BACKGROUND_GLOBALNAVI&quot; value=&quot;100%&quot;&gt;    &lt;MTIgnore&gt;W幅(グローバルナビ)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;WIDTH_CONTENT_TOTAL&quot; value=&quot;90%&quot;&gt;             &lt;MTIgnore&gt;W幅(メイン総合)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;WIDTH_CONTENT_MAIN&quot; value=&quot;52%&quot;&gt;              &lt;MTIgnore&gt;W幅(メイン)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;WIDTH_CONTENT_MAIN2&quot; value=&quot;74%&quot;&gt;             &lt;MTIgnore&gt;W幅(メイン)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;WIDTH_CONTENT_SUB&quot; value=&quot;22%&quot;&gt;               &lt;MTIgnore&gt;W幅(サイドバー1)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;WIDTH_CONTENT_EXTRA&quot; value=&quot;22%&quot;&gt;             &lt;MTIgnore&gt;W幅(サイドバー2)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;WIDTH_FOOTER&quot; value=&quot;100%&quot;&gt;                   &lt;MTIgnore&gt;W幅(フッタ)&lt;/MTIgnore&gt;

&lt;MTSetVar name=&quot;POSITION_HEADMARGIN_LEFT&quot; value=&quot;5%&quot;&gt;         &lt;MTIgnore&gt;P位置(サイトタイトル)&lt;/MTIgnore&gt;
&lt;MTSetVar name=&quot;POSITION_HEADMARGIN_RIGHT&quot; value=&quot;5%&quot;&gt;        &lt;MTIgnore&gt;P位置(検索)&lt;/MTIgnore&gt;
</code></pre>
]]>
        
    </content>
</entry>

<entry>
    <title>MTSetVarTemplateを用いた演算パッキングの例</title>
    <link rel="alternate" type="text/html" href="http://www.mtde.info/0640tipsvar/tipsvar_130php.php" />
    <id>tag:www.mtde.info,2008://7.622</id>

    <published>2008-04-26T00:50:55Z</published>
    <updated>2008-04-26T01:53:55Z</updated>

    <summary>MTSetVarTemplateテンプレートタグの特性を用いた、演算機能パッキングの例を紹介します。</summary>
    <author>
        <name>apstar</name>
        <uri>http://www.mtde.info/</uri>
    </author>
    
        <category term="Tips系" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="calc" label="Calc" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sample" label="Sample" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="variable" label="Variable" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.mtde.info/">
        <![CDATA[<p>MTSetVarTemplateテンプレートタグの特性を用いた、演算機能パッキングの例を紹介します。</p>
<p>MTSetVarBlockとMTSetVarTemplateの機能の相違点は次のようになります。</p>
<dl>
<dt>MTSetVarBlock</dt>
<dd>再構築時には必ず実行される。</dd>
<dt>MTSetVarTemplate</dt>
<dd>再構築時に、MTSetVarTemplateで定義された変数が参照されたときのみ実行される。</dd>
</dl>

<h3>例1:普通に演算コードを書いてみる</h3>
<p>以下の例では、tmpVal1とtmpVal2の値を足し合わせ、結果を2で割り、整数丸めを行っています。演算結果がマイナスになった場合は、演算結果を0で置き換えます。</p>
<p>なお、tmpVal1とtmpVal2の値は、3セット準備されています。</p>
<p>※このような演算は、CSSで定義された、とあるブロック内に配置する画像のpaddingを、変数を用いて自動演算させたい場合に考えられます。</p>
<pre><code>&lt;MTSetVar name=&quot;tmpVal1&quot; value=&quot;50&quot;&gt;
&lt;MTSetVar name=&quot;tmpVal2&quot; value=&quot;33&quot;&gt;
&lt;MTSetVar name=&quot;tmpVal1&quot; op=&quot;-&quot; value=&quot;$tmpVal2&quot;&gt;
&lt;MTSetVar name=&quot;tmp&quot; value=&quot;$tmpVal1&quot;&gt;
&lt;MTSetVar name=&quot;tmp&quot; op=&quot;/&quot; value=&quot;2&quot;&gt;
&lt;MTIf name=&quot;tmp&quot; lt=&quot;0&quot;&gt;
   &lt;MTSetVar name=&quot;tmp&quot; value=&quot;0&quot;&gt;
&lt;/MTIf&gt;
&lt;p&gt;1個目の計算値:&lt;MTGetVar name=&quot;tmp&quot; sprintf=&quot;%d&quot;&gt;&lt;/p&gt;

&lt;MTSetVar name=&quot;tmpVal1&quot; value=&quot;200&quot;&gt;
&lt;MTSetVar name=&quot;tmpVal2&quot; value=&quot;100&quot;&gt;
&lt;MTSetVar name=&quot;tmpVal1&quot; op=&quot;-&quot; value=&quot;$tmpVal2&quot;&gt;
&lt;MTSetVar name=&quot;tmp&quot; value=&quot;$tmpVal1&quot;&gt;
&lt;MTSetVar name=&quot;tmp&quot; op=&quot;/&quot; value=&quot;2&quot;&gt;
&lt;MTIf name=&quot;tmp&quot; lt=&quot;0&quot;&gt;
   &lt;MTSetVar name=&quot;tmp&quot; value=&quot;0&quot;&gt;
&lt;/MTIf&gt;
&lt;p&gt;2個目の計算値:&lt;MTGetVar name=&quot;tmp&quot; sprintf=&quot;%d&quot;&gt;&lt;/p&gt;

&lt;MTSetVar name=&quot;tmpVal1&quot; value=&quot;70&quot;&gt;
&lt;MTSetVar name=&quot;tmpVal2&quot; value=&quot;200&quot;&gt;
&lt;MTSetVar name=&quot;tmpVal1&quot; op=&quot;-&quot; value=&quot;$tmpVal2&quot;&gt;
&lt;MTSetVar name=&quot;tmp&quot; value=&quot;$tmpVal1&quot;&gt;
&lt;MTSetVar name=&quot;tmp&quot; op=&quot;/&quot; value=&quot;2&quot;&gt;
&lt;MTIf name=&quot;tmp&quot; lt=&quot;0&quot;&gt;
   &lt;MTSetVar name=&quot;tmp&quot; value=&quot;0&quot;&gt;
&lt;/MTIf&gt;
&lt;p&gt;3個目の計算値:&lt;MTGetVar name=&quot;tmp&quot; sprintf=&quot;%d&quot;&gt;&lt;/p&gt;
</code></pre>

<p>Movable Type 4以降で準備された変数演算は、便利ではあるものの、このような簡単な演算にも多数行に渡る「同じような」コードを書かねばならず、コードを書く効率が悪いですし、ソースの見通しが悪いです。</p>

<h3>例2:MTSetvarTemplateで書き換えてみる</h3>
<p>例1のコードをMTSetVarTemplateテンプレートタグで同等に書き換えた例が以下コードです。</p>

<pre><code>&lt;MTSetVarTemplate name=&quot;getpad&quot;&gt;
&lt;MTSetVar name=&quot;tmpVal1&quot; op=&quot;-&quot; value=&quot;$tmpVal2&quot;&gt;
&lt;MTSetVar name=&quot;tmp&quot; value=&quot;$tmpVal1&quot;&gt;
&lt;MTSetVar name=&quot;tmp&quot; op=&quot;/&quot; value=&quot;2&quot;&gt;
&lt;MTIf name=&quot;tmp&quot; ge=&quot;0&quot;&gt;
   &lt;MTGetVar name=&quot;tmp&quot; sprintf=&quot;%d&quot;&gt;
&lt;MTElse&gt;
   &lt;MTSetVar name=&quot;tmp&quot; value=&quot;0&quot;&gt;
   &lt;MTGetVar name=&quot;tmp&quot; sprintf=&quot;%d&quot;&gt;
&lt;/MTIf&gt;
&lt;/MTSetVarTemplate&gt;

...（中略）...

&lt;MTSetVar name=&quot;tmpVal1&quot; value=&quot;50&quot;&gt;
&lt;MTSetVar name=&quot;tmpVal2&quot; value=&quot;33&quot;&gt;
&lt;p&gt;1個目の計算値:&lt;MTGetVar name=&quot;getpad&quot;&gt;&lt;/p&gt;

&lt;MTSetVar name=&quot;tmpVal1&quot; value=&quot;200&quot;&gt;
&lt;MTSetVar name=&quot;tmpVal2&quot; value=&quot;100&quot;&gt;
&lt;p&gt;2個目の計算値:&lt;MTGetVar name=&quot;getpad&quot;&gt;&lt;/p&gt;

&lt;MTSetVar name=&quot;tmpVal1&quot; value=&quot;70&quot;&gt;
&lt;MTSetVar name=&quot;tmpVal2&quot; value=&quot;200&quot;&gt;
&lt;p&gt;3個目の計算値:&lt;MTGetVar name=&quot;getpad&quot;&gt;&lt;/p&gt;
</code></pre>

<p>MTSetVarTemplateタグで囲まれた部分が、変数演算機能をパッキングした部分で、計算のたびに同じコードが使用されます。</p>
<p>「...（中略）...」より下の部分で、演算機能を利用するときのコードを書きます（が、ここには演算コードはひとつも書きません）。tmpVal1変数とtmpVal2へ値を代入し、<code>&lt;MTGetVar name=&quot;getpad&quot;&gt;</code>と書いてgetpad変数を参照すると、MTSetVarTemplateで括られた（これには変数名nameにgetpadが指定されている）部分が実行されるわけです。</p>
<p>MTSetVarTemplateで定義されたgetpad変数が一度も参照されなかった場合は、MTSetVarTemplateで括られたコード群は一度も実行されませんし、100回参照されれば100回実行されます。演算機会が多ければ多いほどその真価を発揮します。</p>

<p>この演算の頻度が非常に多い場合は、このMTSetvarTemplateの部分は個別にモジュール化し、テンプレート先頭付近でそのモジュールをインクルードさせると更にすっきりします。</p>
<p>Movable Typeでは変数はグローバル変数（どこからでも参照できる）で扱われます。他のモジュールから参照することができます。同時に、意図しない変数の書き換えを行ってしまわないように注意が必要です。</p>
]]>
        
    </content>
</entry>

</feed>
