问题:如何在 page.xml 中加载 topSearch?

我是 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 的标头中声明为标头的子项。

谁能解释一下?谢谢!

解答

在主题的 layout/catalogsearch.xml 中,您将看到这个:

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

Catalogsearch 是 Magento 核心中的一个自己的模块。当深入研究 magento 并开发自己的模块/覆盖核心模块时,您会注意到这是向布局添加“依赖”事物的正常方式。当您禁用目录搜索模块时,topSearch 将不再自动添加到标题中。

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

\u003du003d更新u003du003d

关于您的评论:

Magento 整体主要由app/code/中的三个命名空间中的模块组成,即corecommunitylocal。虽然communitylocal用于通过 Magento Connect 安装或自己构建的扩展(在 magento 语言中只是模块的另一个词),但core-namespace 包含 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/

Logo

华为、百度、京东云现已入驻,来创建你的专属开发者社区吧!

更多推荐