1

私は Magento CE の初心者で、新しいテーマのデザインを学ぼうとしています。デフォルトの desing パッケージの調査を開始しました。私が理解できないことが1つあります:

これは、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') ?>

page.xml のヘッダーでヘッダーの子として宣言されていないのに、なぜ topSearch ブロックが読み込まれるのか理解できません。

誰でも説明できますか?ありがとう!

4

1 に答える 1

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 は全体として、主に にある 3 つの名前空間app/code/、つまりcoreとのモジュールで構成されcommunityていますlocalcommunityとは、Magento Connectをlocal介してインストールされた、または自分で構築された拡張機能 (magento 言語ではモジュールの別の言葉) 用ですが、core-namespace には magento コードベースが含まれています。すべてのモジュールは通常の magento インストールを構成しますが、それでも「モジュール」です。これらは、個別に無効化、変更、上書きなどを行うことができます。

ストアにインストールされているモジュールのリストが必要な場合は、次の拡張機能をお勧めします: https://github.com/firegento/firegento-debug/

Magento の構造について詳しく知りたい場合は、magentocommerce.com で Alan Storm のシリーズを読む必要があります。 to-magento、および彼によって書かれた他のすべてのもの ;)

また、magento-core で使用されるすべてのクラスと関数のリストもあります: http://docs.magentocommerce.com/

于 2013-03-30T16:07:13.127 に答える