レイアウト的にtableの方が都合が良い時がありますよね。勉強目的で自分も下のサイトで、敢えてテーブルで作ってみました。下の例はページの幅的に3列以上必要なかったので、Dittoを改造せずにtplとtplAltでやってます。HTMLコードを見てください。
通常、余程の理由がない限りdivやul/liで流し込むので、「どうしてもテーブルでないと・・・」という時の苦肉の策として、コードの汎用性はありませんが下などいかがでしょう。PHPやプレ-スホルダの理解、場合によってはmodxAPIを多少理解してることが必要になるので、改造そのものは軽微ですが、若干レベルが高い操作になります。
【改造プラン】
tplclm1, tplclm2, tplclm3、・・・という感じでパラメータを追加して、出現ドキュメントの順番(列位置)に応じてテンプレートを切り替えられるようにDittoを改造します。実際に試したわけではありませんが、2箇所ほど改造すればいけそうな気がします。
【3列の場合のDittoの改造例】
スニペット(L706近辺)
コード: 全て選択
$templates = array(
"default" => "@CODE".$_lang['default_template'],
"base" => $tpl,
"alt" => $tplAlt,
"first" => $tplFirst,
"last" => $tplLast,
"current" => $tplCurrentDocument, // add ","
"clm1" => $tplclm1, // add
"clm2" => $tplclm2, // add
"clm3" => $tplclm3 // add
);
assets/snippets/ditto/classes/template.class.inc.php (L175近辺)
コード: 全て選択
if ($x % 2 && !empty($templates["alt"])) {
$currentTPL = "alt";
}
// add [start]
switch ($x % 3) { // exsample for 3 columns
case 0:
if (!empty($templates["clm1"]) { $currentTPL = "clm1"; }
break;
case 1:
if (!empty($templates["clm2"]) { $currentTPL = "clm2"; }
break;
case 2:
if (!empty($templates["clm3"]) { $currentTPL = "clm3"; }
break;
default:
}
// add [end]
【注意点】
1)tplAlt, tplcurrent, tplfirst, tpllastとの併用は不可 (テーブルだから使いませんよね)
2)テーブルで実現する際の一番の問題は、ドキュメント総数が列数に対して端数が出るケースへの対処です。その場合は、Dittoの処理後、"stop"プレースホルダを見て、"<td> </td></tr>"を自前で閉じるやる必要があります。(この辺がレベルが高くなる理由・・・
)