拙著「WordPress Web開発逆引きレシピ」が発売されました。
WordPressの様々なカスタマイズについて、逆引きの形式で取り上げています。
PHP 7.0での動作確認も行っています。
PlainCalendarプラグイン
Movable Type Advent Calendarの7日目として、カレンダーにちなんだ「PlainCalendar」というプラグインを公開します。
1.PlainCalendarプラグインのインストール
PlainCalendarプラグインは、ただカレンダーを出力するだけのプラグインです。
カレンダーに出力する内容を、配列やハッシュで用意することを想定しています。
プラグインは以下からダウンロードします。
ダウンロードしたZipファイルを解凍すると、「plugins」ディレクトリができます。
このディレクトリを、Movable Typeのインストール先ディレクトリにアップロードします。
2.追加されるテンプレートタグ
このプラグインをインストールすると、以下のテンプレートタグが追加されます。
2-1.MTPlainCalendarタグ
カレンダーを出力するブロックタグです。
モディファイアを指定しない場合、テンプレートを再構築した日を含む月のカレンダーを出力します。
以下のモディファイアで、他の月のカレンダーを出力することもできます。
モディファイア | 出力するカレンダー |
---|---|
month="last" | 先月のカレンダー |
month="next" | 来月のカレンダー |
month="this" | 月別アーカイブテンプレート内で使う場合は、それぞれの月のカレンダー ブログ記事アーカイブテンプレート内で使う場合は、個々のブログ記事の月のカレンダー |
month="yyyymm" | yyyy年mm月のカレンダー 例:「month="201301"」と指定すると、2013年1月のカレンダーを出力 |
また、「weeks_start_with="mon"」のモディファイアで、月曜始まりのカレンダーを出力することもできます。
weeks_start_withモディファイアには、「mon」の他に、他の曜日(「sun」~「sat」)を指定することもできます。
MTPlainCalendarタグのブロック内では、MTCalendarタグと同様に、以下のテンプレートタグを使うことができます。
- MTCalendarCellNumber
- MTCalendarDay
- MTCalendarDate
- MTCalendarIfBlank
- MTCalendarIfToday
- MTCalendarWeekHeader
- MTCalendarWeekFooter
ただし、MTCalendarIfEntries/MTCalendarIfNoEntriesタグは使うことができません。
2-2.MTCalendarIfDayタグ
MTCalendarIfDayタグは、MTCalendarIfBlankタグの逆で、日付のセルかどうかを判断するブロックタグです。
3.事例
PlainCalendarプラグインを使った例として、「今月アップロードした画像のカレンダー」を作ってみます。
テンプレートは以下のようになります。
<$mt:Date format="%m" setvar="m"$> <$mt:Date format="%d" setvar="d"$> <mt:Assets type="image" days="$d"> <mt:If tag="AssetDateAdded" format="%m" eq="$m"> <mt:SetVarBlock name="array_name">array<$mt:AssetDateAdded format="%d"></mt:SetVarBlock> <mt:SetVarBlock name="$array_name" function="push"> <$mt:AssetThumbnailLink width="70" square="1"$> </mt:SetVarBlock> </mt:If> </mt:Assets> <table> <tr><th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th></tr> <mt:PlainCalendar> <mt:CalendarWeekHeader><tr></mt:CalendarWeekHeader> <mt:CalendarIfDay> <td> <div> <mt:CalendarIfToday> <b><$mt:CalendarDay$></b> <mt:Else> <$mt:CalendarDay$> </mt:CalendarIfToday> </div> <mt:SetVarBlock name="array_name">array<$mt:CalendarDate format="%d"></mt:SetVarBlock> <mt:If name="$array_name"> <ul> <mt:Loop name="$array_name"> <li><$mt:GetVar name="__value__"$></li> </mt:Loop> </ul> </mt:If> </td> <mt:Else> <td> </td> </mt:CalendarIfDay> <mt:CalendarWeekFooter></tr></mt:CalendarWeekFooter> </mt:PlainCalendar> </table>
前半(MTAssetsタグのブロック)は、今月アップロードした画像を、日毎に「array01」「array02」・・・の配列に格納する処理です。
5行目のMTSetVarBlockタグで、変数array_nameに「array○○」(「○○」は画像をアップロードした日)を求めます。
そして、6~8行目で、その配列の最後に画像を追加(push)します。
後半は、MTPlainCalendarタグを使って、それぞれの日の画像の情報を順に出力する処理です。
MTPlainCalendarタグのブロックを使い、日付を順に出力し(18~22行目)、その日の配列に画像があれば(25行目のMTIfタグ)、配列の要素を順に出力します。