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