Magento 2 - nazwa bloku vs jako nazwa

10

Robiłem trochę pracy w Magento 2 i zastępowałem niektóre moduły, które zainstalowałem (na froncie).

Dzisiaj jednak natknąłem się na coś, czego wcześniej nie spotkałem. Moduł, którego używałem, zawiera blok, który ma następujące elementy:

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

Ustawia swoją nazwę:

posts.tab

a następnie używa as, aby umożliwić wywołanie za pomocą:

as = "blog.posts"

Kiedy próbowałem odwołać się do bloku, który ma zostać usunięty, używając nazwy as , zauważyłem, że nie usuwa on go ze strony:

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

więc poszedłem zobaczyć, co strona faktycznie wywołała w interfejsie (wystarczy, że została przemianowana gdzie indziej lub nie używała nazwy posts.tab) - nazwa bloku jest wywoływana przez posts.tab , co jest w porządku ponieważ mogę po prostu odwołać się do tego bloku, aby go usunąć. To działało dobrze.

Ale moje pytanie brzmi: dlaczego blok nie jest przeciągany za pomocą as i zamiast tego jest przeciągany za pomocą nazwy .

Po drugie jaki jest sens w jak , bo oczywiście bloki nie mogą mieć sprzeczne nazwy i tak powinno być unikalne - ale może być całkowicie błędne.

Andy Jones
źródło

Odpowiedzi:

2

W tym przypadku wydaje się, że atrybut as jest bezużyteczny (chyba że jest używany gdzie indziej), nie sądzę, że ma to znaczenie, jeśli jest wywoływany przez nazwę lub alias, więc to programista może wybrać, czego użyć - pamiętaj, że jeśli ustawiony jest alias, będziesz musiał go użyć podczas połączenia getChildHtml.

Osobiście użyję aliasu tylko do skrócenia długiej nazwy bloku i / lub w celu ułatwienia jej odczytu podczas renderowania za pomocą szablonu. Na przykład, jeśli checkout.header.logo.textmusi być używany jako logo.texti header.logo.textjest już używany, możesz użyć aliasu logoTextna wszystkich blokach. Nie wpłynie to na renderowanie innych bloków przy użyciu tego samego aliasu, chyba że są ustawione w tym samym uchwycie układu i odnośniku.

TL: DR Nie robi to żadnej różnicy, chodzi bardziej o czytelność / skracanie nazw.

Notatki

To pytanie do M1 zawiera nieco więcej informacji na temat - Kiedy używać „nazwy”, a kiedy „jako”

Nie jestem pewien, czy dotyczy to M2, ale w M1 był wywoływany aliasco najmniej jeden argument, który używał asatrybutu, myślę, że był on związany z wstawianiem lub cofaniem bloków.

Według Fabiana Schmenglera: „Jeśli blok został utworzony bez zdefiniowania aliasu, domyślnym aliasem jest nazwa”. Odnosi się to do M1, ale zakładam, że to samo dotyczy M2.

Ben Crook
źródło
Właśnie w 2.3.1 nie mogłem pobraćChildHtml z nazwy, ponieważ blok miał alias „as”. Dopiero po usunięciu aliasu mogłem uzyskać blok w szablonie.
TheKitMurkit
Dobra uwaga @TheKitMurkit - dodałem trochę do mojej odpowiedzi, która mówi „jeśli ustawiony jest alias, będziesz musiał go użyć podczas wywoływania getChildHtml.”. Dzięki.
Ben Crook,