Magento 2 - ім'я блоку vs як ім'я


10

Я виконував деяку роботу в Magento 2 і перезаписав деякі встановлені нами модулі (на передній панелі).

Однак сьогодні я просто натрапив на те, що раніше не стикався. Модуль, який я використовував, містить всередині нього блок, який має наступне:

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

Він встановлює свою назву:

posts.tab

а потім використовує як, щоб дозволити його викликати через:

as = "blog.posts"

Коли я намагався посилатись на блок, який потрібно видалити, використовуючи як ім'я, я помітив, що він не видаляє його зі сторінки:

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

тому я пішов подивитися, що насправді викликає сторінка на передній панелі (просто в тому випадку, коли вона перейменована десь інше або не використовує ім'я posts.tab) - ім'я блоку викликається у posts.tab , що добре тому що я можу просто посилатися на цей блок, щоб видалити його. Це добре працювало.

Але моє запитання полягає в тому, чому блок не витягується за допомогою як і замість цього витягується за допомогою імені .

По- друге , який сенс в якості , тому що , очевидно , блоки не можуть мати конфліктуючі імена в будь-якому випадку і повинен бути унікальним - але я міг би бути зовсім неправильно.

Відповіді:


2

У цьому випадку здається, що атрибут as є марним (якщо він не використовується в іншому місці), я не думаю, що це має значення, якщо він викликається через ім'я або псевдонім, тому розробник повинен вибрати, що використовувати - просто зауважте, що якщо встановлено псевдонім, вам потрібно буде використовувати це під час дзвінка getChildHtml.

Особисто я буду використовувати лише псевдонім, щоб скоротити довге ім'я блоку та / або зробити його легким для читання під час візуалізації через шаблон. Наприклад, якщо checkout.header.logo.textпотрібно використовувати як logo.textі header.logo.textвже використовуються, ви можете використовувати псевдонім logoTextна всіх блоках. Це не вплине на візуалізацію інших блоків, використовуючи той самий псевдонім, якщо вони не встановлені в одній ручці макета та довідці.

TL: DR Це не має великого значення, це більше для читання / скорочення імен.

Примітки

У цьому питанні M1 є трохи більше інформації - Коли використовувати "ім'я" та коли використовувати "як"

Я не впевнений, чи це стосується M2, але в M1 був принаймні один аргумент, aliasякий називався asатрибутом, я думаю, що це було пов'язано із вставкою чи скасуванням блоків.

За словами Фабіана Шменглера: "Якщо блок був створений без визначення псевдоніма, псевдонім за замовчуванням відповідає імені". Це стосується М1, але я припускаю, що те саме стосується і М2.


Тільки зараз на 2.3.1 я не міг отриматиChildHtml за назвою, оскільки у блоку був псевдонім "as". Лише після видалення псевдоніма я міг отримати блок у шаблоні.
TheKitMurkit

Хороший момент @TheKitMurkit - я додав трохи до своєї відповіді, в якій сказано, "якщо встановлений псевдонім, вам потрібно буде використовувати це під час виклику getChildHtml." Дякую.
Бен Крук
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.