Переместить блок хлебных крошек чисто через local.xml


Я хочу переместить блок хлебных крошек чисто с помощью 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>
 7
Author: user487772, 2013-05-10

4 answers

Это хорошее упражнение - хороший шанс научиться. Поскольку перемещение XML-файла макета в Magento 1 на самом деле является составной операцией (отсоединение от исходного родителя, добавление к новому родителю), отладка требует проверки обоих условий.

insert, очевидно, работает, так как вы видите блок панировочных сухарей дважды. Это означает, что вызов unsetChild не работает. Это почти всегда является результатом одной из двух вещей: неправильного псевдонима ребенка или неправильной ссылки на родителя. В в вашем случае это последнее. Это результат пользовательской (не CE) темы; например, тема предприятие/по умолчанию объявляет блок хлебные крошки в блоке core/text_list с именем хлебные крошки.контейнер.

Кроме того, ссылочные теги не должны быть вложенными. Они будут работать при вложенности, но, учитывая, что они работают с глобальным списком блокировок по имени, в этом нет необходимости.

 8
Author: benmarks, 2013-05-11 01:38:11

На самом деле панировочные сухари нельзя перемещать с помощью 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
Author: ravbetsky, 2015-07-08 21:21:52

Попробуйте просто добавить его без вложенных ссылок:

<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>

Затем вызовите блок "хлебные крошки" в файле шаблона.

 0
Author: zitix, 2013-05-11 20:51:15

Может быть, для 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>
 0
Author: mani, 2015-04-28 16:42:25