Який правильний спосіб / підхід до зміни шаблону Magento?


15

Підкажіть, будь ласка, правильний підхід, я хочу налаштувати сторінку "EMAIL to Friend" у спливаюче вікно, коли користувач натискає кнопку (надіслати цей товар електронною поштою). Увімкнувши натяк на шаблон, я з’ясував, що кнопка надається за допомогою

frontend / rwd / за замовчуванням / шаблон / каталог / продукт / view / sharing.phtml

І відповідний файл макета є catalog.xml(у frontend / rwd / default / layout)

Тож я створив local.xmlу тій самій папці, де catalog.xmlіснують із наступним кодом (просто що я дав test.phtmlзамість sharing.phtml, просто для "Налагодження")

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>

        <catalog-product-view>
            <reference name="content">
                <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
                    <block type="catalog/product_view" name="product.info.sharing" as="sharing" template="catalog/product/view/test.phtml"/>
                </block>
            </reference>
        </catalog-product-view>

    </default>
</layout>

Але нічого не відбувається, я маю на увазі, як я можу змінити (перезаписати) дизайн за замовчуванням теми, не змінюючи існуючі xmlта phtmlфайли?

Відповіді:


10

Це те, що ви повинні помістити всередину свого local.xmlфайлу.

<?xml version="1.0"?>
<layout version="0.1.0">
    <catalog_product_view>
        <reference name="product.info.sharing">
            <action method="setTemplate">
                <template>catalog/product/view/test.phtml</template>
            </action>
        </reference>
    </catalog_product_view>
</layout>

Помилки, які ви зробили

  • Ви використовували дві ручки оновлення макета : defaultі catalog-product-view. Це неправильно. Вам потрібна лише одна ручка оновлення макета. Тут вам слід скористатись правильнимcatalog_product_view

  • Так catalog-product-viewневідомо для магенто. Власна назва -catalog_product_view

  • Оскільки блок обміну вже визначений через catalog.xml, тепер потрібно посилатися на цей блок, а потім змінювати шаблон, додаючи дії setTemplate. Ось що робить вищезазначений сценарій.

Сподіваюсь, ви зрозуміли ідею


Я використовував ваш local.xml, все ще його відображає існуючий (я створив test.phtml) у зазначеній папці
Dimag Kharab

ви очистили кеш? це має спрацювати, якщо ви все зробили правильно.
Rajeev K Tomy

yup кешування вимкнено в моєму випадку, і я також
повторно застосував

додайте це <reference name="content"><block type="core/template" name="test.block" template="catalog/product/view/test.phtml" /></reference>безпосередньо під вузлом <catalog_product_view>. і подивіться, чи доступний вміст файлу test.phtml у нижній частині сторінки продукту
Rajeev K Tomy,

Не пощастило
братові

10

Спробую дати загальну відповідь.

Як змінити шаблони

У вашій темі ви можете замінити будь-які phtmlфайли з теми за замовчуванням або з батьківської теми. Скопіюйте оригінальний файл app/design/frontend/[package]/[theme]/template/[path/to/phtml]і внесіть зміни.

Якщо у вас ще немає спеціальної спеціальної теми для проекту, наприклад, тому що ви щойно купили тему, не забудьте створити її

app/design/frontend/[original-package]/[project-name]

Він успадковуватиметься від [original-package]/[default]вас, вам не потрібно копіювати все за замовчуванням, лише файли, куди потрібно внести зміни.

Модульні конкретні зміни

Альтернативою перезапис phtmlфайлу є зміна контуру шаблону. Зазвичай це можна зробити в макеті XML таким чином:

<reference name="the-block-name">
    <action method="setTemplate"><name>path/to/new/template.phtml</name></action>
</reference>

Але це призначене для використання модулями, яким потрібно перемикати шаблон, а не для змін, що стосуються конкретної теми. Новий шаблон повинен бути вже base/defaultтоді.

Як користуватися local.xml / theme.xml

local.xmlФайл повинен знаходитися в каталозі актуальної теми , яку ви використовуєте, тобто

app/design/frontend/[package]/[theme]/layout

Кілька local.xmlфайлів у резервній ієрархії не враховуються. Перший з них, який можна знайти, використовується:

app/design/frontend/[package]/[theme]/layout/local.xml
app/design/frontend/[package]/default/layout/local.xml
app/design/frontend/base/default/layout/local.xml

(якщо припустити ієрархію за замовчуванням і не встановлену спеціально встановлену ієрархію)

Як внести зміни

Ви повинні мати лише модифікації у local.xml, а не повторювати визначення, які вже є у вихідних XML-файлах. Це також означає, уникайте копіювання файлів XML з теми за замовчуванням, щоб вносити зміни безпосередньо у файли. Зберігайте layoutкаталог вашої теми в чистоті!

Типовими елементами програми local.xmlє <remove>видалення існуючих блоків повністю <action method="unsetChild">і <action method="append">переміщення блоку від одного з батьків до іншого або виклик будь-яких інших методів на існуючих блоках для зміни їх поведінки.

Magento 1.9

Починаючи з Magento 1.9, найкраща практика насправді не використовувати layout/local.xmlдля цих змін, алеetc/theme.xml

Якщо коротко, ви можете додати оновлення макета в додаток / дизайн / frontend / yourpackage / etc / theme.xml. Перевага полягає в тому, що ви контролюєте порядок завантаження оновлень вашого макета. До Magento 1.9 local.xml завжди завантажувався останнім, і після нього не можна було виконувати директиви компонування.

Я більше не використовую local.xml для модифікації тем, що стосуються проекту. Я думаю, що local.xml використовується просто з міркувань відсталої сумісності (у 1.9 і вище), оскільки використовувати це вже немає сенсу. Local.xml також видаляється в Magento 2 ( https://github.com/magento/magento2/isissue/1037 ).

Джерело: https://erfanimani.com/dont-use-local-xml/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.