質問
現在、私が取り組んでいるウェブサイトのヘッダーにサイドバーカートを追加しようとしていますが、機能していないようです。これが私のファイルです:
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="checkout/cart_sidebar" name="cart_sidebar" as="topcart" template="checkout/cart/sidebar.phtml"/>
</block>
header.phtml:
<?php echo $this->getChildHtml('topcart'); ?>
現在、Magentoでキャッシュをオフにしていますが、システム - >キャッシュ管理でキャッシュを洗い流しようとしました。何か案は?
解決
定義したブロックのレイアウト名(cart_sidebar
)このブロックのデフォルトのレイアウト名と同じです。レイアウト名は、ページのレイアウト全体で一意でなければなりませんが、エイリアス(topcart
)親ブロック内で一意である必要があります。
レイアウトファイルにこのレイアウト名で他のブロックをコメントしたり、レイアウトを使用してレイアウトから削除したりしない限り unsetChild
独自のlocal.xml(またはモジュール)レイアウトファイルのブロックメソッドでは、そのレイアウト名でブロックを追加することはできません。
<action method="unsetChild"><name>cart_sidebar</name></action>
レイアウトを使用することに注意してください remove
タグでは、同じレイアウト名でブロックを追加することはできません。ブロックはレイアウトにまだ存在し、出力ではありません。
<remove name="cart_sidebar" />
それも注意してください unsetChild
親ブロックから呼び出す必要がありますが、 remove
タグは、レイアウトハンドルの下に直接適用できます。
最後に、page.xmlはページの基本的なレイアウト構造のみを定義する必要があります。このレイアウトファイルに新しいブロックを直接追加する必要はありません。代わりに、他のレイアウトファイルで作成されたブロックを参照し、代わりに独自のブロックを追加する必要があります。
<reference name="header">
.........
</reference>
他のヒント
コメントが十分なスペースを与えていないので、別の答えであなたのコメントに応答します。
レイアウトハンドルは、ブロックが追加されるページを定義するので、さらに調べると page.xml
あなたが投稿したセクションの上に、あなたは <default>
鬼ごっこ。これは、レイアウトハンドルタグを開くことと使用です デフォルト 意味 ここでレイアウトの変更をすべてのページに適用します.
他のレイアウトファイルを見ると、他のハンドルが表示されます。 catalog.xml
あなたが見つけます <catalog_product_view>
これは、製品ビューページのレイアウトハンドルであり、このハンドル内で定義されているレイアウトアイテムは、製品を表示するときにのみ使用されます。レイアウトハンドルは、モジュール名、コントローラー名、およびアクション名のアンダースコア分離された連結から作成されるため、上記の場合、モジュールはカタログであり、コントローラーはそのコントローラー内の製品とアクションです。
これにより、独自のレイアウトファイルから特定のページでレイアウトを変更するために必要なスコープが得られます。また、特定のページのレイアウトハンドルを決定する方法がわからない場合は、デフォルトで最初のクラスとして挿入されていることも注目に値します。 <body>
各ページのHTMLタグ。
フロントエンドと管理者のページには個別のレイアウトファイルがあるため、 <default>
タグは、フロントエンドまたは配置されたレイアウトファイルに依存する管理者のみにのみ適用されます。
自分で作成することを強くお勧めします local.xml
レイアウトファイル(または拡張機能を作成している場合は、独自のレイアウトファイルを定義します。 config.xml
)。使用 local.xml
レイアウトを管理するためのはるかにクリーンな方法です。デフォルトのレイアウトファイルを触れず、ハンドルを使用してすべてのレイアウトの変更を1つのファイルを介して管理します。 Local.xmlがテーマレイアウトディレクトリに存在しない場合、それを作成するだけで、自動的に選択されます。がここにあります local.xml
いくつかの例の構文を備えたレイアウトファイルを開始するには:
<?xml version="1.0"?>
<layout version="0.1.0">
<default>
<reference name="content">
<block type="page/html" name="new.block" after="-" template="module/block/template.phtml" />
</reference>
</default>
<catalog_product_view>
<reference name="right">
<action method="unsetChild">
<name>child.block.name</name>
</action>
</reference>
<remove name="some.block.name" />
<block type="page/html" name="other.new.block" template="module/block/other_template.phtml" before="block_name_to_appear_before" parent="content" />
</catalog_product_view>
</layout>