Magento 2 - tên khối vs tên


10

Tôi đã thực hiện một số công việc trong Magento 2 và đã ghi đè lên một số mô-đun tôi đã cài đặt (trên lối vào).

Tuy nhiên hôm nay tôi vừa bắt gặp một thứ mà tôi chưa từng gặp trước đây. Mô-đun tôi đang sử dụng có một khối bên trong nó có các phần sau:

<referenceBlock name="product.info.details">
    <block class="Vender\Module\Block\Catalog\Related" name="posts.tab" as="blog.posts"
               template="Vender_Module::catalog/posts.phtml" group="detailed_info">
    </block>
</referenceBlock>

Nó đặt tên của nó:

bài viết.tab

và sau đó sử dụng như để cho phép nó được gọi thông qua:

as = "blog.posts"

Khi tôi cố gắng tham chiếu khối bị xóa bằng tên như tôi nhận thấy rằng nó không xóa nó khỏi trang:

<referenceBlock name="product.info.details">
    <referenceBlock as="blog.posts" remove="true"/>
</referenceBlock>

vì vậy tôi đã đi xem những gì trang thực sự được gọi ở frontend (chỉ cần nó được đổi tên ở một nơi khác hoặc không sử dụng tên tests.tab) - tên khối đang được gọi với post.tab , điều này rất tốt như tôi chỉ có thể tham khảo khối đó để loại bỏ nó. Điều đó đã làm việc tốt.

Nhưng câu hỏi của tôi là, tại sao không phải là khối bị kéo qua sử dụng như và thay vào đó bị kéo qua sử dụng tên .

Thứ hai điểm trong là những gì như , bởi vì rõ ràng là khối không thể có tên mâu thuẫn nào và phải là duy nhất - nhưng tôi có thể là hoàn toàn sai.

Câu trả lời:


2

Trong trường hợp này, có vẻ như thuộc tính as là vô dụng (trừ khi nó được sử dụng ở nơi khác), tôi không nghĩ nó tạo ra sự khác biệt nếu nó được gọi thông qua tên hoặc bí danh để nhà phát triển lựa chọn sử dụng cái gì - chỉ cần lưu ý rằng nếu bí danh được đặt, bạn sẽ cần sử dụng nó khi gọi getChildHtml .

Cá nhân tôi sẽ chỉ sử dụng bí danh để rút ngắn tên khối dài và / hoặc để dễ đọc khi hiển thị thông qua mẫu. Ví dụ: nếu checkout.header.logo.textcần được sử dụng như logo.textheader.logo.textđã được sử dụng, thì bạn có thể sử dụng bí danh logoTexttrên tất cả các khối. Điều này sẽ không ảnh hưởng đến kết xuất của các khối khác bằng cách sử dụng cùng một bí danh trừ khi chúng được đặt trong cùng một điều khiển bố cục và tham chiếu.

TL: DR Nó không tạo ra nhiều sự khác biệt, đó là nhiều hơn cho việc đọc / rút ngắn tên.

Ghi chú

Câu hỏi M1 này có thêm một chút thông tin về - Khi nào nên sử dụng 'tên' và khi nào nên sử dụng 'as'

Tôi không chắc điều này có áp dụng cho M2 hay không nhưng trong M1 có ít nhất một đối số được gọi là aliassử dụng asthuộc tính, tôi nghĩ rằng nó có liên quan đến việc chèn hoặc bỏ đặt khối.

Theo Fabian Schmengler: "Nếu khối được tạo mà không xác định bí danh, bí danh sẽ mặc định tên." Đó là đề cập đến M1 nhưng tôi cho rằng điều tương tự áp dụng cho M2.


Ngay bây giờ vào ngày 2.3.1, tôi không thể lấy getChildHtml theo tên vì khối có bí danh "là". Chỉ sau khi xóa bí danh, tôi mới có thể có được khối trong một mẫu.
TheKitMurkit

Điểm hay @TheKitMurkit - Tôi đã thêm một chút vào câu trả lời của mình rằng "nếu đặt bí danh, bạn sẽ cần sử dụng nó khi gọi getChildHtml.". Cảm ơn.
Ben Crook
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.