我目前的代码:
<?php if($_images){?>
<?php $i=0; foreach($_images as $_image){ $i++; ?>
<?php if($i > 2) { ?>
<div class = "largePic">
<img src="<?php echo $this->helper('catalog/image')->init($_product, 'thumbnail', $_image->getFile())->resize(600,900); ?>" alt="<?php echo $this->htmlEscape($_image->getLabel());?>" title="<?php $this->htmlEscape($_image->getLabel());?>" />
</div>
<?php } else { ?>
<div class = "smallPic">
<img src="<?php echo $this->helper('catalog/image')->init($_product, 'thumbnail', $_image->getFile())->resize(450,675); ?>" alt="<?php echo $this->htmlEscape($_image->getLabel());?>" title="<?php $this->htmlEscape($_image->getLabel());?>" />
</div>
<?php } ?>
<?php } ?>
<?php } ?>
所以这显然是错误的,因为每次图像被回显时,它被分配给不同的div(同名但不同)。是否可以根据计数将回波分配给某个div?
例如,前两个图像将分配给smallPic div,其余图像将分配给largePic div。
答案 0 :(得分:2)
你想要的是首先将你的数组分成两个数组,然后通过两个数组进行预测。
<?php
$largeImages = array();
$smallImages = array();
foreach ($_images as $k => $v) {
if ($k > 2) {
$largeImages[] = $v;
} else {
$smallImages[] = $v
}
}
?>
<div class = "largePic">
<?php foreach ($largeImages as $_image) { ?>
<img src="<?php echo $this->helper('catalog/image')->init($_product, 'thumbnail', $_image->getFile())->resize(600,900); ?>" alt="<?php echo $this->htmlEscape($_image->getLabel());?>" title="<?php $this->htmlEscape($_image->getLabel());?>" />
<?php } ?>
</div>
<div class = "smallPic">
<?php foreach ($smallImages as $_image) { ?>
<img src="<?php echo $this->helper('catalog/image')->init($_product, 'thumbnail', $_image->getFile())->resize(450,675); ?>" alt="<?php echo $this->htmlEscape($_image->getLabel());?>" title="<?php $this->htmlEscape($_image->getLabel());?>" />
<?php } ?>
</div>
答案 1 :(得分:2)
首先处理图像(将每个图像的HTML存储在数组或字符串中),然后创建 div 元素 - 请参阅下面的示例。这将极大地减少打开/关闭标签的数量。
另请注意,如果数组的键是数字,则可以使用以下语法而不是创建额外的变量(即$i
)来跟踪索引(以避免额外的簿记,如递增变量 - foreach与for语句相比的主要好处之一。)
foreach(array_expression as $ key =&gt; $ value)
声明 1
<?php
$largePic = '';
$smallPic = '';
if($_images){
foreach($_images as $i => $_image){
if($i > 2) {
$largePic .= '<img src="'.$this->helper('catalog/image')->init($_product, 'thumbnail', $_image->getFile())->resize(600,900).'" alt="'. $this->htmlEscape($_image->getLabel()). '" title="'. $this->htmlEscape($_image->getLabel()).'" />';
} else {
$smallPic .= '<img src="'. $this->helper('catalog/image')->init($_product, 'thumbnail', $_image->getFile())->resize(450,675). '" alt="'. $this->htmlEscape($_image->getLabel()). '" title="'. $this->htmlEscape($_image->getLabel()). '" />';
}
}
} ?>
<div class = "largePic"><?php echo $largePic; ?></div>
<div class = "smallPic"><?php echo $smallPic; ?></div>
答案 2 :(得分:0)
我不是在PHP中,但我很确定一开始你可以放弃那些广泛的开/关标签(<?php ?>
)并在开头和结尾只用一个替换它。这几乎不可读。
然后,就像在许多服务器端脚本中一样,你需要的是某种包含HTML的缓冲区,你将在循环结束时输出。因为您现在正在做的是从循环内部输出,这会将多个DIV发送给客户端。
创建包含DIV HTML的largePic
个smallPic
个变量,并在循环中将HTML附加到其中(而不是像现在这样将其输出到客户端)。然后,在循环结束后,将这两个变量输出到客户端。