MT4分科会第2回勉強会に参加しました
昨日は東京に居て、時間があったのでMT4分科会に参加させて頂きました。
テーブルはこちら
【MT4分科会第2回勉強会】テンプレートタグカスタマイズ(初級者対象)キアズマさん・oscarさんがテーブルリーダーです。
私は昨日は紙と鉛筆しかなかったので脳内コードを紙に書いてましたが。追加課題をコードとして起こしてみました。
追加課題01:画像を投稿した日記の、そのサムネイル画像とタイトルを、テーブル形式で並べてください
- 70日以内に書かれたエントリー内に含まれる、画像アイテムとタイトルをすべて並べてください。
- 一行に3つずつ、縦横208pxにしたアイテムのサムネイルを並べます。(画像の正方形のトリミングはCSSでおこなっています)
- 各アイテムのサムネイルはエントリーにリンクを張って下さい。
- 最後に3つ並べるのに足りなくなった場所は、colspanを使い空要素で埋めてください。(上記画像の場合<td colspan="2">としています)
- タイトルには学年アイコンをつけてください。
*ヒント:特定の繰り返し後に、異なる処理を行う方法の練習です。一行ごとに<tr>で開き</tr>で閉じるようにしてください。余った時の処理の分岐にも、工夫が必要です。<MTIf name="__Last__">を用いてください。
考えたのはoscarさんらしい。しかしこれ、やや難しいと思う。あと、とても意地悪な内容(笑)
じぶん的に留意点というか、追加した仕様は以下のとおり。
- エントリに画像があるとは限らない。
- エントリひとつに画像が複数枚あり、その中から代表画像を先頭1枚のみ取り出す。
- データ取得の部分とループの部分は分離する。ソースの可読性・メンテナンス性重視
コード
<MTIgnore> ********** ノーマル並びのタイトル+画像 ********** </MTIgnore>
<MTSetVarTemplate name="Normal">
<h3><span class="<MTGetVar name="Gakunen[$x]">"><MTGetVar name="EntryTitle[$x]"></span></h3>
<p><a href="<MTGetVar name="EntryLink[$x]">"><img src="<MTGetVar name="ImageLink[$x]">" width="208" height="208" /></a></p>
</MTSetVarTemplate>
<MTIgnore> ********** リバース並びの画像+タイトル ********** </MTIgnore>
<MTSetVarTemplate name="Reverse">
<p><a href="<MTGetVar name="EntryLink[$x]">"><img src="<MTGetVar name="ImageLink[$x]">" width="208" height="208" /></a></p>
<h3><span class="<MTGetVar name="Gakunen[$x]">"><MTGetVar name="EntryTitle[$x]"></span></h3>
</MTSetVarTemplate>
<MTIgnore> ********** 配列でデータ取得 ********** </MTIgnore>
<MTSetvar name="counter" value="0">
<MTEntries days="70">
<MTEntryAssets type="image">
<MTAssetsFooter>
<MTSetVar name="counter" op="++">
<MTSetVarBlock name="EntryLink[$counter]"><$MTEntryPermalink$></MTSetVarBlock>
<MTSetVarBlock name="EntryTitle[$counter]"><MTEntryTitle></MTSetVarBlock>
<MTSetVarBlock name="ImageLink[$counter]"><$MTAssetURL$></MTSetVarBlock>
<MTSetVarBlock name="Gakunen[$counter]"><MTEntryAuthor></MTSetVarBlock>
</MTAssetsFooter>
</MTEntryAssets>
</MTEntries>
<MTIgnore> ********** Forループ、メイン処理 ********** </MTIgnore>
<MTFor var="x" from="1" to="$counter">
<MTIgnore> ********** ループ初回の処理 ********** </MTIgnore>
<MTIf name="__first__">
<table class="thumbnail" summary="最近(さいきん)の写真">
</MTIf>
<MTIgnore> ********** 左端セルの処理 ********** </MTIgnore>
<MTIf name="__counter__" value="3" op="%" eq="1">
<tr>
<td>
<MTGetvar name="Normal">
</td>
</MTIf>
<MTIgnore> ********** 真ん中セルの処理 ********** </MTIgnore>
<MTIf name="__counter__" value="3" op="%" eq="2">
<td>
<MTGetvar name="Reverse">
</td>
</MTIf>
<MTIgnore> ********** 右端セルの処理 ********** </MTIgnore>
<MTIf name="__counter__" value="3" op="%" eq="0">
<td>
<MTGetvar name="Normal">
</td>
</tr>
</MTIf>
<MTIgnore> ********** ループ最終回の処理 ********** </MTIgnore>
<MTIf name="__last__">
<MTSetVar name="Yojou" value="$__last__">
<MTSetVar name="Yojou" value="3" op="%">
<MTSetVar name="Amari" value="3">
<MTSetVar name="Amari" value="$Yojou" op="-">
<MTIf name="Amari" gt="0">
<td colspan="<MTGetVar name="Amari">"<p> </p></td>
</MTIf>
</table>
</MTIf>
</MTFor>
原理
原理というか、誰が考えても大筋は同じようなコードになるかと思います。
私は、MTEntriesループ中で画像アイテムを探す、見つかったらその場でゴニョゴニョ...とはせず、取得したデータを全部配列へぶち込んでいます。
counter変数を、画像アイテムが見つかったときのみインクリメントして、配列の要素としていますが、これはプログラムの場合はすごくよく使うテクニックです。
counter変数の値は、イコール画像のあるエントリ数となりますので、MTForでループまわして、カウンタ値が幾らだったらどういう処理をする、というコードを書いてます。
何度も同じようなコードを書くことになりそうな「エントリタイトルの表示」「画像の表示」には、MTSetVarTemplateを用いて関数ちっくに何度も利用できるような構造です。
ループ最終回の処理がちょっとしょっぱいコードになっていますが、MTなんでコレでいいとします。本当はAns=3-(N % 3) というごく簡単な計算がしたいだけなんですが。
出力結果
- カテゴリ:212MT4.1実験室
トラックバック(0)
このブログ記事を参照しているブログ一覧: MT4分科会第2回勉強会に参加しました
このブログ記事に対するトラックバックURL:
- Categories
- Entries
-
- MT4分科会第2回勉強会に参加しました
- MTOS4.2RC1:各ページの拡張子を得る
- MTでAA
- MT4:MTの変数演算をプラグインで拡張
- MT4.1:「MT」という文字をテーブルの背景色で表現
- 「NabeAzzテンプレート問題・パート2」へ乗ってみる
- 作りたいプラグインの覚え書き
- 世界のナベアツをプラグインで表現
- MT4:世界のナベアツをテンプレートタグで表現(2)
- MT4.1:プラグインを書いてみよう
- MT4.1:予約変数の実験
- Movable Type 4.15 テスト中(1)
- mtde.info の、反省点
- mtde.info の、できる経緯
- MT4:前のエントリ・次のエントリのリンクをカテゴリごとに(条件あり)
- MT4:世界のナベアツをテンプレートタグで表現
- MT4.1:カテゴリ並べ替え・表示非表示切り替え(非プラグイン非カスタムフィールド)
- MT4.1:変数参照専用のモジュールの可能性
- MT4:XHTML+CSS素材テンプレート化の不具合修正・要望リスト
- MT4.1:Movable Type 4.1用テンプレート作った

コメント(2)
oscar (2008年6月23日 18:37)
にゃはは、意地悪なoscarです。
無理やり、参加させてしまいすいませんでした。
たぶんあのタイミングで連れて行けば、参加できるだろう予感はありました。
yoshiさん居てくれたおかげで、教える側がずいぶん楽になりました。ホンっと助かりましたよ。
コードはyoshiさんらしさが出てる、良い回答だと思います。ただし、他に人には勧めにくいですね。
変数使った処理は、単純に比較で使われる例が多いけど、「こういうのもあるんだよ」ってやりたかったんです。
繰り返しの回数で変化するのは、Cremaさんお得意のリストの5件ずつで変化させるってのがあるので、ちょっと変化させようとこのお題にしました。
いろいろ、ありがとうございました。
変数名「幼女」って・・・(と、わざと間違える)
yoshi (2008年6月23日 21:51)
>無理やり、参加させてしまいすいませんでした。
いやいや、参加したのは自分の意思です。なんか面白そうだな、という。
>yoshiさん居てくれたおかげで、教える側がずいぶん楽になりました。ホンっと助かりましたよ。
ええと、特に何もしていない気もしますが...
紙と鉛筆持ってブツブツ言ってただけですし...
いやーテーブルタグがわかんなくて苦労しました(笑)
ようじょ?よじょうです!!
コメントする