Добавление мини -телеги в заголовок не отображается

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

  •  16-10-2019
  •  | 
  •  

Вопрос

В настоящее время я пытаюсь добавить корзину боковой панели в заголовок веб -сайта, над которым я работаю, однако, похоже, она не работает. Вот мои файлы:

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 -тег на каждой странице.

Обратите внимание, что страницы Frontend и Admin имеют отдельные файлы макета, поэтому <default> Тег применяется только к фронтальному или администральному, или в зависимости от того, в какой файл макета он был помещен.

Я очень рекомендую вам создать свой собственный local.xml Файл макета (или если вы создаете расширение, определите свой собственный файл макета в его config.xml) С использованием local.xml Это гораздо более чистый способ управления макетами - вы оставляете файлы макетов по умолчанию нетронутыми и управляете всеми изменениями макета, используя ручки через один файл. Если 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top