local.xmlを介してブレッドクラムブロックを純粋に移動する


7

純粋にを使用してブレッドクラムブロックを移動したいlocal.xml

出力するには、デフォルトの場所からコンテンツブロックに移動する必要があります。

通常、私は希望のブロックを移動するときunsetChild、その後insert、しかし、これは、ブレッドクラムブロックを作っているように見える二回ともその実際にはどこにでも移動していません。

<reference name="root">
    <action method="unsetChild"><name>breadcrumbs</name></action>
    <reference name="content">
        <action method="insert"><child>breadcrumbs</child></action>
    </reference>
</reference>

回答:


8

これは良い練習です-学ぶ良い機会です。Magento 1のレイアウトXMLの移動は実際には複合操作(元の親からのアンサー、新しい親への追加)であるため、デバッグには両方の条件をテストする必要があります。

パンくずリストが 2回ブロックさinsertれているのが見えるので、これは明らかに機能しています。つまり、通話は機能していません。これはほとんどの場合、2つの事柄の1つが原因です。誤った子エイリアスまたは誤った親参照。あなたの場合、それは後者です。これはカスタム(非CE)テーマの結果です。例えば、企業/デフォルトのテーマは宣言するブレッドクラムにブロックを命名ブロックbreadcrumbs.containerunsetChildcore/text_list

また、参照タグはネストしないでください。彼らはなります入れ子になったときに動作しますが、彼らは名前でグローバルブロックリストに対して動作することを考えると、それは必要はありません。


1
私はそれがこのように単純であるかどうかを確信していません。magento CEを使用してテーマを作成しました。このテーマは、ベースCEテーマからのみ継承します。ブレッドクラムの基本レイアウトフォルダーをgrepしましたが、唯一のインスタンスは、page.xmlでname = "breadcrumbs" as = "breadcrumbs"として宣言されている場所です。したがって、私は正しいブロックを参照しています。また、挿入を省略するとブレッドクラムが消えるため、unsetは機能しています。ただし、挿入を使用すると、2回挿入されます。さらに、それは実際にコンテンツブロックの中にそれを入れて、まだ根内部されていません
マーティ・ウォレス

また、問題はブロックを「コンテンツ」ブロックに挿入した場合にのみ発生することにも注意してください。カテゴリページでこれを行っています。たとえば、product_listに挿入すると、正常に機能します。コンテンツブロックに関する問題のみ。
マーティウォレス

1

実際、パンくずリストはルートテンプレートにコールアウトがあるため、XML経由で移動できません。例えば:

        <div class="main-container col1-layout">
        <div class="main">
            <?php echo $this->getChildHtml('breadcrumbs') ?>
            <div class="col-main">
                <?php echo $this->getChildHtml('global_messages') ?>
                <?php echo $this->getChildHtml('content') ?>
            </div>
        </div>
    </div>

1
子が存在しない場合は問題ありません$this->getChildHtml()。空の文字列が返されます。
Fabian Schmengler、2015

0

ネストされた参照なしで追加してみてください:

<default>
    <reference name="root">
        <action method="unsetChild"><name>breadcrumbs</name></action>
    </reference>
    <reference name="content">
        <action method="insert"><child>breadcrumbs</child></action>
    </reference>
</default>

または:

<default>
    <reference name="root">
        <action method="unsetChild"><name>breadcrumbs</name></action>
    </reference>
    <reference name="content">
        <block type="page/html_breadcrumbs" name="breadcrumbs" as="breadcrumbs" template="page/html/breadcrumbs.phtml" />
    </reference>
</default>

次に、テンプレートファイルの「breadcrumbs」ブロックを呼び出します。


いいえ、動作に違いはありません
マーティウォレス

0

パンくずリストblcokが別の名前または別のハンドラーに設定されている可能性があるため、デフォルトで挿入しても移動しません。特定のハンドラーで定義する必要があります

<handler>
    <reference name="root">
        <action method="unsetChild"><name>breadcrumbs</name></action>
    </reference>
    <reference name="content">
        <block type="page/html_breadcrumbs" name="breadcrumbs" as="breadcrumbs" template="page/html/breadcrumbs.phtml" />
    </reference>
</handler>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.