2013-08-19 34 views
0

我從magento開始,想知道一些事情是如何工作的。magento如何使用phtml/xml?

E.g.有時,對於搜索的時候,我發現在Magento像這樣的代碼:

<? php echo $ this-> getChildChildHtml ('container2','', true, true)?> 

我設法找出上面這段代碼顯示完全,我想工作,但我知道,這條線只畫了,喜歡瞭解走向和改變它的力量的道路,知道這加快了我的工作。

回答

0

在magento裏面你有一個如下的路徑:module/controller/action。幾乎每個模塊都有一個基本/默認主題中的佈局xml文件。從佈局的節點構成的

module's frontend name (from module etc/config.xml file) "_" controller "_" action

所以從checkout.xml節點會是什麼樣"checkout_cart_index"。在佈局xml的這些節點中,您可以引用模板的某些部分<reference name="content">這是從page.xml中定義的一個大塊(如1列,2列, ):

<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模塊,以便結帳/車轉化爲Mage_Checkout_Block_Cart

在Magento大多數塊擴展Mage_Core_Block_Template具有一些有趣的方法,如setTemplate和_toHtml。

因此,對於$this->getChildChildHtml('container2','', true, true),您將不得不在佈局xml文件的內部定義您的塊,您應該看到它是子項和container2子項。 我發現了一個內部container2的

的catalog.xml

<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>

在「爲」值被使用的名稱,而不是用於所述塊的將來參考。這是這個塊的類Mage_Core_Block_Template_Facade