<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>The blog of H.Fujimoto</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/" />
    <link rel="self" type="application/atom+xml" href="http://www.h-fj.com/blog/atom2.xml" />
    <id>tag:www.h-fj.com,2008-06-26:/blog//1</id>
    <updated>2012-02-07T01:45:26Z</updated>
    <subtitle>Personal Computer, Financial Planning, etc...</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 5.12</generator>

<entry>
    <title>PHPUtilプラグイン（その3・日時関係の処理）</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/archives/2012/02/07-093000.php" />
    <id>tag:www.h-fj.com,2012:/blog//1.2806</id>

    <published>2012-02-07T00:30:00Z</published>
    <updated>2012-02-07T01:45:26Z</updated>

    <summary>PHPUtilプラグインでは、ページにアクセスがあった日時を元にして、出力を変えるテンプレートタグもあります。それらについて解説します。</summary>
    <author>
        <name>壱</name>
        <uri>http://www.h-fj.com/blog/</uri>
    </author>
    
        <category term="自作プラグイン" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="movabletype" label="Movable Type" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype5" label="Movable Type 5" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype51" label="Movable Type 5.1" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.h-fj.com/blog/">
        <![CDATA[<p>
PHPUtilプラグインでは、ページにアクセスがあった日時を元にして、出力を変えるテンプレートタグもあります。<br />
それらについて解説します。
</p>
        <h2>1.MTPHPDateタグ</h2>

<p>
MTPHPDateタグは、ページにアクセスがあった日時を出力するテンプレートタグ（ファンクションタグ）です。<br />
Movable Type標準の日付系テンプレートタグと同様に、<a href="http://www.movabletype.jp/documentation/appendices/date-formats.html">formatモディファイア</a>で出力をカスタマイズすることができます。
</p>

<p>
例えば、「現在の日時は〇〇年〇〇月〇〇日 〇〇時〇〇分〇〇秒です」のように出力したい場合、以下のようにテンプレートに記述します。
</p>

<script type="text/javascript" src="http://www.h-fj.com/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="http://www.h-fj.com/syntaxhighlighter/scripts/shBrushXml.js "></script>
<script type="text/javascript">
SyntaxHighlighter.config.clipboardSwf = 'http://www.h-fj.com/syntaxhighlighter/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>

<pre class="brush : html">現在の日時は&lt;$mt:PHPDate format=&quot;%Y年%m月%d日 %H時%M分%S秒&quot;$&gt;です</pre>

<p>
この部分を含むページを開くと、その都度現在の日時が表示されます。
</p>

<h2>2.MTPHPIfDateタグ</h2>

<p>
MTPHPIfDateタグは、現在の日時が一定期間内に入っているかどうかを調べ、入っていればタグのブロック内を出力するブロックタグです。
</p>

<p>
以下の4つのモディファイアで、日付の範囲を指定します。<br />
また、日付は「20120123123456」のように、年は4桁、月／日／時／分／秒はそれぞれ2桁で指定します。
</p>

<table>
<tr><th>モディファイア</th><th>判断する条件</th></tr>
<tr><td>lt="比較日時"</td><td>現在の日時が比較日時より前（比較日時ちょうどは含まない）</td></tr>
<tr><td>gt="比較日時"</td><td>現在の日時が比較日時より後（比較日時ちょうどは含まない）</td></tr>
<tr><td>le="比較日時"</td><td>現在の日時が比較日時より前（比較日時ちょうども含む）</td></tr>
<tr><td>ge="比較日時"</td><td>現在の日時が比較日時より後（比較日時ちょうども含む）</td></tr>
</table>

<p>
例えば、以下のように書くと、MTPHPIfDateタグのブロックの中身は、2012年3月1日より前の間だけ表示されます。
</p>

<pre class="brush : html">&lt;mt:PHPIfDate lt=&quot;20120301000000&quot;&gt;
2012年3月1日より前の時だけ表示する内容
&lt;/mt:PHPIfDate&gt;</pre>

<p>
また、モディファイアを2つ指定して、一定期間内だけブロック内を表示するようにすることもできます。<br />
例えば、以下のように書くと、MTPHPIfDateタグのブロックの中身は、2012年3月1日0時0分0秒から、2012年3月8日0時0分0秒になる直前の間だけ表示されます。
</p>

<pre class="brush : html">&lt;mt:PHPIfDate ge=&quot;20120301000000&quot; lt=&quot;20120308000000&quot;&gt;
2012年3月1日0時0分0秒～2012年3月8日0時0分0秒の間だけ表示する内容
&lt;/mt:PHPIfDate&gt;</pre>

<p>
なお、比較日時は、最後の秒から順に省略することができます。<br />
時／分／秒を省略した場合は、「00」を指定したものとみなします。<br />
また、日／月を省略した場合は、「01」を指定したものとみなします。
</p>

<p>
例えば、「&lt;mt:PHPIfDate ge="201203" lt="201204"&gt;」と書くと、2012年3月1日0時0分0秒から、2012年4月1日0時0分0秒になる直前まで、つまり2012年3月中だけ、何かを出力することができます。
</p>

<h2>3.MTPHPIfDateDiffタグ</h2>

<p>
MTPHPIfDateDiffタグは、あるテンプレートタグの日時から現在の日時までの経過時間を調べ、それが一定範囲内に入っている時だけ、タグのブロック内を出力するブロックタグです。<br />
書き方は以下のようになります。
</p>

<pre class="brush : html">&lt;mt:PHPIfDateDiff tag=&quot;比較対象のテンプレートタグ&quot; 比較モディファイア=&quot;経過時間&quot;&gt;
条件を満たしている時に出力する内容
&lt;/mt:PHPIfDateDiff&gt;</pre>

<p>
「比較対象のテンプレートタグ」には、現在の日時と比較したい日時を表すテンプレートタグ名を指定します。<br />
ただし、先頭の「MT」は書きません。<br />
例えば、ブログ記事の公開日時と現在の日時を比較したい場合、「tag="EntryDate"」と書きます。
</p>

<p>
「比較モディファイア」には、MTPHPIfDateタグと同様に、lt／gt／le／geのいずれか（またはそれらの中の2つ）を指定します。
</p>

<p>
また、経過時間は「1d」「3m」のような書き方で表します。「d」等の単位の意味は以下の通りです。<br />
「1d12h」のように、複数の単位を並べて指定することもできます。
</p>

<table>
<col width="100" />
<col width="100" />
<tr><th>単位</th><th>意味</th></tr>
<tr><td>w</td><td>週</td></tr>
<tr><td>d</td><td>日</td></tr>
<tr><td>h</td><td>時</td></tr>
<tr><td>m</td><td>分</td></tr>
<tr><td>s</td><td>秒</td></tr>
</table>

<p>
例えば、ブログ記事を公開してから1週間だけ、「New」のマークを表示したいとします。<br />
この場合、MTEntriesタグのブロックの中や、ブログ記事アーカイブテンプレートの中などで、Newのマークを出力したい位置に以下のようなタグを入れます。
</p>

<pre class="brush : html">&lt;mt:PHPIfDateDiff tag=&quot;EntryDate&quot; le=&quot;1w&quot;&gt;
Newマークを出力するHTML
&lt;/mt:PHPIfDateDiff&gt;</pre>

<h2>4.MTPHPElseタグ</h2>

<p>
MTPHPIfDate／MTPHPIfDateDiffタグで、条件を満たす時と満たさない時とで出力を分けたい場合は、MTPHPElseタグを使って以下のように書きます。
</p>

<pre class="brush : html">&lt;mt:PHPIfDateまたはmt:PHPIfDateDiff ・・・&gt;
条件を満たす時に出力する部分
&lt;mt:PHPElse&gt;
条件を見たさない時に出力する部分
&lt;/mt:PHPIfDateまたはmt:PHPIfDateDiff&gt;</pre>
]]>
    </content>
</entry>

<entry>
    <title>PHPUtilプラグイン（その2・ファイルの読み込み）</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/archives/2012/02/06-093851.php" />
    <id>tag:www.h-fj.com,2012:/blog//1.2804</id>

    <published>2012-02-06T00:38:51Z</published>
    <updated>2012-02-06T07:27:24Z</updated>

    <summary>PHPUtilプラグインで追加されるテンプレートタグのうち、ファイルを読み込んでその位置に出力するテンプレートタグを取り上げます。</summary>
    <author>
        <name>壱</name>
        <uri>http://www.h-fj.com/blog/</uri>
    </author>
    
        <category term="自作プラグイン" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="movabletype" label="Movable Type" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype5" label="Movable Type 5" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype51" label="Movable Type 5.1" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.h-fj.com/blog/">
        <![CDATA[<p>
PHPUtilプラグインをインストールすると、多くのテンプレートタグが追加されます。<br />
それらの中から、簡単なテンプレートタグから順に解説していきます。<br />
今日は、ファイルを読み込んでその位置に出力するテンプレートタグを取り上げます。<br />

</p>
        <h2>1.MTPHPReadFileタグ</h2>

<p>
出力中のページに、他のファイルから読み込んだ内容を組み込みたい場面は、多々あります。<br />
例えば、ブログのすべてのページで共通な部分（サイドバー等）を1つのファイルに出力しておいて、各ページに組み込むような場合です。
</p>

<p>
MTPHPReadFileタグは、このような場合に使います。<br />
書き方は以下の通りです。
</p>

<script type="text/javascript" src="http://www.h-fj.com/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="http://www.h-fj.com/syntaxhighlighter/scripts/shBrushXml.js "></script>
<script type="text/javascript">
SyntaxHighlighter.config.clipboardSwf = 'http://www.h-fj.com/syntaxhighlighter/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>

<pre class="brush : html;">
&lt;$mt:PHPReadFile file="ファイル名"$&gt;
</pre>

<h3>1-1.相対パス指定</h3>

<p>
ファイル名を相対パスで書くと、ブログ（ウェブサイト）のディレクトリを基準に、ファイルが読み込まれます。<br />
例えば、以下のように書くと、このタグの位置に、ブログ（ウェブサイト）のディレクトリにある「sidebar.html」というファイルが読み込まれます。
</p>

<pre class="brush : html;">
&lt;$mt:PHPReadFile file="sidebar.html"$&gt;
</pre>

<h3>1-2.絶対パス指定</h3>

<p>
ファイル名を絶対パスで書くと、サーバー上のそのパスのファイルが読み込まれます。<br />
例えば、以下のように書くと、このタグの位置に、サーバー上の「/var/data/sidebar.html」というファイルが読み込まれます。
</p>

<pre class="brush : html;">
&lt;$mt:PHPReadFile file="/var/data/sidebar.html"$&gt;
</pre>

<h3>1-3.記号で指定</h3>

<p>
さらに、fileモディファイアは、MTFileTemplateタグのformatモディファイアと同じ書き方をすることができます。<br />
例えば、以下のように書くと、ブログ（ウェブサイト）のディレクトリにある「entryXXX.html」（XXXはもっとも新しいブログ記事のID）のようなファイルを読み込んで出力することができます。
</p>

<pre class="brush : html;">&lt;mt:Entires lastn=&quot;1&quot;&gt;
&lt;$mt:PHPReadFile file=&quot;entry%E.html&quot;$&gt;
&lt;/mt:Entries&gt;</pre>

<h2>2.MTPHPIncludeタグ</h2>

<p>
MTPHPReadFileタグと似た動作をするテンプレートタグとして、「MTPHPInclude」というタグも追加されます。<br />
書き方は以下の通りで、MTPHPReadFileタグとほぼ同じです。
</p>

<pre class="brush : html;">
&lt;$mt:PHPReadInclude file="ファイル名"$&gt;
</pre>

<p>
MTPHPReadFileタグでは、ファイルの中にPHPのコードが含まれていても、PHPとして処理されず、そのまま文字列の形で出力されます。<br />
一方、MTPHPIncludeタグでは、ファイルの中にPHPのコードが含まれていた場合は、その部分がPHPとして処理されます。
</p>

<p>
例えば、読み込むファイルの内容が以下のようになっているとします。
</p>

<pre class="brush : html;">&lt;?php echo 'Hello, world.'; ?&gt;</pre>

<p>
この場合、MTPHPReadFileタグでこのファイルを読み込むと、「&lt;?php echo 'Hello, world.'; ?&gt;」とそのまま出力されます。<br />
一方、MTPHPReadFileタグで読み込んだ場合、PHPのecho文コードとして処理され、「Hello, world.」だけが出力されます。
</p>

<h2>3.MTPHPIncludeOnceタグ</h2>

<p>
MTPHPIncludeOnceタグも、MTPHPIncludeタグと同様に、読み込んだファイルの中にPHPのコードがあれば、PHPとして処理されます。<br />
ただし、同じファイルを複数回読み込んだ場合は、最初の一回だけ処理が行われ、二回目以降は無視されます。
</p>

<p>
場合によっては、PHPのライブラリのファイルを組み込みたいことがあります。<br />
この場合、同じライブラリを複数回組み込まないようにするために、MTPHPIncludeOnceタグを使うと良いです。<br />

</p>]]>
    </content>
</entry>

<entry>
    <title>ハードディスクの流通が改善し始める</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/archives/2012/02/05-101040.php" />
    <id>tag:www.h-fj.com,2012:/blog//1.2813</id>

    <published>2012-02-05T01:10:40Z</published>
    <updated>2012-02-05T01:10:40Z</updated>

    <summary>ハードディスクの流通が改善し始めたそうです。</summary>
    <author>
        <name>壱</name>
        <uri>http://www.h-fj.com/blog/</uri>
    </author>
    
        <category term="ハードウェア" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="ハードディスク" label="ハードディスク" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.h-fj.com/blog/">
        <![CDATA[<p>インプレスの<a href="http://akiba-pc.watch.impress.co.jp/">AKIBA PC Hotline</a>によると、秋葉原でハードディスクの流通が改善し始めたそうです。</p>

<p><a href="http://akiba-pc.watch.impress.co.jp/hotline/20120204/etc_hdd.html">HDDに需給改善の動き、購入制限解除のショップ増える</a><br />
</p>
        <p>2011年の秋に、タイが洪水に見舞われました。<br />
タイは世界のハードディスクの約50％を生産していて、洪水の影響でハードディスクが品薄になり、値段も高騰しました。<br />
そのため、秋葉原ではハードディスクの販売制限が行われていました。</p>

<p>しかし、ここにきて秋葉原での販売制限が解除され始めたということです。<br />
値段はまだ高いままですが、今後流通が正常化すれば、値段も徐々に下がっていくと思われます。</p>

<p>SSDも手ごろになってきましたが、大容量を求めるならやはりハードディスクが必要です。<br />
ハードディスクの流通と値段がはやく正常化して欲しいものです。<br />
</p>]]>
    </content>
</entry>

<entry>
    <title>今月／来月の記事一覧を出力する(後編）</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/archives/2012/02/04-093038.php" />
    <id>tag:www.h-fj.com,2012:/blog//1.2807</id>

    <published>2012-02-04T00:30:38Z</published>
    <updated>2012-02-04T00:30:38Z</updated>

    <summary>Movable Typeで、ブログの今月の記事と来月の記事を表示する方法を紹介します。今日はその後編です。</summary>
    <author>
        <name>壱</name>
        <uri>http://www.h-fj.com/blog/</uri>
    </author>
    
        <category term="カスタマイズ・TIPS" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="movabletype" label="Movable Type" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype5" label="Movable Type 5" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mtos" label="MTOS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="日付" label="日付" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.h-fj.com/blog/">
        <![CDATA[<p>
昨日に続いて、今月／来月の記事一覧を出力する方法を紹介します。<br />
今日は、今月または来月の記事がない場合に、「記事はありません」と出力できるようにする方法を取り上げます。<br />

</p>
        <h2>1.今月／来月の記事をいったん変数に代入する</h2>

<p>
昨日のテンプレートでは、今月／来月の記事一覧を直接に出力します。<br />
ただし、MTArchiveListタグは、記事がないアーカイブは一切出力しません。<br />
今月（または来月）に記事がない場合、その月については、MTArchiveListタグのブロック内が処理されません。<br />
結果として、今月（または来月）に記事がないと、その部分には何も出力されなくなってしまいます。
</p>

<p>
そこで、今月／来月の記事を直接に出力せずに、いったんハッシュに代入します。<br />
そして、後でハッシュの内容を確認し、記事があるかどうかを判断してから、出力するようにします。
</p>

<p>
昨日の記事のMTEntriesタグのブロックをMTSetVarBlockタグで囲み、ハッシュに代入します。<br />
ハッシュのキーとして、「201201」のような年月（変数this_monthやnext_monthの値）を使います。<br />
そして、ハッシュの値として、出力する記事一覧を代入します。
</p>

<p>
例えば、今月が2012年2月だとします。<br />
この場合、今月と来月の両方に記事があれば、ハッシュの内容は以下のようになります。
</p>

<table>
<tr><th>キー</th><th>値</th></tr>
<tr><td>201202</td><td>2012年2月の記事一覧</td></tr>
<tr><td>201203</td><td>2012年3月の記事一覧</td></tr>
</table>

<p>
一方、2012年2月に記事があって、3月に記事がない場合は、3月についてはMTArchiveタグのブロックが実行されません。<br />
そのため、ハッシュの内容は以下のようになります。
</p>

<table>
<tr><th>キー</th><th>値</th></tr>
<tr><td>201202</td><td>2012年2月の記事一覧</td></tr>
</table>

<p>
このようにしてハッシュを作った後、ハッシュに今月／来月の要素があるかどうかを条件判断します。<br />
要素があれば（＝記事一覧が代入されていれば）、その記事一覧を出力します。<br />
一方、要素がなければ、「記事はありません」と出力します。
</p>

<h2>2.テンプレートを書き換える</h2>

<p>
ここまでの話に基づいて、昨日紹介したテンプレートを書き換えると、以下のようになります。
</p>

<script type="text/javascript" src="http://www.h-fj.com/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="http://www.h-fj.com/syntaxhighlighter/scripts/shBrushXml.js "></script>
<script type="text/javascript">
SyntaxHighlighter.config.clipboardSwf = 'http://www.h-fj.com/syntaxhighlighter/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>

<pre class="brush : html">&lt;$mt:Date format=&quot;%Y%m&quot; setvar=&quot;this_month&quot;$&gt;
&lt;$mt:GetVar name=&quot;this_month&quot; op=&quot;++&quot; setvar=&quot;next_month&quot;$&gt;
&lt;mt:If name=&quot;next_month&quot; like=&quot;13$&quot;&gt;
  &lt;$mt:Date format=&quot;%Y&quot; setvar=&quot;next_year&quot;$&gt;
  &lt;$mt:GetVar name=&quot;next_year&quot; op=&quot;++&quot; setvar=&quot;next_month&quot;$&gt;
  &lt;$mt:SetVar name=&quot;next_month&quot; append=&quot;1&quot; value=&quot;01&quot;$&gt;
&lt;/mt:If&gt;

&lt;mt:Blogs include_blogs=&quot;2&quot;&gt;
  &lt;mt:ArchiveList archive_type=&quot;Monthly&quot;&gt;
    &lt;$mt:ArchiveDate format=&quot;%Y%m&quot; setvar=&quot;archive_month&quot;$&gt;
    &lt;$mt:SetVar name=&quot;flag&quot; value=&quot;0&quot;$&gt;
    &lt;mt:If name=&quot;archive_month&quot; eq=&quot;$this_month&quot;&gt;
      &lt;$mt:SetVar name=&quot;flag&quot; value=&quot;1&quot;$&gt;
    &lt;mt:Else name=&quot;archive_month&quot; eq=&quot;$next_month&quot;&gt;
      &lt;$mt:SetVar name=&quot;flag&quot; value=&quot;1&quot;$&gt;
    &lt;/mt:If&gt;
    &lt;mt:If name=&quot;flag&quot;&gt;
      &lt;mt:SetVarBlock name=&quot;entries&quot; key=&quot;$archive_month&quot;&gt;
      &lt;h2&gt;&lt;$mt:ArchiveDate format=&quot;%Y/%m&quot;$&gt;&lt;/h2&gt;
      &lt;mt:Entries&gt;
      &lt;div&gt;
        &lt;h3&gt;&lt;$mt:EntryTitle$&gt;&lt;/h3&gt;
        &lt;$mt:EntryBody$&gt;
      &lt;/div&gt;  
      &lt;/mt:Entries&gt;
      &lt;/mt:SetVarBlock&gt;
    &lt;/mt:If&gt;
  &lt;/mt:ArchiveList&gt;
&lt;/mt:Blogs&gt;

&lt;mt:If name=&quot;entries&quot; key=&quot;$next_month&quot;&gt;
  &lt;$mt:GetVar name=&quot;entries&quot; key=&quot;$next_month&quot;&gt;
&lt;mt:Else&gt;
  &lt;h2&gt;&lt;$mt:Date ts=&quot;$next_month&quot; format=&quot;%Y/%m&quot;&gt;&lt;/h2&gt;
  &lt;div&gt;&lt;p&gt;記事はありません。&lt;/p&gt;&lt;/div&gt;
&lt;/mt:If&gt;
&lt;mt:If name=&quot;entries&quot; key=&quot;$this_month&quot;&gt;
  &lt;$mt:GetVar name=&quot;entries&quot; key=&quot;$this_month&quot;&gt;
&lt;mt:Else&gt;
  &lt;h2&gt;&lt;$mt:Date ts=&quot;$this_month&quot; format=&quot;%Y/%m&quot;&gt;&lt;/h2&gt;
  &lt;div&gt;&lt;p&gt;記事はありません。&lt;/p&gt;&lt;/div&gt;
&lt;/mt:If&gt;</pre>

<p>
昨日のリストと比べると、19／27行目のMTSetVarBlockタグと、32行目以降が追加になっています。
</p>

<p>
19／27行目のMTSetVarBlockタグは、今月および来月の記事一覧を、「entries」という名前のハッシュに代入する働きをします。<br />
ハッシュのキーとして、変数archive_monthの値を指定していますので、キーは「201201」などの年月の値になります。
</p>

<p>
32～37行目は、来月に記事があるかどうかを判断して、出力を分ける部分です。<br />
32行目のMTIfタグでは、ハッシュentriesの中で、キーが来月の月（変数next_month）になっている要素があるかどうかを判断しています。
</p>

<p>
要素があれば、33行目によって、その値が出力されます。<br />
ハッシュの値には、19～27行目のMTSetVarBlockタグによって、個々の月のブログ記事一覧が代入されていますので、結果として来月のブログ記事一覧が出力されます。
</p>

<p>
一方、ハッシュに要素がない場合は、32行目のMTIfタグが成立せず、34行目のMTElseタグ以降によって、「記事はありません」と出力されます。
</p>

<p>
38～43行目では、32～37行目と同様の考え方で、今月の記事があるかどうかを判断して出力を分けています。
</p>

<h2>3.変数や条件判断は必須</h2>

<p class="pkg"><a href="http://www.h-fj.com/blog/mt51bookvol2/"><img src="http://www.h-fj.com/blog/mt51bookvol2/mt51book2.png" width="80" height="114" alt="Movable Type 5.1 Webサイト製作ガイドVolume 2" title=t="Movable Type 5.1 Webサイト製作ガイドVolume 2" class="left_float" /></a>この例のように、手の込んだ処理をしようとすると、変数や条件判断を避けて通ることができません。<br />
拙著「<a href="http://www.h-fj.com/blog/mt51bookvol2/">Movable Type 5.1 Webサイト製作ガイドVolume 2</a>」では、変数や条件判断について、かなり詳しく解説しています。<br />
「変数や条件判断がよく分からない」という方は、ぜひ拙著をお読みください。
</p>]]>
    </content>
</entry>

<entry>
    <title>今月／来月の記事一覧を出力する(前編）</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/archives/2012/02/03-082141.php" />
    <id>tag:www.h-fj.com,2012:/blog//1.2805</id>

    <published>2012-02-02T23:21:41Z</published>
    <updated>2012-02-03T06:47:08Z</updated>

    <summary>Movable Typeで、ブログの今月の記事と来月の記事を表示する方法を紹介します。今日はその前編です。</summary>
    <author>
        <name>壱</name>
        <uri>http://www.h-fj.com/blog/</uri>
    </author>
    
        <category term="カスタマイズ・TIPS" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="movabletype" label="Movable Type" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype5" label="Movable Type 5" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mtos" label="MTOS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="日付" label="日付" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.h-fj.com/blog/">
        <![CDATA[<p>
MTQで以下のような質問が上がっていました。
</p>

<blockquote><p>ウェブサイトテンプレートで、ブログの今月の記事と来月の記事を表示する方法がわからないです。</p></blockquote>

<p>
すでに<a href="http://linker.in/journal/2012/02/movable-type-54.php">まーしーさんが解答しています</a>が、私も答えてみます。<br />

</p>
        <h2>1.今月を得る</h2>

<p>
まず、今月を「201202」のような形で得て、変数this_monthに代入することから始めます。<br />
後で今月かどうかを条件判断する際に、この変数を使います。
</p>

<p>
現在（正確には、最後に再構築した時）は、MTDateタグで得ることができます。<br />
このタグにformatモディファイアを指定して「yyyymm」の形に変換すると、今月を得ることができます。<br />
その値を変数this_monthに代入します。<br />
実際にテンプレートタグを書くと、以下のようになります。
</p>

<script type="text/javascript" src="http://www.h-fj.com/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="http://www.h-fj.com/syntaxhighlighter/scripts/shBrushXml.js "></script>
<script type="text/javascript">
SyntaxHighlighter.config.clipboardSwf = 'http://www.h-fj.com/syntaxhighlighter/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>

<pre class="brush : html">&lt;$mt:Date format=&quot;%Y%m&quot; setvar=&quot;this_month&quot;$&gt;</pre>

<h2>2.来月を得る</h2>

<p>
次に、変数this_monthの値に1を足し、来月を得て、変数next_monthに代入します。<br />
後で来月かどうかを条件判断する際に、この変数を使います。
</p>

<p>
ただ、今月が12月である場合、単に変数の値を1増やすだけだと、「201213」のように13月になってしまいます。<br />
そこで、変数next_monthの値の最後が「13」になっている場合は、年を1つ増やし、月を「01」にします。
</p>

<p>
この処理を書くと、以下のようになります。
</p>

<pre class="brush : html">&lt;$mt:GetVar name=&quot;this_month&quot; op=&quot;++&quot; setvar=&quot;next_month&quot;$&gt;
&lt;mt:If name=&quot;next_month&quot; like=&quot;13$&quot;&gt;
  &lt;$mt:Date format=&quot;%Y&quot; setvar=&quot;next_year&quot;$&gt;
  &lt;$mt:GetVar name=&quot;next_year&quot; op=&quot;++&quot; setvar=&quot;next_month&quot;$&gt;
  &lt;$mt:SetVar name=&quot;next_month&quot; append=&quot;1&quot; value=&quot;01&quot;$&gt;
&lt;/mt:If&gt;</pre>

<p>
まず、1行目のMTGetVarタグで、変数this_monthの値に1を足し、変数next_monthに代入します。
</p>

<p>
次に、2行目のMTIfタグで、変数next_monthの最後が「13」になっているかどうかを調べます。<br />
likeモディファイアは、変数の値を正規表現で比較する働きをします。<br />
「$」は「値の最後」を意味しますので、「13$」で「値の最後が13」という意味になります。
</p>

<p>
MTIfタグの条件が成立した時には、3～5行目が実行されます。<br />
まず、3行目のMTDateタグで、今年の年を取り出し、変数next_yearに代入します。<br />
次に、4行目のMTGetVarタグで、変数next_yearの値に1を足し、変数next_monthに代入します。<br />
そして、5行目のMTSetrVarタグで、変数next_monthの最後に「01」を連結します。
</p>

<h2>3.月ごとに記事をまとめて出力する</h2>

<p>
月ごとに記事をまとめて出力するには、MTArchiveListタグとMTEntriesタグを組み合わせて、以下のように書きます。
</p>

<pre class="brush : html">&lt;mt:ArchiveList archive_type=&quot;Monthly&quot;&gt;
  ・
  ・（各種の処理）
  ・
  &lt;mt:Entries&gt;
    ・
    ・（個々のブログ記事の内容を出力する処理)
    ・
  &lt;/mt:Entries&gt;
  ・
  ・（各種の処理）
  ・
&lt;/mt:ArchiveList&gt;</pre>

<p>
また、ウェブサイト内のテンプレートで、特定のブログの記事を月ごとにまとめて出力するなら、上記の部分を&lt;mt:Blogs include_blogs="ブログのID"&gt;～&lt;/mt:Blogs&gt;のタグで囲みます。
</p>

<h2>4.今月か来月を判断する</h2>

<p>
今取り上げている例では、アーカイブの月が今月か来月の時だけ、MTEntriesタグの部分を出力するようにします。<br />
したがって、「アーカイブの月が今月か来月」という条件判断（MTIfタグ）で、MTEntriesタグの部分を囲みます。
</p>

<p>
MTIfタグでは、「2つの条件のどちらかを満たした時」という処理を、残念ながらスマートに書くことができません。<br />
このような処理は、以下の形で書きます。
</p>

<ul>
<li>フラグ用の変数に0を代入します。</li>
<li>1つ目の条件を判断し、条件を満たしていたら、フラグ用の変数の値を1にします。</li>
<li>2つ目の条件を判断し、条件を満たしていたら、フラグ用の変数の値を1にします。</li>
<li>2つの条件のどちらかを満たせば、上の2つの処理の結果、フラグ用変数の値が1になっています。そこで、「フラグ用変数の値が1」という条件で、処理を分けます。</li>
</ul>

<p>
変数archive_monthに、アーカイブの月を代入するものとします。<br />
この場合だと、以下のようにすることで、今月または来月のアーカイブの時だけ、ブログ記事の一覧を出力することができます。
</p>

<pre class="brush : html">&lt;$mt:ArchiveDate format=&quot;%Y%m&quot; setvar=&quot;archive_month&quot;$&gt;
&lt;$mt:SetVar name=&quot;flag&quot; value=&quot;0&quot;$&gt;
&lt;mt:If name=&quot;archive_month&quot; eq=&quot;$this_month&quot;&gt;
  &lt;$mt:SetVar name=&quot;flag&quot; value=&quot;1&quot;$&gt;
&lt;mt:Else name=&quot;archive_month&quot; eq=&quot;$next_month&quot;&gt;
  &lt;$mt:SetVar name=&quot;flag&quot; value=&quot;1&quot;$&gt;
&lt;/mt:If&gt;
&lt;mt:If name=&quot;flag&quot;&gt;
・
・（ブログ記事の一覧を出力する処理）
・
&lt;/mt:If&gt;</pre>

<p>
1行目のMTArchiveDateタグで、アーカイブの年月を得て、formatモディファイアで「201201」のような形にして、変数archive_monthに代入します。<br />
2行目では、MTSetVarタグを使って、フラグ用の変数（flag）の値を0にします。<br />
3行目のMTIfタグで、変数archive_monthが、変数this_monthの値と等しければ、4行目のMTSetVarタグで変数flagを1にします。<br />
また、5行目のMTElseタグで、変数archive_monthが、変数next_monthの値と等しければ、6行目のMTSetVarタグで変数flagを1にします。
</p>

<p>
これで、変数archive_monthが、変数this_month／next_monthのどちらかと等しければ（＝アーカイブの月が今月か来月であれば）、変数flagの値が1になります。<br />
そこで、7行目のMTIfタグで変数flagの値が1かどうかを判断し、その時（＝アーカイブの月が今月か来月）だけ、ブログ記事の一覧を出力するようにします。
</p>

<h2>5.ひとまず完成</h2>

<p>
ここまでの話から、完成したテンプレートは以下のようになります。<br />
なお、ブログのIDが2番であると仮定しています（9行目の「include_blogs="2"」）
</p>

<pre class="brush : html">&lt;$mt:Date format=&quot;%Y%m&quot; setvar=&quot;this_month&quot;$&gt;
&lt;$mt:GetVar name=&quot;this_month&quot; op=&quot;++&quot; setvar=&quot;next_month&quot;$&gt;
&lt;mt:If name=&quot;next_month&quot; like=&quot;13$&quot;&gt;
  &lt;$mt:Date format=&quot;%Y&quot; setvar=&quot;next_year&quot;$&gt;
  &lt;$mt:GetVar name=&quot;next_year&quot; op=&quot;++&quot; setvar=&quot;next_month&quot;$&gt;
  &lt;$mt:SetVar name=&quot;next_month&quot; append=&quot;1&quot; value=&quot;01&quot;$&gt;
&lt;/mt:If&gt;

&lt;mt:Blogs include_blogs=&quot;2&quot;&gt;
&lt;mt:ArchiveList archive_type=&quot;Monthly&quot;&gt;
  &lt;$mt:ArchiveDate format=&quot;%Y%m&quot; setvar=&quot;archive_month&quot;$&gt;
  &lt;$mt:SetVar name=&quot;flag&quot; value=&quot;0&quot;$&gt;
  &lt;mt:If name=&quot;archive_month&quot; eq=&quot;$this_month&quot;&gt;
    &lt;$mt:SetVar name=&quot;flag&quot; value=&quot;1&quot;$&gt;
  &lt;mt:Else name=&quot;archive_month&quot; eq=&quot;$next_month&quot;&gt;
    &lt;$mt:SetVar name=&quot;flag&quot; value=&quot;1&quot;$&gt;
  &lt;/mt:If&gt;
  &lt;mt:If name=&quot;flag&quot;&gt;
    &lt;h2&gt;&lt;$mt:ArchiveDate format=&quot;%Y/%m&quot;$&gt;&lt;/h2&gt;
    &lt;mt:Entries&gt;
    &lt;div&gt;
      &lt;h3&gt;&lt;$mt:EntryTitle$&gt;&lt;/h3&gt;
      &lt;$mt:EntryBody$&gt;
    &lt;/div&gt;  
    &lt;/mt:Entries&gt;
  &lt;/mt:If&gt;
&lt;/mt:ArchiveList&gt;
&lt;/mt:Blogs&gt;</pre>

<h2>6.問題点</h2>

<p>
ここまででほぼ動作しますが、1つ問題点があります。
</p>

<p>
MTArchiveListタグは、ブログ記事がないアーカイブは処理しません。<br />
そのため、来月に記事がないと、来月の記事については一切処理が行わません。<br />
結果として、来月に記事がなく、今月の記事だけがある時は、今月の記事だけが出力されます。
</p>

<p>
同様に、今月に記事がなく、来月の記事だけがある場合は、来月の記事だけが出力されます。<br />
さらに、今月／来月とも記事がないと、何も出力されません。
</p>

<p>
質問された方は、記事がない場合は、「記事がありません」のように出力したいとのことでした。<br />
この問題を解決する方法は、明日の記事で述べたいと思います。<br />

</p>]]>
    </content>
</entry>

<entry>
    <title>AnotherCustomFieldsプラグイン一部修正</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/archives/2012/02/02-091419.php" />
    <id>tag:www.h-fj.com,2012:/blog//1.2803</id>

    <published>2012-02-02T00:14:19Z</published>
    <updated>2012-02-05T09:42:42Z</updated>

    <summary>MTOSでカスタムフィールド風の機能を実現するAnotherCustomFieldsプラグインに対し、不具合の指摘がありましたので、修正したバージョンを公開します。</summary>
    <author>
        <name>壱</name>
        <uri>http://www.h-fj.com/blog/</uri>
    </author>
    
        <category term="自作プラグイン" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="anothercustomfields" label="AnotherCustomFields" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype" label="Movable Type" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype51" label="Movable Type 5.1" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mtos" label="MTOS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mtプラグイン" label="MTプラグイン" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="カスタムフィールド" label="カスタムフィールド" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.h-fj.com/blog/">
        <![CDATA[<p>MTOSでカスタムフィールド風の機能を実現する<a href="http://www.h-fj.com/blog/acfbook/">AnotherCustomFieldsプラグイン</a>に対し、不具合の指摘がありました。<br />
修正したバージョンを公開します。</p>

<p class="update">2012年2月2日　23時22分<br />
CustomFieldsListingプラグインを組み合わせている方は、そちらも修正が必要になります。その点を追記しました。
</p>
        <h2>不具合の内容</h2>

<p>入力必須のフィールドを作り、かつそのフィールドを特定のブログだけに表示するようにしたとします。<br />
この場合、このフィールドを表示しないブログでオブジェクトを保存しようとしたときに、「〇〇フィールドは入力必須です」のエラーメッセージが表示され、オブジェクトを保存することができません。</p>

<h2>修正版のインストール</h2>

<p>修正版のプラグインは、以下からダウンロードすることができます。</p>

<p><a href="http://www.h-fj.com/mt_plugin/AnotherCustomFields_1_03.zip">AnotherCustomFields_1_03.zip</a></p>

<p>ダウンロードしたプラグインを解凍すると、「plugins」と「mt-static」のフォルダができます。<br />
これらのフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。</p>

<p>また、CustomFieldsListingプラグインを組み合わせている方は、こちらもバージョンアップします。<br />
以下からダウンロードすることができます。</p>

<p><a href="http://www.h-fj.com/mt_plugin/CustomFieldsListing_1_12.zip">CustomFieldsListing_1_12.zip</a></p>

<p>ダウンロードしたプラグインを解凍すると、「plugins」と「mt-static」のフォルダができます。<br />
これらのフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。</p>]]>
    </content>
</entry>

<entry>
    <title>PHPUtilプラグイン（その1・概要とインストール）</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/archives/2012/02/01-104016.php" />
    <id>tag:www.h-fj.com,2012:/blog//1.2794</id>

    <published>2012-02-01T01:40:16Z</published>
    <updated>2012-02-01T14:44:41Z</updated>

    <summary>Movable Typeのテンプレート内でPHPを使いやすくするために、「PHPUtil」というプラグインを作りました。今日は、プラグインの概要と、インストール手順を解説します。</summary>
    <author>
        <name>壱</name>
        <uri>http://www.h-fj.com/blog/</uri>
    </author>
    
        <category term="自作プラグイン" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="movabletype" label="Movable Type" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype5" label="Movable Type 5" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype51" label="Movable Type 5.1" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.h-fj.com/blog/">
        <![CDATA[<p>
Movable Typeのテンプレート内でPHPを使いやすくするために、「PHPUtil」というプラグインを作りました。<br />
今日は、プラグインの概要と、インストール手順を解説します。
</p>

<p class="update">2012年2月1日 23時40分<br />
不具合が見つかったので、修正してアップロードしなおしました。<br />
上記日時までにダウンロードした方は、お手数ですがダウンロードしなおしてください。</p>

        <h2>1.はじめに</h2>

<p>
Movable Typeでは、テンプレートの中にPHP等のコードを入れることもできます。<br />
例えば、テンプレート内に以下のようなコードを入れて、かつページがPHPとして処理されるようにすれば（拡張子を.phpにするなど）、その位置に現在の日時が出力されます。
</p>

<script type="text/javascript" src="http://www.h-fj.com/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="http://www.h-fj.com/syntaxhighlighter/scripts/shBrushPhp.js "></script>
<script type="text/javascript" src="http://www.h-fj.com/syntaxhighlighter/scripts/shBrushXml.js "></script>
<script type="text/javascript">
SyntaxHighlighter.config.clipboardSwf = 'http://www.h-fj.com/syntaxhighlighter/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>

<pre class="brush : php;">&lt;?php echo date('Y/m/d H:i:s'); ?&gt;</pre>

<p>
ただ、1つのテンプレートの中に、Movable TypeのテンプレートタグとPHPのコードとを混在させると、テンプレートがあまり読みやすくありません。<br />
PHPUtilプラグインを使うと、この点を改善することができます。<br />
Movable Typeのテンプレートタグの書き方で、PHPの基本的なコードを出力することができます。<br />
前述の例だと、以下のように書き換えます。
</p>

<pre class="brush : html;">&lt;$mt:PHPFunction name=&quot;date&quot; params=&quot;Y/m/d H:i:s&quot;$&gt;</pre>

<h2>2.PHPUtilプラグインの機能</h2>

<p>
PHPUtilプラグインは、以下のような処理を、Movable TypeのテンプレートタグからPHPのコードに変換します。
</p>

<ul>
<li>変数の代入と出力（配列／ハッシュも含む）</li>
<li>条件判断</li>
<li>繰り返し</li>
<li>日時関係の処理（表示と条件判断）</li>
<li>他のファイルの組み込み</li>
<li>関数の実行</li>
<li>ユーザーエージェント判断（この機能のみDynamicMTMLのライブラリを流用）</li>
</ul>

<p>
複雑な処理を書くのには向いていませんが、基本的なPHPのコードなら、PHPUtilプラグインのテンプレートタグで出力することができます。<br />
テンプレートの中に、部分的に動的な処理を入れたいような場合に使うと良いでしょう。
</p>

<p>
また、テンプレートタグの書き方は、Movable Typeで同様の処理を行うテンプレートタグに極力合わせるようにしています。<br />
例えば、変数に値を代入する処理は、「MTPHPSetVar」というテンプレートタグで行います。
</p>

<h2>3.インストール</h2>

<p>
PHPUtilプラグインは、以下からダウンロードします。
</p>

<p>
<a href="http://www.h-fj.com/mt_plugin/PHPUtil_1_00b1.zip">PHPUtil_1_00b1.zip</a>
</p>

<p>
ダウンロードしたファイルを回答すると、「plugins」というフォルダができます。<br />
このフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。
</p>

<p>
なお、PHPUtilプラグインは、「<a href="http://www.h-fj.com/blog/archives/2011/12/26-162840.php">静的テンプレートで設定した変数をDynamicMTMLで参照するプラグイン(DMSetVar)</a>」を拡張して作っていますので、DMSetVarプラグインの機能を含んでいます。<br />
DMSetVarプラグインをインストールしている方は、Movable Typeの「plugins」ディレクトリから、「DMSetVar」ディレクトリを削除してください。<br />

</p>]]>
    </content>
</entry>

<entry>
    <title>「フリーランスのための青色申告ガイドブック」Pubooでも発売</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/archives/2012/01/31-161520.php" />
    <id>tag:www.h-fj.com,2012:/blog//1.2802</id>

    <published>2012-01-31T07:15:20Z</published>
    <updated>2012-01-31T07:15:20Z</updated>

    <summary>先日発売した「フリーランスのための青色申告ガイドブック」を、電子書籍販売サイトの「ブクログのPuboo」でも販売します。
</summary>
    <author>
        <name>壱</name>
        <uri>http://www.h-fj.com/blog/</uri>
    </author>
    
        <category term="新刊・掲載" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="税金" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="フリーランス" label="フリーランス" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="確定申告" label="確定申告" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="青色申告" label="青色申告" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.h-fj.com/blog/">
        <![CDATA[<p class="pkg"><a href="http://p.booklog.jp/book/43605"><img alt="フリーランスのための青色申告ガイドブックの表示画像" title="フリーランスのための青色申告ガイドブック" src="http://www.h-fj.com/blog/aoirobook/aoirobook.png" width="120" height="177" class="left_float" style="border : 1px solid #666666" /></a>先日発売した「フリーランスのための青色申告ガイドブック」を、電子書籍販売サイトの「<a href="http://p.booklog.jp/">ブクログのPuboo</a>」でも販売します。

        <p>Pubooには、自作のPDFファイルをそのまま販売する機能がありました。<br />
この機能を使って販売することにしました。</p>

<p>お値段は、当サイトでお求めいただく場合と同じく、1,500円（税込）です。<br />
上で述べたように、PDFの内容も、<a href="http://www.h-fj.com/blog/aoirobook/">当サイトでお求めいただく場合</a>とまったく同じです。<br />
ぜひよろしくお願いいたします。</p>]]>
    </content>
</entry>

<entry>
    <title>「ブクログのPuboo」テスト中</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/archives/2012/01/30-223714.php" />
    <id>tag:www.h-fj.com,2012:/blog//1.2801</id>

    <published>2012-01-30T13:37:14Z</published>
    <updated>2012-01-30T13:37:14Z</updated>

    <summary>電子書籍の販売元を広げるために、ブクログのPubooを試しています。</summary>
    <author>
        <name>壱</name>
        <uri>http://www.h-fj.com/blog/</uri>
    </author>
    
        <category term="電子出版" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="電子書籍" label="電子書籍" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.h-fj.com/blog/">
        <![CDATA[<p>当ブログでは、「<a href="http://www.h-fj.com/blog/mt51bookvol1/">Movable Type 5.1 Webサイト製作ガイドVolume 1</a>」など、いくつかの電子書籍を販売しています。<br />
ただ、当ブログだけだと、販売のチャネルがあまりにも狭すぎるという難点があります。<br />
そこで、「<a href="http://p.booklog.jp/">ブクログのPuboo</a>」を試しています。<br />
</p>
        <p>ブクログのPubooは、<a href="http://lolipop.jp/">lolipop</a>等でおなじみの<a href="http://www.paperboy.co.jp/">Paperboy&Co.</a>が提供する電子書籍販売サイトです。<br />
自分で作成した文書を、電子書籍として値段をつけて販売することができます（無料で配布することもできます）。</p>

<p>ブログのような投稿画面で、個々のページを作っていくことができます。<br />
また、PDFや画像をインポートして、電子書籍化することもできます（ただし、PDFのインポートは有料のプロ版のみ）。</p>

<p>当方ではPDFで電子書籍を販売しています。<br />
以前だと、このPDFをPubooで扱えるようにするには、手間がかかりすぎて現実的ではありませんでした。<br />
しかし、インポート機能ができたことで、当方の電子書籍をPubooで販売することができそうです。</p>

<p>現在、「<a href="http://www.h-fj.com/blog/aoirobook/">フリーランスのための青色申告ガイドブック</a>」を、Pubooで販売することを目指して、テスト作業中です。<br />
うまくいけば、Pubooでも販売したいと思います。<br />
</p>]]>
    </content>
</entry>

<entry>
    <title>「デザインの学校 これからはじめるIllustrator＆Photoshopの本」</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/archives/2012/01/29-223106.php" />
    <id>tag:www.h-fj.com,2012:/blog//1.2800</id>

    <published>2012-01-29T13:31:06Z</published>
    <updated>2012-01-31T12:04:16Z</updated>

    <summary>crema（黒野明子）さんが、初めての単著である「デザインの学校 これからはじめるIllustrator＆Photoshopの本」を執筆されました。献本いただきましたので、ご紹介します。</summary>
    <author>
        <name>壱</name>
        <uri>http://www.h-fj.com/blog/</uri>
    </author>
    
        <category term="各種情報" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="illustrator" label="Illustrator" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="photoshop" label="Photoshop" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.h-fj.com/blog/">
        <![CDATA[<p class="pkg">
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/477414911X/hajimefujimos-22/ref=nosim/" name="amazletlink"><img src="http://ecx.images-amazon.com/images/I/51SQBxUP%2BPL._SL160_.jpg" alt="デザインの学校 これからはじめるIllustrator&Photoshopの本" class="left_float" style="border : 1px solid #999999" /></a>いつもお世話になっている<a href="http://linker.in/journal/author/crema/">crema（黒野明子）</a>さんが、初めての単著である「<a href="http://www.amazon.co.jp/exec/obidos/ASIN/477414911X/hajimefujimos-22/ref=nosim/" name="amazletlink">デザインの学校 これからはじめるIllustrator＆Photoshopの本</a>」を執筆されました。<br />
献本いただきましたので、ご紹介します。</p>

        <p>「デザインの学校」シリーズは、デザイン関係のソフトウェアを初めて使う人のために、基本操作を丁寧に説明した解説書です。<br />
ビジネスソフトでの「できる」シリーズと似た体裁です。</p>

<p>「デザインの学校 これからはじめるIllustrator＆Photoshopの本」は、デザイン系ソフトの中でもっともひろく利用されているIllustratorとPhotoshopについて、基本操作を解説した内容になっています。<br />
「ロゴマークの作成」「名刺の作成」など、具体的な題材をテーマに、それを作る手順を丁寧に分かりやすく解説しています。<br />
操作を1ステップずつ順番に解説していて、それぞれに画面が入っていますので、操作に戸惑うこともありません。<br />
これからデザイン系を目指そうという方が、IllustratorとPhotoshopを学ぶのに最適です。</p>

<p>なお、IllustratorとPhotoshopの30日間体験版が入ったDVDも付属しています。<br />
Illustrator等のソフトを持っていない方も、とりあえず体験版で勉強を始めることができます。<br />
また、練習用のサンプルファイルは、技術評論社のサイトからダウンロードすることができます。<br />
</p>]]>
    </content>
</entry>

<entry>
    <title>MHL対応液晶ディスプレイが秋葉原で発売</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/archives/2012/01/28-125411.php" />
    <id>tag:www.h-fj.com,2012:/blog//1.2799</id>

    <published>2012-01-28T03:54:11Z</published>
    <updated>2012-01-28T03:54:11Z</updated>

    <summary>スマートフォン等のための映像インターフェースの「MHL」に対応したサムスンの液晶ディスプレイが、秋葉原で発売されたということです。</summary>
    <author>
        <name>壱</name>
        <uri>http://www.h-fj.com/blog/</uri>
    </author>
    
        <category term="ハードウェア" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="モバイル" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mhl" label="MHL" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ディスプレイ" label="ディスプレイ" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.h-fj.com/blog/">
        <![CDATA[<p>スマートフォン等のための映像インターフェースの「<a href="http://www.mhlconsortium.org/">MHL</a>」に対応したサムスンの液晶ディスプレイが、秋葉原で発売されたということです。</p>

<p><a href="http://akiba-pc.watch.impress.co.jp/hotline/20120128/etc_samsung2.html">参考記事はこちら</a></p>
        <p>スマートフォンやタブレットに保存している映像や動画を、大きな画面で見たいということもあります。<br />
ただ、従来の多くのスマートフォン／タブレットでは、映像をディスプレイに出力する機能がありません。<br />
そのため、映像等を大画面で見るには、スマートフォン／タブレットからパソコンに映像等を転送して、パソコンで見るという手順になり、面倒です。</p>

<p>スマートフォン／タブレットをディスプレイに直接に接続することができれば、上記のような問題は解決します。<br />
そこで、スマートフォン／タブレットの映像インターフェースとして、「MHL」（Mobile High-Difinition Link）が提唱されています。<br />
MHL対応のスマートフォン／タブレットとディスプレイの組み合わせなら、ケーブル1本で接続することができ、映像等を簡単に大画面で見ることができます。<br />
また、ディスプレイからの電力供給で、映像等を再生しつつ、スマートフォン等を充電することもできます。</p>

<p>今のところ、MHL対応のディスプレイは、今回発売されたサムスンの製品ぐらいです。<br />
また、MHLに対応したスマートフォンも、サムスンのGALAXYシリーズの一部ぐらいしかありません。<br />
しかし、今後はMHL対応のスマートフォン／タブレットやディスプレイが増えると思われます。<br />
これからディスプレイを買い替える際には、MHL対応もチェックした方が良いでしょう。<br />
</p>]]>
    </content>
</entry>

<entry>
    <title>ブログ記事が属するカテゴリをツリー形式で出力するプラグイン(MT5.1x用)</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/archives/2012/01/27-085302.php" />
    <id>tag:www.h-fj.com,2012:/blog//1.2798</id>

    <published>2012-01-26T23:53:02Z</published>
    <updated>2012-01-26T23:54:36Z</updated>

    <summary>「ブログ記事が属するカテゴリをツリー形式で出力するプラグイン」（EntrySubCategories）のMovable Type 5.1x対応版を公開します。</summary>
    <author>
        <name>壱</name>
        <uri>http://www.h-fj.com/blog/</uri>
    </author>
    
        <category term="自作プラグイン" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="movabletype" label="Movable Type" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype5" label="Movable Type 5" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype51" label="Movable Type 5.1" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mtプラグイン" label="MTプラグイン" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="カテゴリ" label="カテゴリ" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.h-fj.com/blog/">
        <![CDATA[<p>以前に作成した「ブログ記事が属するカテゴリをツリー形式で出力するプラグイン」（EntrySubCategories）が、Movable Type 5.12では動かないというご指摘をいただきました。<br />
そこで、Movable Type 5.1xで動作するように修正しました。<br />
Movable Type 5.1xのカテゴリの並べ替え機能にも対応しています。<br />
</p>
        <h2>1.インストール</h2>

<p>プラグインは以下からダウンロードします。</p>

<p><a href="http://www.h-fj.com/mt_plugin/EntrySubCategories_1_10.zip">EntrySubCategories_1_10.zip</a></p>

<p>ダウンロードしたZipファイルを解凍すると、「plugins」というフォルダができます。<br />
このフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。</p>

<h2>2.テンプレートタグの書き方</h2>

<p>テンプレートタグの書き方は、旧版とほぼ同じです。<br />
以下の各記事を参照してください。</p>

<ul>
<li><a href="http://www.h-fj.com/blog/archives/2009/06/30-104221.php">ブログ記事が属するカテゴリをツリー形式で出力するプラグイン(その1)</a></li>
<li><a href="http://www.h-fj.com/blog/archives/2009/07/01-092613.php">ブログ記事が属するカテゴリをツリー形式で出力するプラグイン(その2)</a></li>
</ul>

<p>また、新たに「sort_by」のモディファイアに対応しました。<br />
sort_byモディファイアの使い方は、Movable Type 5.1xの<a href="http://www.movabletype.jp/documentation/appendices/tags/subcategories.html">MTSubCategoriesタグ</a>や<a href="http://www.movabletype.jp/documentation/appendices/tags/toplevelcategories.html">MTTopLevelCategoriesタグ</a>と同じです。<br />
sort_byモディファイアを指定しなかった場合は、Movable Type 5.1xのカテゴリの並べ替え機能で並べた順に、カテゴリを出力します。</p>

<p>なお、旧版との互換性を保つために、MTEntrySortedTopLevelCategoriesタグ／MTEntrySortedSubCategoriesタグを使うこともできます。<br />
これらのタグを使った場合、MTEntryTopLevelCategoriesタグ／MTEntrySortedSubCategoriesタグで、sort_byモディファイアを指定しなかった時と同じ動作になります。<br />
</p>]]>
    </content>
</entry>

<entry>
    <title>アイテムにつけられたタグを重複なく出力する</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/archives/2012/01/26-090627.php" />
    <id>tag:www.h-fj.com,2012:/blog//1.2797</id>

    <published>2012-01-26T00:06:27Z</published>
    <updated>2012-01-26T03:03:24Z</updated>

    <summary>アイテムにつけられたタグを、重複なく出力する方法を紹介します。</summary>
    <author>
        <name>壱</name>
        <uri>http://www.h-fj.com/blog/</uri>
    </author>
    
        <category term="カスタマイズ・TIPS" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="movabletype" label="Movable Type" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype5" label="Movable Type 5" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype51" label="Movable Type 5.1" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="アイテム" label="アイテム" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ハッシュ" label="ハッシュ" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.h-fj.com/blog/">
        <![CDATA[<p>
<a href="http://communities.movabletype.jp/">MTQ</a>に、「<a href="http://communities.movabletype.jp/2012/01/post-529.html">アイテムに付けられたタグの一覧表示</a>」という質問が上がっていました。<br />
すべてのアイテムにつけられたタグを、重複しないように出力したいという内容です。<br />
この質問に答えてみます。<br />

</p>
        <h2>1.問題点</h2>

<p>
質問された方は、以下のようなテンプレートを組まれていました。
</p>

<script type="text/javascript" src="http://www.h-fj.com/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="http://www.h-fj.com/syntaxhighlighter/scripts/shBrushXml.js "></script>
<script type="text/javascript">
SyntaxHighlighter.config.clipboardSwf = 'http://www.h-fj.com/syntaxhighlighter/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script>

<pre class="brush : html;">&lt;mt:Assets&gt;
&lt;mt:AssetTags glue=&quot; | &quot;&gt;
&lt;$mt:TagName$&gt;
&lt;/mt:AssetTags&gt;
&lt;/mt:Assets&gt;</pre>

<p>
この書き方だと、アイテムを順に1つずつ読み込み、アイテムごとにつけられたタグを出力する形になります。<br />
そのため、複数のアイテムに同じタグがつけられていると、それらが重複して出力されます。
</p>

<p>
例えば、写真Aには「赤,きれい,花,ポップ」というタグがあり、写真Bには「緑,華やか,葉っぱ,ポップ」というタグがつけられているとします。<br />
この状況で、上記のテンプレートでタグを出力すると、まず写真Aのタグが順に出力され、次に写真Bのタグが順に出力されます。<br />
そのため、以下のように「ポップ」が重複します。
</p>

<pre>
赤 | きれい | 花 | ポップ | 緑 | 華やか | ポップ | 葉っぱ
</pre>

<h2>2.ハッシュで重複するデータを除く</h2>

<p>
この例のように、たくさんのデータの中から、重複するものを取り除きたいということは、よくあります。<br />
この処理は、ハッシュの使い道の中でも特に典型的なものです。
</p>

<p>
たくさんあるデータから、重複するものを取り除くには、キーが個々のデータで、値が1になるようなハッシュを作ります。<br />
そして、ハッシュを作り終わったら、そのハッシュのキーを出力します。
</p>

<p>
上の例だと、写真Aのタグから、ハッシュは以下のような状況になります。
</p>

<table>
<col width="150" />
<col width="100" />
<tr><th>キー</th><th>値</th></tr>
<tr><td>赤</td><td>1</td></tr>
<tr><td>きれい</td><td>1</td></tr>
<tr><td>花</td><td>1</td></tr>
<tr><td>ポップ</td><td>1</td></tr>
</table>

<p>
次に、写真Bのタグを、上記のハッシュに追加していきます。<br />
「緑」「華やか」「葉っぱ」まで追加すると、ハッシュは以下のようになります。
</p>

<table>
<col width="150" />
<col width="100" />
<tr><th>キー</th><th>値</th></tr>
<tr><td>赤</td><td>1</td></tr>
<tr><td>きれい</td><td>1</td></tr>
<tr><td>花</td><td>1</td></tr>
<tr><td>ポップ</td><td>1</td></tr>
<tr><td>緑</td><td>1</td></tr>
<tr><td>華やか</td><td>1</td></tr>
<tr><td>葉っぱ</td><td>1</td></tr>
</table>

<p>
そして、写真Aと写真Bで重複する「ポップ」のタグを、上記のハッシュに追加します。<br />
この場合、キーが「ポップ」の要素はすでに存在していますので、その要素を上書きすることになります。<br />
したがって、ハッシュの内容は上のままで変化しません。
</p>

<p>
最後に、上記のハッシュから、キーだけを取り出して、出力します。<br />
これで、重複する「ポップ」を1つにまとめて出力することができます。
</p>

<h2>3.テンプレートの組み方</h2>

<p>
ここまでの話に沿って、テンプレートを組むと、以下のようになります。
</p>

<pre class="brush : html">&lt;mt:Assets&gt;
  &lt;mt:AssetTags&gt;
    &lt;$mt:TagName setvar=&quot;tag_name&quot;$&gt;
    &lt;$mt:SetVar name=&quot;asset_tags&quot; key=&quot;$tag_name&quot; value=&quot;1&quot;$&gt;
  &lt;/mt:AssetTags&gt;
&lt;/mt:Assets&gt;
&lt;mt:Loop name=&quot;asset_tags&quot; glue=&quot; | &quot;&gt;
  &lt;$mt:GetVar name=&quot;__key__&quot;$&gt;
&lt;/mt:Loop&gt;</pre>

<p>
前半のMTAssetsタグのブロックが、アイテムにつけられたタグをハッシュに格納する処理です。<br />
1／6行目のMTAssetsタグですべてのアイテムを順に読み込み、そして2／5行目のMTAssetTagsタグでアイテムごとのタグを読み込みます。<br />
3行目では、個々のタグの名前を、「tag_name」という変数に代入します。<br />
そして、4行目では、「asset_tags」という名前のハッシュで、キーが変数tag_name（＝アイテムのタグ）になっている要素に、値として1を代入します。
</p>

<p>
一方、後半のMTLoopタグのブロックが、タグの一覧を出力する部分です。<br />
7／9行目のMTLoopタグで、ハッシュasset_tagsから要素を順に取り出します。<br />
そして、8行目のMTGetVarタグで、取り出した要素のキー（__key__）を出力します。
</p>

<h2>4.変数（配列／ハッシュも含む）は必須</h2>

<p class="pkg"><a href="http://www.h-fj.com/blog/mt51bookvol2/"><img src="http://www.h-fj.com/blog/mt51bookvol2/mt51book2.png" width="80" height="114" alt="Movable Type 5.1 Webサイト製作ガイドVolume 2" title=t="Movable Type 5.1 Webサイト製作ガイドVolume 2" class="left_float" /></a>この例のように、手の込んだ処理をしようとすると、変数や、その応用である配列やハッシュを、避けて通ることができません。<br />
拙著「<a href="http://www.h-fj.com/blog/mt51bookvol2/">Movable Type 5.1 Webサイト製作ガイドVolume 2</a>」では、変数および配列／ハッシュについて、かなり詳しく解説しています。<br />
「変数や配列／ハッシュがよく分からない」という方は、ぜひ拙著をお読みください。
</p>]]>
    </content>
</entry>

<entry>
    <title>iPhoneでバイブレーションだけのアラームを使うには</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/archives/2012/01/25-104448.php" />
    <id>tag:www.h-fj.com,2012:/blog//1.2796</id>

    <published>2012-01-25T01:44:48Z</published>
    <updated>2012-01-25T01:44:48Z</updated>

    <summary>iPhone標準の時計アプリで、音を出さずにバイブレーションだけのアラームを設定する方法を調べてみました。</summary>
    <author>
        <name>壱</name>
        <uri>http://www.h-fj.com/blog/</uri>
    </author>
    
        <category term="モバイル" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="iphone" label="iPhone" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.h-fj.com/blog/">
        <![CDATA[<p>iPhoneには時計のアプリが標準で入っていて、アラームの機能もついています。<br />
指定の時刻に音を出すことができ、また音と同時にバイブレーションを行うこともできます。</p>

<p>ところが、音を出さないようにする（サウンドを「なし」に設定する）と、バイブレーションもせずに、画面にアラームの表示が出るだけという動作になっています。<br />
しかし、周囲になるべく迷惑を掛けたくない時など、音を出さずにバイブレーションだけでアラームするようにしたいことも、多々あると思います。<br />
そこで、その方法を調べてみました。<br />
</p>
        <p>「iPhone バイブレーション アラーム」で検索してみると、非常にシンプルな方法が見つかりました。<br />
「無音の着信音を作ってiPhoneに入れ、それをアラームのサウンドとして設定する」という方法です。</p>

<p><a href="http://d.hatena.ne.jp/AR30/20110505/1304604979">iPhoneで音を鳴らさずバイブレーションのみで無音アラームを設定する方法。（ブログ「はてなで泣いた」）</a></p>

<p>この記事では、設定の手順を丁寧に解説しています。<br />
また、無音の着信音のデータも公開されています。</p>

<p>それにしても、iPhone標準の時計アプリには、なぜバイブレーションだけのアラームの機能がないのでしょうか。<br />
簡単にプログラムできることだと思いますので、ぜひ標準機能として装備して欲しいです。<br />
</p>]]>
    </content>
</entry>

<entry>
    <title>拡張子が.htmlのページでPHPを動作させる</title>
    <link rel="alternate" type="text/html" href="http://www.h-fj.com/blog/archives/2012/01/24-171337.php" />
    <id>tag:www.h-fj.com,2012:/blog//1.2795</id>

    <published>2012-01-24T08:13:37Z</published>
    <updated>2012-01-24T14:38:42Z</updated>

    <summary>拡張子が.htmlのままで、PHPが動作するようにしたい場合があります。その方法を紹介します。</summary>
    <author>
        <name>壱</name>
        <uri>http://www.h-fj.com/blog/</uri>
    </author>
    
        <category term="インターネット" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="htaccess" label=".htaccess" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html" label="HTML" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.h-fj.com/blog/">
        <![CDATA[<p>一般的なレンタルサーバーでは、PHPを動作させるには、そのページの拡張子を「.php」にします。<br />
ただ、既存のHTMLのページ（拡張子が.htmlのページ）をPHP化する場合、拡張子を変えるとURLが変わってしまうことになります。</p>

<p>そこで、拡張子が.htmlのままで、PHPが動作するようにしたい場合がでてきます。<br />
その方法をいくつか紹介します。<br />
</p>
        <h2>.htaccessファイルに「AddType」を記述する</h2>

<p>1つ目の方法は、.htaccessファイルに「AddType」を記述する方法です。</p>

<h3>基本的な書き方</h3>

<p>モジュール版PHPが使われているサーバーなら、htmlファイルがあるディレクトリに、以下のような内容の.htaccessファイルを設置すると、拡張子が.htmlのファイルでもPHPが動作することが多いです。</p>

<pre>
AddType application/x-httpd-php .html
</pre>

<h3>特定のファイルのみ対象にする</h3>

<p>すべてのHTMLファイルをPHPとして動作させると、PHPを含まない純粋なHTMLのページも、PHPで処理されます。<br />
そのため、サーバーの負荷が無駄に上がるという問題が生じます。<br />
そこで、実際にPHPのコードが含まれているファイルだけを、PHP化することも考えられます。</p>

<p>ディレクトリ内の特定のHTMLファイルだけでPHPを動作させたい場合は、上記の行を「&lt;Files "ファイル名"&gt;」と「&lt;/Files&gt;」の行で囲みます。<br />
例えば、「hoge.html」というファイルだけでPHPが動作するようにしたい場合は、.htaccessファイルを以下のように書きます。</p>

<pre>
&lt;Files "hoge.html"&gt;
AddType application/x-httpd-php .html
&lt;/Files&gt;
</pre>

<p>また、「&lt;Files "・・・"&gt;～&lt;/Files&gt;」の代わりに「&lt;FilesMatch "・・・"&gt;～&lt;/FilesMatch&gt;」を使って、特定するファイルを正規表現で指定することもできます。<br />
例えば、.htaccessに以下のように書くと、ファイル名が「index○.html」（〇は0文字以上の任意の文字列）のようなページだけが、PHPとして動作するようになります。</p>

<pre>
&lt;FilesMatch "^index.*\.html$"&gt;
AddType application/x-httpd-php .html
&lt;/FilesMatch&gt;
</pre>

<h2>mod_rewriteでPHPにリダイレクトする</h2>

<p>サーバーによっては、.htaccessにAddTypeを記述することが禁止されている場合があります。<br />
この場合は、上記の方法は使えません。<br />
ただ、.htaccessにmod_rewriteの記述を書くことができるサーバーなら、mod_rewriteを使って、.htmlから.phpにリダイレクトする方法があります。</p>

<h3>基本的な手順</h3>

<p>まず、拡張子が.htmlのページにアクセスされたときに、ファイル名が同じで拡張子が.phpのページにリダイレクトするように、.htaccessに記述します。<br />
htmlファイルがあるディレクトリに、以下の内容の.htaccessファイルを設置します。</p>

<pre>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)\.html$ $1.php [L]
</pre>

<p>次に、そのディレクトリの中で、拡張子が.htmlのすべてのファイルで、拡張子を.phpに変更します。</p>

<h3>特定のファイルのみ対象にする</h3>

<p>そのディレクトリ内の特定のHTMLファイルだけでPHPを動作させたい場合は、.htaccessを以下のように書きます。</p>

<pre>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)\.html$ $1.php [L]
</pre>

<p>そして、そのディレクトリの中で、PHPとして動作させたいHTMLファイルだけで、拡張子を.phpに変更します。<br />
拡張子が.htmlのままのファイルは、通常のHTMLとして動作します（PHPの処理は行われません）。</p>

<h2>サーバー固有の方法を使う</h2>

<p>サーバーによっては、上記以外の方法で、HTMLのファイルをPHPとして動作させることができる場合があります。<br />
例えば、<a href="http://lolipop.jp/">lolipop</a>だと、ディレクトリに以下のような.htaccessファイルを設置すると、そのディレクトリのHTMLのページがPHPとして動作するそうです。</p>

<pre>
AddHandler php5.2-script html
</pre>
]]>
    </content>
</entry>

</feed>

