我认为这很容易,但是事实证明这是一项艰巨的任务。
我的客户要求我在结帐单的订单确认表中实施完整的产品说明。
目前,我们仅提供简短描述:
文件:主题/newtheme/templates/checkout/_partials/order-confirmation-table.tpl
<div class="order-confirmation-table">
{block name='order_confirmation_table'}
{foreach from=$products item=product}
<div class="order-line row">
{$product->description_short nofilter}
</div>
{/foreach}
{/block}
</div>
我认为,基于此,我只需要更改要访问的属性,例如:{$ product-> description nofilter}
但随后显示,结帐内的$ product类不是正常的product类。它与抽象层LazyArray结合在一起。
如prestashop开发人员手册中所述,他们只是更新了LazyArrays 1.7.5版,您只能通过->
访问它们。可悲的是已经尝试过:
文件:主题/newtheme/templates/checkout/_partials/order-confirmation-table.tpl
<div class="order-confirmation-table">
{block name='order_confirmation_table'}
{foreach from=$products item=product}
<div class="order-line row">
{$product->description nofilter}
</div>
{/foreach}
{/block}
</div>
不起作用
然后我调试$product->description
属性。
它是一个空数组。
因此,如果有人可以帮助我理解惰性数组并获得描述,我将非常高兴
答案 0 :(得分:1)
“描述”字段不在前面允许的属性的“白名单”中。
如果打开文件“ src / Core / Filter / frontEndObject / ProductFilter.php”,则白名单将不包含“描述”。
无法覆盖src / core /文件,因此您将必须创建一个模块并注册到钩子“ ActionFrontControllerAfterInit”
在您的hook函数中,调用服务,获取过滤器并将说明添加到白名单:
public function hookActionFrontControllerAfterInit()
{
$filterManager = $this->get('prestashop.core.filter.front_end_object.main');
// get list of all filters applied to client-side data
$filters = $filterManager->getFilters();
// get list of all filters applied to the cart object
$cartFilters = $filters['cart']->getFilters();
// get list of filters applied to each product inside the cart object
$productFilterQueue = $cartFilters['products']->getQueue();
foreach ($productFilterQueue as $filter) {
if ($filter instanceof PrestaShop\PrestaShop\Core\Filter\FrontEndObject\ProductFilter) {
$filter->whitelist(array('description'));
}
}
}
您可以在这里http://build.prestashop.com/news/exposing-data-with-confidence/
中找到一些文档。