Apakah mungkin untuk menghapus elemen dalam tata letak halaman di Magento2?


8

Ketika saya membaca dokumentasi tentang tata letak halaman ( http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html#layout-types-page ) saya melihat bahwa petunjuk berikut dalam dokumen XML ini diizinkan:

  • <container>
  • <referenceContainer>
  • <move>
  • <update>

Karena <referenceBlock name="block.name" remove="true" />bukan salah satu dari instruksi yang diizinkan bagaimana saya bisa menghapus elemen tertentu dalam tata letak halaman tertentu?

Apa yang saya inginkan untuk kategori teratas adalah desain halaman lainnya. Saya tidak membutuhkan wadah dan balok tertentu untuk desain ini. Untuk kategori ini saya hanya ingin menunjukkan kategori anak dan bukan produk.

Hal yang saya lakukan sekarang adalah, menambahkan baris berikut dalam tata letak halaman saya: (dalam design\frontend\Vendor\Name-of-theme\Magento_Theme\page_layout\catalog-blocks.xml)

<move element="category.image" destination="delete"></move>
<move element="category.description" destination="delete"></move>
<move element="category.products" destination="delete"></move>
<move element="page.main.title" destination="delete"></move>

Dalam design\frontend\Vendor\Name-of-theme\Magento_Theme\layouts.xmlI addded:

<layout id="catalog-blocks">
    <label translate="true">Catalog Blocks</label>
</layout>

Saya memberikan semua kategori utama tata letak halaman blok-katalog ini di admin.

Kemudian di tata letak utama ( design\frontend\Vendor\Name-of-theme\Magento_Theme\layout\default.xml) saya menambahkan:

<referenceBlock name="delete" remove="true" />

Jadi seluruh blok hapus akan dihapus, dengan semua hal yang saya pindahkan di sini, di tata letak halaman. Ini bekerja dengan baik! Ini benar-benar mencapai apa yang saya inginkan, tetapi bagi saya semuanya tampak seperti peretasan.

Apakah ini dianggap sebagai praktik yang baik? Jika tidak, apa yang akan menjadi alternatif yang baik?

Sunting 1 : Mengubah remove-tag dalam pertanyaan saya dengan yang tepat untuk menghindari kebingungan.

Sunting 2 : Beberapa informasi lebih lanjut tentang file dan lokasi file.

Jawaban:


12

Bagaimana dengan:

  • membuat wadah baru (bukan blok)
  • pindahkan balok Anda ke wadah
  • lepaskan wadah

Sesuatu seperti ini:

<container name="delete" htmlTag="div" htmlClass="delete"/>

<move element="category.image" destination="delete"></move>
<move element="category.description" destination="delete"></move>
<move element="category.products" destination="delete"></move>
<move element="page.main.title" destination="delete"></move>

<referenceContainer name="delete" remove="true" />

Ya, itulah yang saya lakukan. Maksud saya adalah: ini terasa aneh. Apakah ini satu-satunya solusi? Mengapa Magento tidak membangun fitur ini ke dalam page_layouts dan adakah alasan bagus untuk tidak dapat menghapus blokir?
11mb

@ 11MB sedikit berbeda dari apa yang telah Anda lakukan seperti dalam posting saya, saya membuat dan mereferensikan wadah dalam satu file tunggal (tata letak halaman xml) sedangkan dalam pertanyaan Anda menggunakan blok dan beberapa file XML. Namun itu pertanyaan yang bagus. Saya tidak yakin mengapa Magento tidak membangun fitur ini di page_layouts
Raphael di Digital Pianism

@ 11mb merasa bebas untuk membuat masalah pada repo Magento 2 GitHub untuk mengatasi masalah itu, ini jelas merupakan masalah yang menarik dan saya yakin ada alasan bagus di baliknya
Raphael di Digital Pianism

1
Saya melihat apa yang telah Anda lakukan di sini. Saya pikir ini memang pendekatan yang sedikit lebih baik. Saya akan mengujinya dan kembali ke sini.
11mb

6

Ini adalah praktik terbaik untuk menghapus blok atau wadah apa pun di magento 2. Anda dapat melewatinya name attributedalam nameelemen di bawah.

<referenceBlock name="block.name" remove="true" />

Anda dapat mencari di dalam sistem Magento 2, Anda telah menemukan banyak sintaksis tempat yang sama seperti di atas.

Rekomendasi magento-nya. Jika atribut remove = "true" lalu tambahkan elemen ke daftar hapus dari tata letak itu.

Di Magento 1 <remove> elementvalid tetapi di Magento 2 Anda harus menetapkan sintaks yang sama seperti di atas.


Terima kasih! Saya pikir saya harus mengulangi pertanyaan itu sedikit. Apakah mungkin untuk menggunakan <referenceBlock name="block.name" remove="true" />(saya salah tentang removetag) dalam tata letak halaman secara langsung karena referenceBlocktidak diperbolehkan. Saya masih harus moveelemen ke 'delete-container' dan kemudian hapus di file tata letak utama. Yang sepertinya aneh bagi saya.
11mb

ReferenceBlock digunakan ketika blok sudah didefinisikan dengan nama. selain itu tidak berguna. ex. <block class="Magento\Framework\View\Element\Html\Links" name="top.links">, dalam hal ini Anda dapat menggunakan<referenceBlock name="top.links" remove="true" />
Rakesh Jesadiya

Saya sadar bahwa blok harus ada sebelumnya. Tetapi dalam tata letak halaman saya tidak bisa menggunakan semua petunjuk tata letak umum seperti yang dijelaskan di sini: devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/… . (Saya mengedit pertanyaan saya), jadi saya tidak bisa menggunakan referenceBlock
11mb

di halaman mana Anda bekerja sekarang dan elemen mana yang ingin dihapus?
Rakesh Jesadiya

Saya menambahkan beberapa informasi dalam pertanyaan. Terima kasih atas dukunganmu!
11mb

1

Layout halaman seharusnya hanya digunakan untuk membuat bingkai gambar / struktur halaman dan bukan untuk modifikasi yang lebih kecil seperti menghapus blok.

Untuk menghapus blok hanya untuk tata letak baru Anda, saya pikir cara terbaik adalah membuat pegangan tata letak Anda sendiri dan membuat modifikasi di sana. Misalnya Anda bisa membuat catalog_category_toplevel.xml yang menggunakan bingkai gambar / tata letak baru Anda dan menghapus blok di sana.

Karena ini lebih merupakan tugas back-end saya tidak merasa cukup nyaman untuk memberikan instruksi untuk ini maaf :( Dua artikel dari Alan Storm ini dapat membantu Anda dengan ini:

TL: DR

Jika Anda ingin melakukan ini dan mengikuti praktik terbaik, Anda perlu membuat pegangan tata letak baru.

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.