我从magento开始,想知道一些事情是如何工作的。
例如,有时,在搜索 a 时,我会在 magento 中找到一些代码,如下所示:
<? php echo $ this-> getChildChildHtml ('container2','', true, true)?>
我设法确定上面的这段代码准确地显示了我想要工作的内容,但我知道这条线只画了 ,想知道到达的路径和改变它的权力,知道这加快了我的工作。
在magento urls里面你有一个路径:模块/控制器/动作。几乎每个模块在基本/默认主题中都有一个布局 xml 文件。布局中的节点由
module's frontend name (from module etc/config.xml file) "_" controller "_" action
所以 checkout.xml 中的一个节点就像"checkout_cart_index"
. 在布局 xml 的这些节点中,您可以引用模板的某些部分,<reference name="content">
这是 page.xml 中的一个大块,如从页面 phtml 之一(1column、2columns-left、2columns-right、3columns、print ...)所示定义:
<block type="core/text_list" name="content" as="content" translate="label">
<label>Main Content Area</label>
</block>
并来自 phtml:
<?php echo $this->getChildHtml('content') ?>
现在回到 checkout.xml 文件,您可以看到该引用的子块(请记住,这也是一个块),例如:
<block type="checkout/cart" name="checkout.cart">...</block>
要查看方法列表,您应该查看块正在实例化的类,例如,如果您在 xml 中看到具有type="checkout/cart"
这意味着您应该查找具有以下内容的 etc/config.xml 的块:
<blocks>
<checkout>
<class>Mage_Checkout_Block</class>
</checkout>
</blocks>
这实际上来自 Mage_Checkout 模块,因此 checkout/cart 转换为Mage_Checkout_Block_Cart
Magento 中的大多数块都扩展Mage_Core_Block_Template
了一些有趣的方法,例如 setTemplate 和 _toHtml。
因此,$this->getChildChildHtml('container2','', true, true)
您必须查看定义块的布局 xml 文件,在那里您应该看到它的子项以及 container2 子项。我在 catalog.xml 中找到了一个 container2
<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>
使用“as”值代替名称以供将来参考块。这是这个块的类Mage_Core_Block_Template_Facade