使用智能模板显示尺寸图像

时间:2013-11-07 07:42:10

标签: php smarty

我正在使用智能模板动态渲染页面;这就是我在php文件中分配变量的方式: $ imgsrc1,$ imgsrc2,$ imgsrc3包含上传图像文件的位置

$smarty->assign('foto1', $imgsrc1);
$smarty->assign('foto2', $imgsrc2);
$smarty->assign('foto3', $imgsrc3);

在模板文件中,我以这种方式使用它们:

<img src='{$foto1}' border='1' width="230" height="250">
<img src='{$foto2}' border='1' width="630" height="850">
<img src='{$foto3}' border='1' width="130" height="150">

我知道这不是显示图像的理想方式。这样做了;只是没有采取高度和宽度;显示原生高度和宽度。我想我应该使用{html_image},但我不知道如何分配然后使用它来显示模板。

编辑: 请注意,不仅仅是图像的显示,我想控制它们的尺寸。例如,image1必须具有230 x 250的固定大小,而image2必须具有630 x 850的固定大小,而image3必须具有130 x 150的固定大小,而不管上载文件的原始属性。

2 个答案:

答案 0 :(得分:0)

您已经使用{html_image}暗示了最简单的方法。

如果您不想更改您的PHP代码......

$smarty->assign('foto1', $imgsrc1);
$smarty->assign('foto2', $imgsrc2);
$smarty->assign('foto3', $imgsrc3);

...那么您可能只想将智能模板更改为...

{html_image file=$foto1}
{html_image file=$foto2}
{html_image file=$foto3}

这简化了您的任务,因为您可以让smarty完成工作以发现实际的图像大小。

生成的html代码如下所示:

<img width="230" height="250" alt="" src="/path/to/your_image1.jpg">
<img width="630" height="850" alt="" src="/path/to/your_image2.jpg">
<img width="130" height="150" alt="" src="/path/to/your_image3.jpg">

如果您想要更多地控制输出,则必须将图像处理移至php。如果这是你想要的,请与我联系。

<强>更新

由于您明确表示您希望在不检查源图像尺寸的情况下控制宽度和高度,因此您无需分析图像,这是{html_image}的作用。相反,只需将尺寸变量推入模板,也许就是这样。

PHP代码:

$arr = array(
    0 => array(
        'path' => '/path/to/your_image1.jpg',
        'wdth' => '230',
        'hght' => '250'
    ), 
    1 => array(
        'path' => '/path/to/your_image2.jpg',
        'wdth' => '630',
        'hght' => '850'
    ), 
    2 => array(
        'path' => '/path/to/your_image3.jpg',
        'wdth' => '130',
        'hght' => '150'
    )
);

$smarty->assign('images', $arr);

smarty模板代码:

{foreach $images as $img} 
    <img src='{$img.path}' border='1' width="{$img.wdth}" height="{$img.hght}">
{/foreach}

请记住,我在这里使用了一个数组,以便更好地可视化依赖关系。这当然可以在不使用数组的情况下完成。

答案 1 :(得分:0)

在php循环中像这样:

$newArray = array();
$imagesArray = [$imgsrc1,$imgsrc2];
for(i = 0;i<count($imagesArray);$i++;){
   list($width, $height) = getimagesize($imgsrc1);
    $newArray[$i]['src'] = $imgsrc1;
    $newArray[$i]['width'] = $width;
    $newArray[$i]['height'] = $height;
}
$smarty->assign('imagesArray', $newArray);

然后在这样的聪明循环中:

    {foreach from=$imagesArray key=myId item=i}
        <img src='{$i.src}' border='1' width="{$i.width}" height="{$i.height}">
    {/foreach}

尚未测试代码,可能存在轻微的语法问题。