Apa cara / pendekatan yang benar untuk memodifikasi template Magento?


15

Tolong sarankan saya pendekatan yang tepat, saya ingin menyesuaikan halaman "EMAIL to Friend" ke jendela pop up, ketika pengguna mengklik tombol (email produk ini). Dengan mengaktifkan petunjuk templat, saya mengetahui bahwa tombol di-render

frontend / rwd / default / template / katalog / produk / view / sharing.phtml

Dan file layout yang sesuai adalah catalog.xml(di frontend / rwd / default / layout)

Jadi saya membuat local.xmldi folder yang sama di mana catalog.xmlada dengan kode berikut (hanya yang saya berikan test.phtmlbukan sharing.phtml, hanya untuk 'Debug')

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

Tapi tidak ada yang terjadi, maksud saya bagaimana saya dapat mengubah (menimpa) desain tema default, tanpa memodifikasi file yang ada xmldan phtml?

Jawaban:


10

Inilah yang harus Anda masukkan ke dalam local.xmlfile Anda .

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

Kesalahan yang telah Anda lakukan

  • Anda menggunakan dua pegangan pembaruan tata letak : defaultdan catalog-product-view. Itu salah. Anda hanya perlu satu pegangan pembaruan tata letak. Yang benar yang harus Anda gunakan di sini adalahcatalog_product_view

  • Jadi catalog-product-viewtidak diketahui untuk magento. Nama yang tepat adalahcatalog_product_view

  • Karena blok berbagi sudah ditentukan melalui catalog.xml, sekarang Anda perlu merujuk blok itu dan kemudian mengubah template dengan menambahkan tindakan setTemplate. Itulah yang dilakukan oleh naskah di atas.

Semoga Anda mendapatkan idenya


Saya menggunakan local.xml Anda, masih muncul yang ada (saya telah membuat test.phtml) di folder yang ditentukan
Dimag Kharab

apakah Anda menghapus cache? ini seharusnya bekerja, jika Anda telah melakukan semuanya dengan benar.
Rajeev K Tomy

caching yup dinonaktifkan dalam kasus saya dan saya telah mengindeks ulang juga (saya kira itu tidak diperlukan)
Dimag Kharab

tambahkan ini <reference name="content"><block type="core/template" name="test.block" template="catalog/product/view/test.phtml" /></reference>langsung di bawah simpul <catalog_product_view>. dan lihat apakah konten file test.phtml tersedia di bagian bawah halaman tampilan produk
Rajeev K Tomy

Masih tidak beruntung bro
Dimag Kharab

10

Saya akan mencoba memberikan jawaban umum.

Cara mengganti template

Dalam tema Anda, Anda dapat mengganti phtmlfile apa pun dari tema default atau tema induk. Salin file asli ke app/design/frontend/[package]/[theme]/template/[path/to/phtml]dan buat perubahan Anda.

Jika Anda belum memiliki tema khusus untuk proyek tertentu, misalnya karena Anda baru saja membeli tema, pastikan untuk membuatnya

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

Ini akan mewarisi dari [original-package]/[default], Anda tidak perlu menyalin semuanya dari default, hanya file di mana Anda perlu melakukan perubahan.

Perubahan spesifik modul

Alternatif untuk mengganti phtmlfile, adalah mengubah jalur templat. Ini biasanya dapat dilakukan dalam tata letak XML seperti ini:

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

Tetapi ini dimaksudkan untuk digunakan oleh modul yang perlu mengganti templat, bukan untuk perubahan spesifik tema. Templat baru harus di base/defaultkemudian.

Cara menggunakan local.xml / theme.xml

The local.xmlfile harus di direktori tema aktual yang Anda gunakan, yaitu

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

Beberapa local.xmlfile dalam hierarki fallback tidak diperhitungkan. Yang pertama dari ini dapat ditemukan, digunakan:

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

(dengan asumsi hierarki default dan tidak ada hierarki yang ditentukan khusus)

Cara melakukan perubahan

Anda hanya boleh memiliki modifikasi di local.xml, jangan ulangi definisi yang sudah ada dalam file XML asli. Itu juga berarti, hindari menyalin file XML dari tema default untuk membuat perubahan langsung di file. Jaga layoutdirektori tema Anda tetap bersih!

Elemen khas dari local.xmladalah <remove>untuk menghapus blok yang ada seluruhnya, <action method="unsetChild">dan <action method="append">untuk memindahkan blok dari satu induk ke induk lainnya, atau memanggil metode lain pada blok yang ada untuk memodifikasi perilaku mereka.

Magento 1.9

Dimulai dengan Magento 1.9, praktik terbaik sebenarnya adalah tidak menggunakan layout/local.xmluntuk perubahan ini, tetapietc/theme.xml

Singkatnya, Anda dapat menambahkan pembaruan tata letak di app / design / frontend / yourpackage / etc / theme.xml. Keuntungannya adalah Anda memiliki kendali atas urutan pemuatan pembaruan tata letak Anda. Sebelum Magento 1.9 local.xml selalu dimuat terakhir, dan direktif tata letak tidak mungkin dijalankan setelahnya.

Saya tidak menggunakan local.xml lagi untuk modifikasi tema spesifik proyek. Saya pikir local.xml hanya digunakan untuk alasan kompatibilitas ke belakang (pada 1.9 dan di atas) karena tidak ada gunanya menggunakannya lagi. Local.xml juga dihilangkan di Magento 2 ( https://github.com/magento/magento2/issues/1037 ).

Sumber: https://erfanimani.com/dont-use-local-xml/

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.