gpt4 book ai didi

magento - 购物车(报价)更改时整页缓存失效

转载 作者:行者123 更新时间:2023-12-03 18:17:59 25 4
gpt4 key购买 nike

我正在尝试向迷你购物车 block 添加一个 block (按钮):要么到 name="cart_sidebar"或者最好是 name="topCart.extra_actions"因为它自动呈现它的子 block core/text_list类型

一切都很好,除了由于 FPC 生效而在产品页面上没有调用该 block 。我正在尝试从 Enterprise_PageCache_Model_Container_Advanced_Quote 扩展我的容器类(尝试 Enterprise_PageCache_Model_Container_Abstract 以及)但是 _renderBlock方法没有被调用。

我的 cache.xml 似乎是正确有效的:

<?xml version="1.0" encoding="UTF-8"?>
<config>
<placeholders>
<internationalcheckout_international>
<block>internationalcheckout/international</block>
<name>internationalcheckout_international</name>
<placeholder>INT_CHECKOUT</placeholder>
<container>GSX_InternationalCheckout_Model_Container_Button</container>
<cache_lifetime>84600</cache_lifetime>
</internationalcheckout_international>
</placeholders>
</config>

任何帮助或提示表示赞赏

最佳答案

嵌套动态 block

您尝试做的是嵌套动态 block ,即动态迷你购物车 block 应包含嵌套动态 block type=internationalcheckout/international .

由于 FPC 处理器实现动态 block (打洞)的方式,这不起作用。

protected function _processContainers(&$content)
{
$placeholders = array();
preg_match_all(
Enterprise_PageCache_Model_Container_Placeholder::HTML_NAME_PATTERN,
$content, $placeholders, PREG_PATTERN_ORDER
);

// ...
// ... if applyWithoutApp() on each placeholder then update content
// ... else prepare data for applyWithApp()
// ...

}

FPC加工流程

让我们一步一步来看看会发生什么。

第一 , 当 _processContainers()方法被调用, $content包含缓存页面,包括所有占位符标记。这也包括您定义的嵌套 block 。

第二 ,该方法匹配所有占位符标签。在此之后 $placeholders包括迷你购物车占位符,然后还包括您的嵌套占位符定义。

第三 ,找到的占位符按顺序处理。这意味着将在处理嵌套占位符之前处理迷你购物车占位符,因为 preg_match_all() 就是这样处理的。收集比赛。

第四 ,迷你购物车容器被实例化。它反过来实例化 checkout/cart_sidebar block ,初始化渲染器并调用 toHtml()在上面。

第五 , checkout/cart/cartheader.phtml 模板被渲染。当 Magento 接听电话时
<?php echo $this->getChildHtml('extra_actions') ?>

它不会为它呈现任何内容,因为在 applyWithoutApp() 的处理过程中和 applyWithApp() 不存在子 block .

第六 ,FPC 处理器取代了 完整内容区由微型购物车占位符标签标记,并带有微型购物车容器返回的渲染内容。 $content现在包含更新的迷你购物车 html。

第七 ,FPC 容器会尝试处理嵌套 block 的占位符。但是 $content不再包含它的占位符标签。通过用新生成的内容替换包装迷你购物车占位符,它们已被删除!

概括

当 FPC 处理内容时,不会加载布局 XML,也不会实例化常规 block 层次结构。
对于动态(“打洞”) block ,将删除子 block 的所有输出,除非 block 实例本身或容器负责在没有加载布局 XML 的情况下实例化它们。
在 FPC 处理页面内容时加载布局 XML 并生成所有 block 是一个坏主意。

这归结为 topCart.extra_actions容器 block 看起来是个好主意,但它与 FPC 不兼容 :(

您不能在动态 block 中使用子 block 。

要实现解决方法,您必须将 block 移到 cart_sidebar 之外。堵塞。

关于magento - 购物车(报价)更改时整页缓存失效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13802663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com