Under the Bridge

a Picture of the Late Him

MT4分科会第2回勉強会に参加しました

2008年6月22日 13:59 | Writer: yoshi | 記事本文 | コメント(2) | トラックバック(0)

昨日は東京に居て、時間があったのでMT4分科会に参加させて頂きました。

テーブルはこちら

【MT4分科会第2回勉強会】テンプレートタグカスタマイズ(初級者対象)

キアズマさん・oscarさんがテーブルリーダーです。

私は昨日は紙と鉛筆しかなかったので脳内コードを紙に書いてましたが。追加課題をコードとして起こしてみました。

追加課題01:画像を投稿した日記の、そのサムネイル画像とタイトルを、テーブル形式で並べてください

*ヒント:特定の繰り返し後に、異なる処理を行う方法の練習です。一行ごとに<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>&nbsp;</p></td>
      </MTIf>
      </table>
   </MTIf>

</MTFor>

原理

原理というか、誰が考えても大筋は同じようなコードになるかと思います。

私は、MTEntriesループ中で画像アイテムを探す、見つかったらその場でゴニョゴニョ...とはせず、取得したデータを全部配列へぶち込んでいます。

counter変数を、画像アイテムが見つかったときのみインクリメントして、配列の要素としていますが、これはプログラムの場合はすごくよく使うテクニックです。

counter変数の値は、イコール画像のあるエントリ数となりますので、MTForでループまわして、カウンタ値が幾らだったらどういう処理をする、というコードを書いてます。

何度も同じようなコードを書くことになりそうな「エントリタイトルの表示」「画像の表示」には、MTSetVarTemplateを用いて関数ちっくに何度も利用できるような構造です。

ループ最終回の処理がちょっとしょっぱいコードになっていますが、MTなんでコレでいいとします。本当はAns=3-(N % 3) というごく簡単な計算がしたいだけなんですが。

出力結果

kadai.png

トラックバック(0)

このブログ記事を参照しているブログ一覧: MT4分科会第2回勉強会に参加しました

このブログ記事に対するトラックバックURL:

コメント(2)

oscar (2008年6月23日 18:37)

にゃはは、意地悪なoscarです。

無理やり、参加させてしまいすいませんでした。
たぶんあのタイミングで連れて行けば、参加できるだろう予感はありました。

yoshiさん居てくれたおかげで、教える側がずいぶん楽になりました。ホンっと助かりましたよ。

コードはyoshiさんらしさが出てる、良い回答だと思います。ただし、他に人には勧めにくいですね。

変数使った処理は、単純に比較で使われる例が多いけど、「こういうのもあるんだよ」ってやりたかったんです。
繰り返しの回数で変化するのは、Cremaさんお得意のリストの5件ずつで変化させるってのがあるので、ちょっと変化させようとこのお題にしました。

いろいろ、ありがとうございました。

変数名「幼女」って・・・(と、わざと間違える)

yoshi (2008年6月23日 21:51)

>無理やり、参加させてしまいすいませんでした。
いやいや、参加したのは自分の意思です。なんか面白そうだな、という。

>yoshiさん居てくれたおかげで、教える側がずいぶん楽になりました。ホンっと助かりましたよ。
ええと、特に何もしていない気もしますが...
紙と鉛筆持ってブツブツ言ってただけですし...

いやーテーブルタグがわかんなくて苦労しました(笑)

ようじょ?よじょうです!!

コメントする






Categories
Entries
Feed
スポンサードリンク

parts

フィードメーター - Under the Bridge

あわせて読みたい

なかのひと

2008年4月5日開催、MT4LP5

2008 yoshi(apstar)