如何在page.xml中加载topSearch?

时间:2013-03-30 16:01:43

标签: magento

我是Magento CE的新手,我正在努力学习设计一个新主题。我开始研究默认的设计包。有一点我无法理解:

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

这是header.phtml:

<div class="header-container">
    <div class="header">
        <?php if ($this->getIsHomePage()):?>
        <h1 class="logo"><strong><?php echo $this->getLogoAlt() ?></strong><a href="<?php echo $this->getUrl('') ?>" title="<?php echo $this->getLogoAlt() ?>" class="logo"><img src="<?php echo $this->getLogoSrc() ?>" alt="<?php echo $this->getLogoAlt() ?>" /></a></h1>
        <?php else:?>
        <a href="<?php echo $this->getUrl('') ?>" title="<?php echo $this->getLogoAlt() ?>" class="logo"><strong><?php echo $this->getLogoAlt() ?></strong><img src="<?php echo $this->getLogoSrc() ?>" alt="<?php echo $this->getLogoAlt() ?>" /></a>
        <?php endif?>
        <div class="quick-access">
            <?php echo $this->getChildHtml('topSearch') ?>
            <p class="welcome-msg"><?php echo $this->getWelcome() ?> <?php echo $this->getAdditionalHtml() ?></p>
            <?php echo $this->getChildHtml('topLinks') ?>
            <?php echo $this->getChildHtml('store_language') ?>
        </div>
        <?php echo $this->getChildHtml('topContainer'); ?>
    </div>
</div>
<?php echo $this->getChildHtml('topMenu') ?>

我无法理解为什么要加载topSearch块,即使它没有在page.xml的标题中声明为标题的子文件。

有人可以解释一下吗?谢谢!

1 个答案:

答案 0 :(得分:4)

在主题的layout / catalogsearch.xml中,您将看到以下内容:

<reference name="header">
     <block type="core/template" name="top.search" as="topSearch" template="catalogsearch/form.mini.phtml"/>
</reference>

Catalogsearch是Magento核心中的一个自有模块。当深入挖掘magento并开发自己的模块/覆盖核心模块时,您会注意到这是向布局添加“依赖”事物的常规方法。 当您禁用catalogsearch模块时,topSearch将不再自动添加到标题中。

想象一下,如果你要禁用它,并且XML仍然会调用块 - 你拥有的模块越多,它就越混乱,因为每次禁用模块时都必须检查所有现有的布局文件如果它在那里的某个地方。

<强> == UPDATE ==
关于你的评论:
Magento作为一个整体主要由app/code/中的三个名称空间中的模块组成,即corecommunitylocal。虽然communitylocal用于通过Magento Connect安装或由您自己构建的扩展(使用magento语言,只是模块的另一个词),core - 命名空间包含magento代码库。所有模块都构成了正常的magento安装,但它们仍然是“模块”。它们可以单独禁用,更改,覆盖等等。

如果您想在商店中安装模块列表,我建议您使用此扩展程序:https://github.com/firegento/firegento-debug/

如果你想了解更多关于magento结构的信息,你应该在magentocommerce.com上阅读Alan Storm的系列:http://www.magentocommerce.com/knowledge-base/entry/magento-for-dev-part-1-introduction-to-magento,以及他写的所有其他内容;)

还有一个magento-core中使用的所有类和函数的列表: http://docs.magentocommerce.com/