Có thể xóa các thành phần trong bố cục trang trong Magento2 không?


8

Khi tôi đọc tài liệu về bố cục trang ( http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html#layout-types-page ) tôi thấy rằng các hướng dẫn sau trong tài liệu XML này được cho phép:

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

<referenceBlock name="block.name" remove="true" />không phải là một trong những hướng dẫn được phép, làm cách nào tôi có thể xóa một yếu tố nhất định trong bố cục trang cụ thể?

Những gì tôi muốn cho các danh mục hàng đầu là một thiết kế trang hoàn toàn khác. Tôi không cần một số container và khối nhất định cho thiết kế này. Đối với các danh mục này, tôi chỉ muốn hiển thị các danh mục con chứ không phải các sản phẩm.

Điều tôi đã làm bây giờ là, thêm các dòng sau trong bố cục trang của tôi: (in 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>

Trong phần design\frontend\Vendor\Name-of-theme\Magento_Theme\layouts.xmltôi đã thêm:

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

Tôi đã đưa ra tất cả các danh mục hàng đầu bố cục trang khối danh mục này trong quản trị viên.

Sau đó, trong bố cục chính ( design\frontend\Vendor\Name-of-theme\Magento_Theme\layout\default.xml) tôi đã thêm:

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

Vì vậy, toàn bộ khối xóa sẽ bị xóa, với tất cả những điều tôi đã di chuyển ở đây, trong bố cục trang. Điều này hoạt động tốt! Nó đạt được chính xác những gì tôi muốn nhưng toàn bộ điều này có vẻ với tôi một chút hackish.

Đây có được coi là một thực hành tốt? Nếu không, điều gì sẽ là một sự thay thế tốt?

Chỉnh sửa 1 : Thay đổi remove-tag trong câu hỏi của tôi với câu hỏi đúng để tránh nhầm lẫn.

Chỉnh sửa 2 : Một số thông tin khác về các tệp và vị trí tệp.

Câu trả lời:


12

Thế còn:

  • tạo một thùng chứa mới (thay vì một khối)
  • di chuyển các khối của bạn vào container
  • tháo container

Một cái gì đó như thế này:

<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" />

Vâng, đó chính xác là những gì tôi đã làm. Quan điểm của tôi là: điều này cảm thấy kỳ lạ. Đây có phải là cách giải quyết duy nhất? Tại sao Magento không xây dựng tính năng này vào page_layouts và có lý do chính đáng cho việc không thể xóa các khối?
11mb

@ 11mb hơi khác so với những gì bạn đã làm như trong bài viết của tôi Tôi đang tạo và tham chiếu một bộ chứa trong một tệp duy nhất (bố cục trang xml) trong khi trong câu hỏi của bạn, bạn đang sử dụng một khối và một số tệp XML. Tuy nhiên, đó là một câu hỏi tuyệt vời Tôi không chắc tại sao Magento không xây dựng tính năng này trong page_layouts
Raphael tại Digital Pianism

@ 11mb hãy thoải mái tạo một vấn đề trên repo Magento 2 GitHub để giải quyết vấn đề đó, đây chắc chắn là một vấn đề thú vị và tôi chắc chắn có một lý do chính đáng đằng sau nó
Raphael tại Digital Pianism 4/5/2016

1
Tôi thấy những gì bạn đã làm ở đây. Tôi nghĩ rằng đó là một cách tiếp cận tốt hơn một chút thực sự. Tôi sẽ kiểm tra nó và trở lại đây.
11mb

6

Đây là cách thực hành tốt nhất để loại bỏ bất kỳ khối hoặc thùng chứa nào trong magento 2. Bạn có thể chuyển name attributevào bên nametrong phần tử bên dưới.

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

Bạn có thể tìm kiếm bên trong hệ thống magento 2, bạn đã tìm thấy nhiều cú pháp địa điểm giống như trên.

Cách giới thiệu magento của nó. Nếu thuộc tính remove = "true" thì thêm phần tử vào danh sách remove từ bố cục đó.

Trong magento 1 <remove> elementlà hợp lệ nhưng trong Magento 2 bạn phải đặt cú pháp giống như trên.


Cám ơn! Tôi nghĩ rằng tôi phải viết lại câu hỏi một chút. Có thể sử dụng <referenceBlock name="block.name" remove="true" />(tôi đã sai về removethẻ) trong bố cục trang trực tiếp vì referenceBlockkhông được phép. Tôi vẫn nên movemột phần tử cho một 'vùng chứa xóa' và sau đó xóa nó trong tệp bố cục chính. Mà có vẻ xa lạ với tôi.
11mb

ReferenceBlock được sử dụng khi khối đã được xác định bằng tên. mặt khác nó không hữu ích Ví dụ. <block class="Magento\Framework\View\Element\Html\Links" name="top.links">, trong trường hợp này bạn có thể sử dụng<referenceBlock name="top.links" remove="true" />
Rakesh Jesadiya

Tôi biết rằng khối nên tồn tại trước. Nhưng trong bố cục trang, tôi không thể sử dụng tất cả các hướng dẫn bố cục chung như được mô tả ở đây: devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/ trên . (Tôi đã chỉnh sửa câu hỏi của mình), vì vậy tôi không thể sử dụng tài liệu tham
khảoBlock

Hiện tại bạn đang làm việc ở trang nào và yếu tố nào sẽ được xóa?
Rakesh Jesadiya

Tôi đã thêm một số thông tin trong câu hỏi. Cảm ơn sự hỗ trợ của bạn!
11mb

1

Bố cục trang chỉ được cho là được sử dụng để tạo cấu trúc khung / cấu trúc của trang chứ không phải cho các sửa đổi nhỏ hơn như xóa các khối.

Để xóa một khối chỉ cho bố cục mới của bạn, tôi nghĩ cách tốt nhất là tạo tay cầm bố cục của riêng bạn và thực hiện các sửa đổi trong đó. Ví dụ: bạn có thể tạo catalog_carget_toplevel.xml sử dụng khung dây / bố cục mới của bạn và xóa các khối trong đó.

Vì đây là một nhiệm vụ phụ trợ, tôi không cảm thấy đủ thoải mái để cung cấp hướng dẫn cho việc xin lỗi này :( Hai bài viết này của Alan Storm có thể giúp bạn điều này:

TL: DR

Nếu bạn muốn làm điều này và làm theo thực tiễn tốt nhất, bạn cần tạo một tay cầm bố cục mới.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.