我正在为客户开发一个网站,并且我被要求使用两列而不是通常的列来显示这些功能。产品页面上将有三列。一列包含产品图片,另外两列是功能。后者是特征,但第一列包含项目的一般特征(参考名称,颜色,粘合剂类型......),而其他列将是关于尺寸(边距,填充,间距,高度......)。
我在" product-details.tpl"这些项目来自" $ product = grouped_features"数组,并且由于我的技术参考包含16个数据字段,我想在第一列的第8个特征中断循环,并在下一列恢复循环。
我知道在一些模板语言(Jinja2,Twig,Handlebars)中,有可能做类似的事情,但我无法通过Smarty找到它。我是否必须在深层代码中更改某些内容?
不仅仅是单词,还有伪代码的例子;
// Column N°1
FOREACH $product.grouped_features START=1(i) STOP=8(i)
$feature.name(i)
$feature.value(i)
ENDFOREACH
// Column N°2
FOREACH $product.grouped_features START=9(i) STOP=16(i)
$feature.name(i)
$feature.value(i)
ENDFOREACH
(i)是迭代。
我试过了this solution,但它只显示了一次迭代。为了测试,我只有6个功能,我设置$ smarty.foreach.featureCount.iteration == 4但它只显示第4个值:
{foreach from=$product.grouped_features item=feature name=featureCount}
{if $smarty.foreach.featureCount.iteration == 4}
<dt class="name">{$feature.name}</dt>
<dd class="value">{$feature.value|escape:'htmlall'|nl2br nofilter}</dd>
{break}
{/if}
{/foreach}
我一直在寻找这个问题已有一段时间了,而且我已经没想完了。这甚至可能吗?我正在运行PrestaShop 1.7.3。
答案 0 :(得分:1)
使用具有6个功能的示例,您可以尝试:
{foreach from=$product.grouped_features item=feature name=featureCount}
<dt class="name">{$feature.name}</dt>
<dd class="value">{$feature.value|escape:'htmlall'|nl2br nofilter}</dd>
{if $feature@iteration == 4}
{break}
{/if}
{/foreach}
您的错误是在的休息条件下打印功能。如果你在if条件之前这样做,它应该可以工作。
但是对于第二个特征列,您将不得不稍微改变一下逻辑,因为您不能使用break,但是您必须省略前X个特征。您可以在此处使用the second answer from your linked question:
的尝试{foreach from=$product.grouped_features item=feature name=featureCount}
{if $feature@iteration > 4}
<dt class="name">{$feature.name}</dt>
<dd class="value">{$feature.value|escape:'htmlall'|nl2br nofilter}</dd>
{/if}
{/foreach}