ナビゲーションメニュー:page.xml はオーバーライドされたクラス (topmenu.php) を呼び出しません。

magento.stackexchange https://magento.stackexchange.com//questions/48751

質問

編集 :ジョナサン・ハッセーによって解決されました。テンプレートとレイアウトのオーバーライドについて私を助けたい場合は、投稿の最後(または以下)にある別の質問を参照してください:)

補助的な質問 :モジュール内で page.xml、topmenu.phtml、renderer.phtml をオーバーライドできますか、それともテーマ フォルダー内で手動で置き換える必要がありますか?もしそうなら、チュートリアルに案内するか、簡単に説明していただけますか?私のケースに合うチュートリアルは簡単に見つからなかったようです...

topmenu.phtml、renderer.phtml、page.xmlのテンプレートをオーバーライドしたいのですが、 私のモジュール内で, 、 もし可能なら。

これ以上の助けをありがとう:)


私は新しい Magento 開発者なので、単純なことをやろうとしていますが、Magento についての理解は限られています...

私がやりたいのは、独自のモジュールを作成して、ナビゲーション メニュー (上部) を別の方法 (パネル風のドロップダウン) で表示することです。現在のメニューが定義/呼び出された場所を調べて、ファイルを見つけました design/frontend/{mytheme}/default/layout/page.xml これは次のようになります:

<default translate="label" module="page">
    <block type="page/html" name="root" output="toHtml" template="page/3columns.phtml">
        <block type="page/html_header" name="header" as="header">
            <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 type="page/html_topmenu_renderer" name="catalog.topnav.renderer" template="page/html/topmenu/renderer.phtml"/>
                </block>
            </block>
        </block>
    </block>
</default>

(他にもたくさんありますが、それは不可欠なものです)

<block type="page/html_topmenu" name="catalog.topnav" template="page/html/topmenu.phtml">
    <block type="page/html_topmenu_renderer" name="catalog.topnav.renderer" template="page/html/topmenu/renderer.phtml"/>
</block>

これらの行は、クラスが必要であることを示しています Mage_Page_Block_Html_Topmenu, 、テンプレート ファイルに表示されます design/frontend/{mytheme}/default/template/page/html/topmenu.phtml, 、 を含む :

<nav id="nav">
    <div class="nav-megadropdown col6">
        <?php echo $this->getHtml('level-top'); // $this is the a Topmenu object ?>
    </div>
    <div style="clear:both"></div>
</nav>

方法 getHtml 子ブロックに到達 catalog.topnav.renderer そしてそのクラスを取得します(Mage_Page_Block_Html_Topmenu_Renderer そして、テンプレートを使用して render メソッドを呼び出します design/frontend/{mytheme}/default/template/page/html/topmenu/renderer.phtml これには複雑だが機能するメニュー (Mage クラスとテーマの phtml ファイルを変更して試してみましたが、うまくいきました。).

しかし今、モジュール内のクラスをオーバーライドすることで、それを適切に作成したいと思います(アクティブで次のようになります) Fqu_Supergroup)。そこで私は config.xml から始めました。

<config>
    <modules>
        <Fqu_Supergroup>
            <version>0.1.0</version>
        </Fqu_Supergroup>
    </modules>
    <global>
        <blocks>
            <Page>
                <rewrite>
                    <html_topmenu>Fqu_Supergroup_Block_Html_Topmenu</html_topmenu>
                </rewrite>
            </Page>
        </blocks>
    </global>
</config>

そして私のクラス(Fqu_Supergroup_Block_Html_Topmenu) 私のモジュール(local/Fqu/Supergroup/Block/Html/Topmenu.php) には、オーバーライドされたメソッド (_getRenderedMenuItemAttributes および _getMenuItemClasses) のみが含まれます。

ここで、コードを試すと、ページには壊れたメニューが表示されます。これは、コードが私のクラスを使用していないためです(クラスを var_dump しました(get_class($this)) メニューをレンダリングするために使用され、返されました Mage_Page_Block_Html_Topmenu);そして、含まれているファイルを var_dump すると (get_included_files())私のモジュールへの参照がまったく表示されません(ただし、管理パネルでアクティブ化されています)...

長い投稿で申し訳ありませんが、ご清聴とご協力に感謝いたします。

補助的な質問 :モジュール内で page.xml、topmenu.phtml、renderer.phtml をオーバーライドできますか、それともテーマ フォルダー内で手動で置き換える必要がありますか?

役に立ちましたか?

解決

あなたの投稿を詳細に分析したわけではありませんが、上記を確認して最初に気づいたのは、リライトの宣言が間違っているということです。 Page 代わりにそうすべきです page. 。この文字列はモジュール名と一致しません。つまり、の PageMage_Page, 、代わりに、書き換えているモジュールでリソースを宣言するときに使用される文字列と一致します。 config.xml のために Mage_Page コアモジュール:

...
<blocks>
    <page> <!-- this is the string to match -->
        <class>Mage_Page_Block</class>
    </page>
</blocks>
...

参照することで page モジュールとの対戦 Mage_Page グローバル構成 (基本的には、すべての内容を含む 1 つの巨大な XML ファイルです) を検査することによって決定されます。 config.xml すべてのモジュールのファイル)。文字列の残りの部分はクラス名に従って決定されるため、 html_topmenu クラスにマップする Mage_Page_Block_Html_Topmenu リライトが適用されるクラスです。

追加の質問については、はい、モジュールのレイアウト ファイルを宣言することで、レイアウト ファイルまたはテンプレートをオーバーライドできます。この中で、ブロックのテンプレートの変更など、必要なレイアウト変更を宣言できます。モジュールは常にすべてのコア モジュールの後に読み込まれるため、これらの変更はコア レイアウト ファイルよりも優先されます。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top