PrestaShop 和 Smarty:切断循环

PrestaShop and Smarty: cutting through the loop

我正在为客户开发一个网站,我被要求使用两栏而不是通常的一栏来显示功能。产品页面上将有三列,一列包含产品图片,另外两列是功能。后者是特征,但第一列包含项目的一般特征(参考名称、颜色、粘合剂类型......),而其他列将关于尺寸(边距、填充、间距、高度......)。

我在 "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}

我已经研究了一段时间了,但我 运行 没有想法。这可能吗?我正在 运行ning PrestaShop 1.7.3.

使用具有 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}