在启用FPC的情况下,magento ee 1.12.0上的任何产品页面上都会出现相同的追加销售产品
我不是百分之百确定,但这似乎是magento为追加销售/相关产品内置的打孔实现中的一个缺陷 我查看了代码,发现追加销售/相关产品的容器取决于客户会话,而不是当前查看的产品 负责追加销售/相关产品缓存的类称为在启用FPC的情况下,magento ee 1.12.0上的任何产品页面上都会出现相同的追加销售产品,magento,Magento,我不是百分之百确定,但这似乎是magento为追加销售/相关产品内置的打孔实现中的一个缺陷 我查看了代码,发现追加销售/相关产品的容器取决于客户会话,而不是当前查看的产品 负责追加销售/相关产品缓存的类称为Enterprise\u PageCache\u Model\u Container\u CatalogProductList,它扩展了Enterprise\u PageCache\u Model\u Container\u Advanced\u Quote。此类(CatalogProduct
Enterprise\u PageCache\u Model\u Container\u CatalogProductList
,它扩展了Enterprise\u PageCache\u Model\u Container\u Advanced\u Quote
。此类(CatalogProductList)既不覆盖\u getCacheId
也不覆盖\u getAdditionalCacheId
方法。因此,此缓存仅取决于客户的会话,因此,每当任何访问者访问尚未在缓存中的产品页面时,magento都会为该特定产品重建upsells块,然后在该客户的每个产品页面上使用该块
作为临时解决方案,我将下面的方法添加到CatalogProductList类中,它解决了这个问题。我知道这是一个糟糕的解决方案,我将改变这一点,但我想问一下,是否有人有这样的问题,解决办法是什么
添加的方法是
public function applyWithoutApp(&$content)
{
return false;
}
在我看来,Magento EE将布局中的标准
product.info.upsell
和catalog.product.related
块替换为Enterprise\u TargetRule
扩展中的design/frontend/Enterprise/default/layout/TargetRule.xml
:
<catalog_product_view>
<reference name="product.info">
<!-- remove name="catalog.product.related" / -->
<block type="enterprise_targetrule/catalog_product_list_related" name="catalog.product.related" as="relatedProducts" template="targetrule/catalog/product/list/related.phtml">
<action method="setColumnCount"><columns>3</columns></action>
<block type="enterprise_targetrule/catalog_product_item" name="catalog.product.related.item" template="targetrule/catalog/product/list/related/item.phtml" />
</block>
<!-- remove name="product.info.upsell" / -->
<block type="enterprise_targetrule/catalog_product_list_upsell" name="product.info.upsell" as="upsell_products" template="targetrule/catalog/product/list/upsell.phtml">
<action method="setColumnCount"><columns>4</columns></action>
<block type="enterprise_targetrule/catalog_product_item" name="catalog.product.upsell.item" template="targetrule/catalog/product/list/upsell/item.phtml" />
</block>
</reference>
</catalog_product_view>
但它也将目标对准了使用更复杂的容器Enterprise\u PageCache\u Model\u container\u CatalogProductItem创建的新块,该容器在缓存键中包含产品:
<catalog_product_item_related>
<block>enterprise_targetrule/catalog_product_item</block>
<name>catalog.product.related.item</name>
<placeholder>CATALOG_PRODUCT_ITEM_RELATED</placeholder>
<container>Enterprise_PageCache_Model_Container_CatalogProductItem</container>
<cache_lifetime>86400</cache_lifetime>
</catalog_product_item_related>
<catalog_product_item_upsell>
<block>enterprise_targetrule/catalog_product_item</block>
<name>catalog.product.upsell.item</name>
<placeholder>CATALOG_PRODUCT_ITEM_UPSELL</placeholder>
<container>Enterprise_PageCache_Model_Container_CatalogProductItem</container>
<cache_lifetime>86400</cache_lifetime>
</catalog_product_item_upsell>
企业\目标规则/目录\产品\项目
目录.产品.相关项目
目录\产品\项目\相关
企业\页面缓存\模型\容器\目录ProductItem
86400
企业\目标规则/目录\产品\项目
catalog.product.upsell.item
目录\产品\项目\追加销售
企业\页面缓存\模型\容器\目录ProductItem
86400
因此,我想知道您当前的主题中是否包含了来自targetrule.xml
的布局更新?如果没有,这就解释了为什么使用旧块而不是新块。谢谢,你帮了我很多忙。目标规则布局在我的主题中为空。不过我有一个问题。我能够查看CatalogProductItem的最新实现,它从EE1.12开始被完全重写。然而,缓存密钥仍然依赖于COOKIE\u CART。你知道为什么吗?我不明白为什么这个区块对于每个客户/购物车都应该是唯一的。@anon-不确定,但可能目标规则的某些方面会受到客户的影响?如果您知道不需要会话,可以尝试扩展该容器以从缓存密钥中删除会话。有时Magento的代码不是很优化,因为它们必须支持很多灵活性。明白。再次感谢你,你真的帮了我的忙。
<catalog_product_item_related>
<block>enterprise_targetrule/catalog_product_item</block>
<name>catalog.product.related.item</name>
<placeholder>CATALOG_PRODUCT_ITEM_RELATED</placeholder>
<container>Enterprise_PageCache_Model_Container_CatalogProductItem</container>
<cache_lifetime>86400</cache_lifetime>
</catalog_product_item_related>
<catalog_product_item_upsell>
<block>enterprise_targetrule/catalog_product_item</block>
<name>catalog.product.upsell.item</name>
<placeholder>CATALOG_PRODUCT_ITEM_UPSELL</placeholder>
<container>Enterprise_PageCache_Model_Container_CatalogProductItem</container>
<cache_lifetime>86400</cache_lifetime>
</catalog_product_item_upsell>