Cuando leo la documentación sobre diseños de página ( http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html#layout-types-page ) veo que el Se permiten las siguientes instrucciones en este documento XML:
<container>
<referenceContainer>
<move>
<update>
Como <referenceBlock name="block.name" remove="true" />
no es una de las instrucciones permitidas, ¿cómo puedo eliminar un determinado elemento en un diseño de página específico?
Lo que quiero para las categorías principales es un diseño de página completamente diferente. No necesito ciertos contenedores y bloques para este diseño. Para estas categorías solo quiero mostrar categorías secundarias y no los productos.
Lo que hice ahora es agregar las siguientes líneas en el diseño de mi página: (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>
En el design\frontend\Vendor\Name-of-theme\Magento_Theme\layouts.xml
agregué:
<layout id="catalog-blocks">
<label translate="true">Catalog Blocks</label>
</layout>
Le di a todas las categorías principales este diseño de página de bloques de catálogo en el administrador.
Luego, en el diseño principal ( design\frontend\Vendor\Name-of-theme\Magento_Theme\layout\default.xml
), agregué:
<referenceBlock name="delete" remove="true" />
Entonces, todo el bloque de eliminación se eliminará, con todas las cosas que moví aquí, en el diseño de página. Esto funciona bien! Logra exactamente lo que quiero, pero todo esto me parece un poco hack.
¿Se considera esto una buena práctica? Si no, ¿cuál sería una buena alternativa?
Edición 1 : Cambié la remove
etiqueta en mi pregunta con la correcta para evitar confusiones.
Edición 2 : más información sobre los archivos y las ubicaciones de los archivos.
Esta es la mejor práctica para eliminar cualquier bloque o contenedor en magento 2. Puede pasar
name attribute
dentro delname
elemento a continuación.Puede buscar dentro del sistema magento 2, ha encontrado la sintaxis de muchos lugares igual que arriba.
Su forma de recomendación de magento. Si el atributo remove = "true", agregue el elemento a la lista remove de ese diseño.
En magento 1
<remove> element
es válido, pero en Magento 2 debe establecer la sintaxis igual que anteriormente.fuente
<referenceBlock name="block.name" remove="true" />
(estaba equivocado acerca de laremove
etiqueta) en un diseño de página directamente yareferenceBlock
que tampoco está permitido? Todavía deberíamove
un elemento a un 'contenedor de eliminación' y luego eliminarlo en el archivo de diseño principal. Lo que me parece extraño.<block class="Magento\Framework\View\Element\Html\Links" name="top.links">
, en este caso puedes usar<referenceBlock name="top.links" remove="true" />
Se supone que los diseños de página solo se usan para crear una estructura alámbrica / estructura de la página y no para modificaciones más pequeñas, como eliminar bloques.
Para eliminar un bloque solo para su nuevo diseño, creo que la mejor manera es crear su propio controlador de diseño y realizar las modificaciones allí. Por ejemplo, podría crear catalog_category_toplevel.xml que usa su nueva estructura / diseño y eliminar los bloques allí.
Como se trata más de una tarea de fondo, no me siento lo suficientemente cómodo como para proporcionar instrucciones para este perdón :( Estos dos artículos de Alan Storm pueden ayudarlo con esto:
TL: DR
Si desea hacer esto y seguir las mejores prácticas, debe crear un nuevo controlador de diseño.
fuente