gpt4 book ai didi

magento - Mage_Core_Block_Template_Facade 的目的是什么

转载 作者:行者123 更新时间:2023-12-03 11:15:36 25 4
gpt4 key购买 nike

在查看 magento 源代码时偶然发现以下类后:Mage_Core_Block_Template_Facade,我完全不知道这个类是做什么的。

显然,我已经看过它并进行了一些调查,但我不清楚。

谁能解释它在生活中的用途以及何时使用它可能有用

最佳答案

Mage_Core_Block_Template_Facade ,其实很容易理解。它..

  • 允许在块上设置值
  • 允许布局从要在块
  • 上设置的注册表对象中指定属性/值
  • 允许评估上述两个值的相等性

  • 本质上,这就是使 Facade Block 与其他块不同的原因——与注册表的交互以及将注册表键/值与块实例键/值进行比较——所有这些都来自布局 xml。

    核心代码中使用的块只有一个示例......

    在看 catalog.xmlproduct/view.phtml你会看到 容器 1 容器 2 块 - 它们都是相同的,但在最终输出中只渲染了一个。

    那为什么他们两个都在呢?这将解释 Mage_Core_Block_Template_Facade 如何工作。

    核心使用门面块作为允许产品选项块位置在 product/view.phtml 内的方法。 (不在布局内,而是在模板本身内)可在管理区域中进行配置。如果您在编辑产品时查看设计选项卡,您应该注意到最后一个选项:“Display Product Options In” - 这两个下拉值分别与您可以在 catalog.xml 和 view.phtml 中看到的 container1 和 container2 块相关联.具体来说,查看 product/view.phtml您应该会看到 container1 和 container2 位于不同的 div 中。

    布局根据使用外观块的“显示产品选项”中设置的值来决定显示这些块中的哪些块。

    这是它的工作原理......

    检查catalog.xml,你会看到:
    <block type="core/template_facade" name="product.info.container1" as="container1">
    <action method="setDataByKey"><key>alias_in_layout</key><value>container1</value></action>
    <action method="setDataByKeyFromRegistry"><key>options_container</key><key_in_registry>product</key_in_registry></action>
    <action method="append"><block>product.info.options.wrapper</block></action>
    <action method="append"><block>product.info.options.wrapper.bottom</block></action>
    </block>
    <block type="core/template_facade" name="product.info.container2" as="container2">
    <action method="setDataByKey"><key>alias_in_layout</key><value>container2</value></action>
    <action method="setDataByKeyFromRegistry"><key>options_container</key><key_in_registry>product</key_in_registry></action>
    <action method="append"><block>product.info.options.wrapper</block></action>
    <action method="append"><block>product.info.options.wrapper.bottom</block></action>
    </block>
    <action method="unsetCallChild"><child>container1</child><call>ifEquals</call><if>0</if><key>alias_in_layout</key><key>options_container</key></action>
    <action method="unsetCallChild"><child>container2</child><call>ifEquals</call><if>0</if><key>alias_in_layout</key><key>options_container</key></action>

    setDataByKey
    <action method="setDataByKey"><key>alias_in_layout</key><value>container1</value></action>

    这将为该块设置一个标识符,该标识符将根据注册表对象进行评估。在选项容器的上下文中,此值必须与前面提到的管理区域中的下拉值之一匹配。

    setDataByKeyFromRegistry
    <action method="setDataByKeyFromRegistry"><key>options_container</key><key_in_registry>product</key_in_registry></action>

    告诉块“嘿,当我们需要查看注册表中的产品对象并获取 options_container 键/属性的值时”。类似于: Mage::registry('product')->getData('options_container');
    在此特定示例中,我们希望此值是 container1 或 container2。

    ifEquals

    最后,结合 unsetCallChild 调用 ifEquals 以移除管理区域中未选中的容器。

    以 container1 为例...
    <action method="unsetCallChild"><child>container1</child><call>ifEquals</call><if>0</if><key>alias_in_layout</key><key>options_container</key></action>

    这将调用该块实例上的 ifEquals 方法,如果返回值为 0,则 container1 将被取消设置并且不会呈现。

    关于magento - Mage_Core_Block_Template_Facade 的目的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11745485/

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