[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 メーリングリストの案内