标题块和topSearch之间的Magento主题链接(catelogsearch / form.mini.phtml)

时间:2015-02-01 16:49:04

标签: php magento header themes

我开始学习如何创建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 块?

1 个答案:

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