Переопределение макета Magento! - PullRequest
10 голосов
/ 29 мая 2010

Я новичок в Magento, так что прости меня за мой глупый вопрос! Как я понимаю, вся концепция Magento основана на переопределении базовых компонентов, доступных в Magento.

Итак, исходя из моего понимания, я решил обновить макет оформления одностраничной проверки в Magento. Я создал свой собственный макет и в наборе конфигурационных файлов обновил макет модуля оформления заказа. Но проблема в том, что он на самом деле не обновляет базовый макет, он заменяет его самостоятельно базовым макетом! Это должно быть так или я ошибаюсь?

Ответы [ 2 ]

19 голосов
/ 01 июня 2010

Фактически, узел в вашем файле config.xml не выполняет "обновление". На самом деле, я думаю, что вы сделали это в своем config.xml:

<config>
    <frontend>
        <layout>
             <updates>
                  <checkout>
                        <file>mylayout.xml</file>
                  </checkout>
             </updates>
        </layout>
    </frontend>
</config>

, и вы сделали свои изменения в mylayout.xml.

На самом деле, вы должны сделать:

<config>
    <frontend>
        <layout>
             <updates>
                  <mymodule>
                        <file>mylayout.xml</file>
                  </mymodule>
             </updates>
        </layout>
    </frontend>
</config>

А затем в mylayout.xml:

<checkout_cart_index> <!-- this corresponds to the section where you want to add your block (or modify an existing block -->
       <reference name="content">
            <reference name="checkout.cart">
                <block type="mymodule/myblock" name="checkout.mymodule.myblock"></block>
            </reference>
        </reference>
</checkout_cart_index>

Глядя на мой код и сравнивая файлы друг с другом, вы лучше поймете, как он работает.

На самом деле, не забывайте, что все xml-файлы объединяются в magento. Таким образом, все узлы во всех конфигурационных файлах, соблюдая один и тот же порядок, будут объединены.

Например, в нашем случае файлы config.xml magento будут объединены, и в результате получится ОДИН файл, содержащий:

<config>
<!-- some nodes... -->
<!-- some nodes... -->
<!-- some nodes... -->
    <frontend>
        <layout>
             <updates>
                  <mymodule>
                        <file>mylayout.xml</file>
                  </mymodule>
                  <checkout> <!-- this is the node from the config.xml of the Checkout Module-->
                        <file>checkout.xml</file>
                  </checkout>
                  <!-- some layout updates nodes from other config files... -->
             </updates>
        </layout>
    </frontend>
<!-- some nodes... -->
<!-- some nodes... -->
</config>

Если бы вы заменили <mymodule> на <checkout>, результирующий файл выглядел бы так:

<config>
<!-- some nodes... -->
<!-- some nodes... -->
<!-- some nodes... -->
    <frontend>
        <layout>
             <updates>
                  <checkout>
                        <file>mylayout.xml</file>
                  </checkout>
                  <!-- some layout updates nodes from other config files... -->
             </updates>
        </layout>
    </frontend>
<!-- some nodes... -->
<!-- some nodes... -->
</config>

Обратите внимание на mylayout.xml. По этой причине исходный файл макета полностью заменен вашим собственным макетом:)

Надеюсь, это понятно, на французском мне было бы легче объяснить;)

Хьюг.

1 голос
/ 29 мая 2010

Я думаю, это зависит от того, как вы назовете свой макет. Если вы назвали его checkout.xml, я думаю, он заменит себя на базовый макет. Если вы выберете другое имя, я думаю, оно должно переопределять только те части, которые вы указали. РЕДАКТИРОВАТЬ: не забудьте очистить кэш. И, кстати, как вы знаете, XML-файл на самом деле заменен? Лучший способ узнать это - проверить кэш после его регенерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...