我开始学习如何创建Magento主题。我开始通过设置 模板路径提示 和 将块名称添加到提示来了解哪些块以及在何处查找特定的phtml文件是的。以下是 layout / page.xml 文件中的 标题 块。
<block type="page/html_header" name="header" as="header">
<block type="page/template_links" name="top.links" as="topLinks"/>
<block type="page/switch" name="store_language" as="store_language" template="page/switch/languages.phtml"/>
<block type="core/text_list" name="top.menu" as="topMenu" translate="label">
<label>Navigation Bar</label>
<block type="page/html_topmenu" name="catalog.topnav" template="page/html/topmenu.phtml"/>
</block>
<block type="page/html_wrapper" name="top.container" as="topContainer" translate="label">
<label>Page Header</label>
<action method="setElementClass"><value>top-container</value></action>
</block>
<block type="page/html_welcome" name="welcome" as="welcome"/>
</block>
使用上述XML块,它会加载 template / page / html / header.phtml 文件。以下代码位于 header.phtml 。
<?php echo $this->getChildHtml('topSearch') ?>
使用此 $ this-&gt; getChildHtml('topSearch') 方法,我预计会找到 topSearch < / strong>阻止 page.xml 文件中的 标题 块,并加载其phtml文件。但是page.xml中没有topSearch块存在于header.xml中。事实是它从 layout / catelogsearch.xml 加载 topSearch 块。我的问题是它如何知道需要从 layout / catelogsearch.xml 加载 topSearch 块?
答案 0 :(得分:1)
Magento将在运行时将所有布局文件合并为一个这一事实使这成为可能。因此它实际上不会查找topSearch
引用,因为它不需要。合并完成后,topSearch
将成为page/html_header
阻止的子块。
<default> <!--page handle, <default> is used on all pages-->
<reference name="header"> <!--reference to page/html_header block-->
<block type="core/template" name="top.search" as="topSearch" template="catalogsearch/form.mini.phtml"/>
</reference>
推荐阅读:
Intro to Layouts
Magento for Developers: Part 4 - Magento Layouts, Blocks and Templates