Magento2: ¿cuál es la diferencia entre referenceContainer y referenceBlock?

23

Ambos referenceBlocky las referenceContainerentidades se utilizan en el diseño en magento2.
¿Cuál es la principal diferencia entre ellos y cómo puedo relacionar estas entidades con magento1. *.

Yogesh Karodiya
fuente

Respuestas:

38

básicamente los contenedores son el equivalente de los core/text_listbloques en magento 1.
"filosóficamente" funcionan igual, la única diferencia es que containersson bloques predefinidos que solo admiten otros bloques secundarios.
Algunos ejemplos son content, after.body.start, header-wrapper.
Puede ver todos los contenedores definidos, por ejemplo, en Magento/Theme/view/base/page_layout/*.

Aquí hay un ejemplo de empty.xml.

<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_layout.xsd">
    <container name="root">
        <container name="after.body.start" as="after.body.start" before="-" label="Page Top"/>
        <container name="page.wrapper" as="page_wrapper" htmlTag="div" htmlClass="page-wrapper">
            <container name="global.notices" as="global_notices" before="-"/>
            <container name="main.content" htmlTag="main" htmlId="maincontent" htmlClass="page-main">
                <container name="columns.top" label="Before Main Columns"/>
                <container name="columns" htmlTag="div" htmlClass="columns">
                    <container name="main" label="Main Content Container" htmlTag="div" htmlClass="column main"/>
                </container>
            </container>
            <container name="page.bottom" as="page_bottom" label="Before Page Footer Container" after="main.content" htmlTag="div" htmlClass="page-bottom"/>
            <container name="before.body.end" as="before_body_end" after="-" label="Page Bottom"/>
        </container>
    </container>
</layout>

básicamente lo que se define como <container name="..." />se puede acceder por referenceContainer. lo declarado como <block .... />puede ser referenciado porreferenceBlock

Marius
fuente