Saya mencoba mengubah urutan tab pada halaman produk di Magento 2. Default-nya adalah Details|More Information|Reviews
.
Saya mencoba:
Penjual / tema / Magento_Catalog / tata letak / catalog_product_view.xml
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<move element="product.info.description" destination="product.info.details" after="-" />
</body>
</page>
Tapi itu tidak berhasil, dan itulah cara yang disarankan untuk memindahkan elemen. Saya dapat memindahkan tab keluar dari area tab dan ke area lain, serta menambahkan tab baru, tetapi saya tidak dapat mengontrol urutan tab.
Dugaan saya adalah bahwa itu ada hubungannya dengan group="detailed_info"
; Sepertinya Magento mengambil elemen tata letak dengan atribut ini di XML dan melewatinya untuk membuat tab.
Apakah ada cara untuk mengubah urutan tab tanpa menulis ulang modul?
Jawaban:
Pendekatan saya sedikit berbeda tetapi mungkin lebih banyak bukti di masa depan, jika menambahkan tab baru di kemudian hari dan mengubah prioritas / urutan tab ini.
Saya memberikan argumen untuk setiap tab melalui File XML di file XML tema saya
Jadi file XML tema saya terlihat seperti ini:
Lebih jauh lagi kita harus menyesuaikan
details.phtml
, jadi salin dariuntuk
Harap diingat bahwa Magento sendiri
details.phtml
dapat diubah di versi atau tambalan Magento yang akan datang. Perubahan ini juga harus diterapkan pada tema Andadetails.phtml
Kita sekarang perlu mendapatkan prioritas yang kami sampaikan melalui file XML.
Jadi Anda lihat: Anda hanya perlu menambahkan beberapa baris dan selalu dapat mengubah prioritas / urutan tab melalui file xml, Anda tidak perlu mengubah
details.phtml
di masa depan lagi.sumber
Untuk Ubah posisi Tabbing di halaman detail, Menggunakan file konfigurasi XML setelah atau sebelum atribut tidak membantu dalam kasus ini.
Anda harus mengubah dari file templat.
Salin file details.phtml dari inti ke tema Anda,
Di dalam file ini, Anda dapat mengambil semua nama tab menggunakan, print_r ($ DetailedInfoGroup) Anda harus mendapatkan nilai seperti,
Anda harus mengatur sesuai dengan kebutuhan Anda dalam array baru sebelum foreach dalam file,
tambahkan
<?php foreach ($newOrderTab as $name):?>
,Kode lengkap di details.phtml seperti di bawah ini,
sumber
Di Magento 2.3.1 atau Di Atas, kita bisa menggunakan
sort_order
argumen di "app/design/frontend/Packagename/themename/Magento_Catalog/layout/catalog_product_view.xml
" konfigurasi xmlPastikan juga untuk memperbarui metode "
getGroupChildNames
" dengan "getGroupSortedChildNames
" dalam file templat ( Jika Anda menimpanya ) "app/design/frontend/Packagename/themename/Magento_Catalog/templates/product/view/details.phtml
".Metode lama
Metode yang Diperbarui
Jika Anda mengganti
Magento\Catalog\Block\Product\View\Details.php
kelas blok maka kelas blok Anda harus memiliki metode yang "getGroupSortedChildNames
" diperbarui juga.sumber
Cara lain menggunakan argumen urutan sortir.
Jalur File -
app\design\frontend\<companyNAme>\<ThemeName>\Magento_Catalog\layout\catalog_product_view.xml
Tambahkan argumen urutan pengurutan di dalam wadah blok referensi product.info.detail.
Kode contoh
Ubah nilai argumen urutan sortir menjadi 10, 20, 30 sesuai pesanan Anda.
sumber
sort_order
penting bagi saya, +1 membuat hari saya :)Saya tahu bahwa ada jawaban lain untuk pertanyaan ini, tetapi semuanya terlalu invasif untuk selera saya. Melihat masalah ini, Magento menambahkan atribut "grup" terpisah ke sebuah elemen dan menambahkan anak-anak ke atribut itu dalam urutan yang dimuat dalam tata letak, benar-benar terpisah dari array anak-anak yang berisi array elemen yang diurutkan. Untuk memperbaikinya, saya menulis sebuah plugin sederhana yang memperbaiki penyortiran ketika mengambil anak-anak kelompok:
Ini sekarang akan memungkinkan Anda untuk memesan tab menggunakan standar
before
danafter
atribut dalam tata letak XML seperti yang Anda harapkan, dan mungkin tidak perlu dimodifikasi pada tambalan Magento masa depan.sumber
Saya pikir Anda hanya perlu menambahkannya sesuai urutan pilihan Anda. Bagi saya, saya menggunakan 4 tab dalam urutan ini:
Dalam modul khusus saya, saya membuat file tata letak ini: catalog_product_view.xml dengan konten ini:
Anda dapat melihat bahwa saya telah menambahkan hanya 3 tab karena rincian tab sudah ada. Sebagai hasilnya, saya telah mendapatkan tab dalam urutan ini:
Yang bukan itu yang saya inginkan, sekarang solusi saya adalah menambahkan juga tab Details lagi, jadi file layout saya akan seperti ini:
Sekarang saya memiliki pesanan yang saya inginkan :)
sumber
Cara termudah dan terbaik menurut saya adalah solusi LordZardeck dengan sebuah plugin. Setelah memperbarui vendor / module / etc / frontend / di.xml
semuanya bekerja seperti yang diinginkan.
Terima kasih @LordZardeck untuk kode bersihnya!
sumber
Inilah solusi yang saya gunakan. Ini akan menukar tab uraian dan atribut jika keduanya tersedia. Ini menggunakan tema Ultimo. Tapi Anda akan mengerti intinya. CIUMAN.
sumber
Solusi saya untuk masalah ini adalah dengan memodifikasi templat details.phtml sehingga mendapatkan blok anak-anak dari tata letak.
$blocks = $layout->getChildBlocks($block->getNameInLayout());
Dengan melakukannya dengan cara ini, ia menghormati perintah yang diberikan oleh pengubah setelah dan sebelum .
Saya masih menggunakan array yang disediakan oleh getGroupChildNames untuk memvalidasi jika blok milik grup.
if(in_array($child_block->getNameInLayout(),$detailedInfoGroup))
sumber
Saya tidak ingin mengerjakan tema, saya ingin memodifikasi perilaku metode 'getGroupChildNames'. Pendekatan ini harus bekerja bahkan jika templat dimodifikasi.
Saya menambahkan ini ke catalog_product_view.xml:
Lalu, buat blok untuk mengubah perilaku 'getGroupChildNames':
Itu saja.
sumber
LordZardeck memiliki jawaban terbaik, tetapi ini pada dasarnya adalah bug dan harus diperbaiki pada intinya.
Solusi paling sederhana untuk masalah yang saya temukan adalah sebagai berikut: Override the Magento_Catalog :: product / view / details.phtml template dan setelah kondisi php pertama pada baris 10:
tambahkan kode berikut untuk mengubah urutan:
ini akan mengubah urutan dan mendorong semua tab yang terdaftar dalam $ _tergantung pada awal array dalam urutan yang ditentukan.
sumber
Sepertinya semua hal di atas sudah tidak relevan lagi. Pada Magento 2.3.1 kita bisa menggunakan
sort_order
argumen dalam konfigurasi xml.sumber
Plugin adalah solusi yang bagus. Tetapi Anda masih bisa meningkatkannya. Anda tidak ingin menulis plugin yang berbeda setiap kali Anda perlu mengatur ulang tab. Yang ingin Anda lakukan adalah mengatur urutan dalam xml. Seperti ini:
dan kemudian, alih-alih memodifikasi templat, buat sebuah plugin yang akan membuat Magento memahami
priority
argumen yang digunakan dalam konfigurasi xml:Dan akhirnya plugin harus diterapkan ke
Magento\Catalog\Block\Product\View\Description
kelas dalam file di.xml.sumber
Untuk Magento 2 ubah urutan tab pada halaman produk.
Anda dapat dengan mudah menyesuaikan urutan tab dengan cara sederhana.
Jika file details.phtml sudah ada maka perbarui.
Kode asli:
Setelah menambahkan kode:
Dan tambahkan tab kustom di halaman produk, periksa tautan ini
Magento 2 - Buat tab produk yang menampilkan atribut khusus
sumber