[PHP-users 28424] Re: Smartyでのtable出力について。
石井 栄徳
ishii @ seedplanning.co.jp
2006年 2月 16日 (木) 10:53:48 JST
石井です。
On Thu, 16 Feb 2006 09:23:08 +0900
竹内 裕紀 <h-takeuchi @ system-u.co.jp> wrote:
> はじめまして。初のML投稿となります、竹内と申します。
>
> Smartyで画像のtableを表示させようと思っております。
> 方法としては、画像ファイルのパスが格納された配列を渡して、各セルの中に
> <img>タグを挿入して画像テーブルを表示させる方法を取ろうと思います。
>
> しかし、{section}を使ってループさせようとすると、<tr>内の<td>の数を制御
> するためには、配列を二次元配列にしたりと、処理が複雑になり、またデザイン
> の変更に容易に対処できなくなります。
複数列のテーブルに画像を敷き詰めるということですよね?決してスマー
トではありませんが、{section}でどうにかすることは可能です。
■呼び出し側
<?php
/**
* テーブル列数
*/
$table_cols = 3;
/**
* デフォルトイメージ
*/
$image_default = '/path/to/image_default.gif';
/**
* 表示対象イメージ
*/
$images = array(
'/path/to/image1.gif',
'/path/to/image2.gif',
'/path/to/image3.gif',
'/path/to/image4.gif',
'/path/to/image5.gif',
'/path/to/image6.gif',
'/path/to/image7.gif',
'/path/to/image8.gif'
);
/**
* 表示
*/
require_once 'Smarty.class.php';
$tmpl =& new Smarty;
$tmpl->assign('table_cols', $table_cols);
$tmpl->assign('image_default', $image_default);
$tmpl->assign('images', $images);
$tmpl->display('image_table.tpl');
?>
■テンプレート側
{section name=i loop=$images step=$table_cols}
{if $smarty.section.i.first}<table>{/if}
<tr>
{section name=j loop=$table_cols}
{math equation="x + y" assign=index
x=$smarty.section.i.index
y=$smarty.section.j.index}
<td><img src="{$images[$index]|default:$image_default}"></td>
{/section}
</tr>
{if $smarty.section.i.last}</table>{/if}
{/section}
※imgタグを直接書かず、{html_image}+キャッシュを使うという手もあり
ます。
結局のところ、カスタム関数を自作するのが最もスマートな解決方法では
ないかと思います。
------------------------------------------------------------
石井 栄徳
ishii @ seedplanning.co.jp
PHP-users メーリングリストの案内