prestashop - Prestashop 1.7 模板不传递变量
问题描述
我有一个我无法解决的问题。在 prestashop 1.7 中,我有一个名为 product.tpl 的 tpl 文件,其中除了各种数据外,我还使用以下代码调用了一个文件:
<div class="product-actions">
{block name='product_buy'}
<form action="{$urls.pages.cart}" method="post" id="add-to-cart-or-refresh">
<input type="hidden" name="token" value="{$static_token}">
<input type="hidden" name="id_product" value="{$product.id}" id="product_page_product_id">
<input type="hidden" name="id_customization" value="{$product.customization_id}" id="product_customization_id">
{block name='product_variants'}
{include file='catalog/_partials/product-variants.tpl'}
{/block}
{block name='product_pack'}
{if $packItems}
<section class="product-pack">
<h3 class="h4">{l s='This pack contains' d='Shop.Theme.Catalog'}</h3>
{foreach from=$packItems item="product_pack"}
{block name='product_miniature'}
{include file='catalog/_partials/miniatures/pack-product.tpl' product=$product_pack}
{/block}
{/foreach}
</section>
{/if}
{/block}
{block name='product_discounts'}
{include file='catalog/_partials/product-discounts.tpl'}
{/block}
{block name='product_add_to_cart'}
{include file='catalog/_partials/product-add-to-cart.tpl'}
{/block}
{block name='product_additional_info'}
{include file='catalog/_partials/product-additional-info.tpl'}
{/block}
{block name='product_refresh'}
<input class="product-refresh ps-hidden-by-js" name="refresh" type="submit" value="{l s='Refresh' d='Shop.Theme.Actions'}">
{/block}
</form>
{/block}
</div>
一切正常。
我最感兴趣的是这个块中提到的代码部分
{block name='product_variants'}
{include file='catalog/_partials/product-variants.tpl'}
{/block}
代码是:
<div class="product-variants">
{foreach from=$groups key=id_attribute_group item=group}
<div class="clearfix product-variants-item">
<span class="control-label">{$group.name}</span>
{if $group.group_type == 'select'}
<select
class="form-control form-control-select"
id="group_{$id_attribute_group}"
data-product-attribute="{$id_attribute_group}"
name="group[{$id_attribute_group}]">
{foreach from=$group.attributes key=id_attribute item=group_attribute}
<option value="{$id_attribute}" title="{$group_attribute.name}"{if $group_attribute.selected} selected="selected"{/if}>{$group_attribute.name}</option>
{/foreach}
</select>
{elseif $group.group_type == 'color'}
<ul id="group_{$id_attribute_group}">
{foreach from=$group.attributes key=id_attribute item=group_attribute}
<li class="float-xs-left input-container">
<label>
<input class="input-color" type="radio" data-product-attribute="{$id_attribute_group}" name="group[{$id_attribute_group}]" value="{$id_attribute}"{if $group_attribute.selected} checked="checked"{/if}>
<span
{if $group_attribute.html_color_code}class="color" style="background-color: {$group_attribute.html_color_code}" {/if}
{if $group_attribute.texture}class="color texture" style="background-image: url({$group_attribute.texture})" {/if}
><span class="sr-only">{$group_attribute.name}</span></span>
</label>
</li>
{/foreach}
</ul>
{elseif $group.group_type == 'radio'}
<ul id="group_{$id_attribute_group}">
{foreach from=$group.attributes key=id_attribute item=group_attribute}
<li class="input-container float-xs-left">
<label>
<input class="input-radio" type="radio" data-product-attribute="{$id_attribute_group}" name="group[{$id_attribute_group}]" value="{$id_attribute}"{if $group_attribute.selected} checked="checked"{/if}>
<span class="radio-label">{$group_attribute.name}</span>
</label>
</li>
{/foreach}
</ul>
{/if}
</div>
{/foreach}
</div>
然后我修改了模块 ps_featuredproducts 的 tpl 文件并在主文件“ps_featuredproducts.tpl”中,在 foreach 中我插入了一部分代码来显示变体和一些产品 html 设计。
发生的事情是我完美地可视化了格式,但是变量的所有值都没有让我看到它们,特别是这部分代码不起作用
<div class="product-variants">
{foreach from=$groups key=id_attribute_group item=group}
<div class="clearfix product-variants-item">
<span class="control-label">{$group.name}</span>
{if $group.group_type == 'select'}
<select
class="form-control form-control-select"
id="group_{$id_attribute_group}"
data-product-attribute="{$id_attribute_group}"
name="group[{$id_attribute_group}]">
{foreach from=$group.attributes key=id_attribute item=group_attribute}
<option value="{$id_attribute}" title="{$group_attribute.name}"{if $group_attribute.selected} selected="selected"{/if}>{$group_attribute.name}</option>
{/foreach}
</select>
{elseif $group.group_type == 'color'}
<ul id="group_{$id_attribute_group}">
{foreach from=$group.attributes key=id_attribute item=group_attribute}
<li class="float-xs-left input-container">
<label>
<input class="input-color" type="radio" data-product-attribute="{$id_attribute_group}" name="group[{$id_attribute_group}]" value="{$id_attribute}"{if $group_attribute.selected} checked="checked"{/if}>
<span
{if $group_attribute.html_color_code}class="color" style="background-color: {$group_attribute.html_color_code}" {/if}
{if $group_attribute.texture}class="color texture" style="background-image: url({$group_attribute.texture})" {/if}
><span class="sr-only">{$group_attribute.name}</span></span>
</label>
</li>
{/foreach}
</ul>
{elseif $group.group_type == 'radio'}
<ul id="group_{$id_attribute_group}">
{foreach from=$group.attributes key=id_attribute item=group_attribute}
<li class="input-container float-xs-left">
<label>
<input class="input-radio" type="radio" data-product-attribute="{$id_attribute_group}" name="group[{$id_attribute_group}]" value="{$id_attribute}"{if $group_attribute.selected} checked="checked"{/if}>
<span class="radio-label">{$group_attribute.name}</span>
</label>
</li>
{/foreach}
</ul>
{/if}
</div>
{/foreach}
</div>
显然,产品页面中的相同代码会调用所有变量,而在我调用主页内容的主页中,我无法恢复它们。我哪里错了?几周前我才开始接触 prestashop,我想我的想法很混乱。我希望我已经清楚了,感谢那些有耐心回答的人。
解决方案
中使用的变量 $groups 是catalog/_partials/product-variants.tpl
从 PoductController.php 传递的,并且仅在产品信息页面上可用。您不能在您的主页或其他地方使用它。如果您想获得相同的结果,您需要在模块中创建一些类似的变量并将其传递给您自己的模板。controller/front/ProductController.php
在方法内的文件中创建的变量,assignAttributesGroups
但它非常复杂,我认为您可以创建更简单的东西。
推荐阅读
- python - 如何在 python 中创建一个键盘侦听器,它将返回按下的键的字符?
- java - 为什么迭代比 Java 中的 Streams 快?
- scala - Apache Spark 与 Apache Kafka 集成
- html - 无法使用 window.print() 打印完整的 HTML 页面,有 3 个页面内容,但只有 1 个页面获取数据,其他页面为空白
- asp.net-core - ASPNetCoreModule 和 ASPNetCoreModuleV2 有什么区别?
- ffmpeg - FFMPEG 不会播放 rtsp 链接,但相同的链接在 VLC 中有效
- ios - 如何在一个 Firestore 集合中查询另一个 Firestore 集合文档中包含的值
- javascript - React 未被识别为已导入 - ReactNative expo 应用程序
- excel - 如何从“.xlsm”excel宏文件转换“.exe”或保护vba文件
- javascript - Html 模板未在屏幕上呈现 Vue 内容