¿Es posible eliminar elementos en un diseño de página en Magento2?


8

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.xmlagregué:

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

Respuestas:


12

Qué pasa:

  • crear un nuevo contenedor (en lugar de un bloque)
  • mueve tus bloques al contenedor
  • quitar el contenedor

Algo como esto:

<container name="delete" htmlTag="div" htmlClass="delete"/>

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

<referenceContainer name="delete" remove="true" />

Sí, eso es exactamente lo que he hecho. Mi punto es: esto se siente raro. ¿Es esta la única solución? ¿Por qué es que Magento no construyó esta característica en page_layouts y hay una buena razón para no poder eliminar bloques?
11mb

@ 11mb es ligeramente diferente de lo que has hecho, ya que en mi publicación estoy creando y haciendo referencia a un contenedor en un solo archivo (el diseño de página xml), mientras que en tu pregunta estás usando un bloque y varios archivos XML. Sin embargo, esa es una gran pregunta. No estoy seguro de por qué Magento no creó esta función en page_layouts
Raphael en Digital Pianism,

@ 11mb siéntase libre de crear un problema en el repositorio de Magento 2 GitHub para abordar ese problema, definitivamente es un problema interesante y estoy seguro de que hay una buena razón detrás de esto
Raphael en Digital Pianism

1
Veo lo que has hecho aquí. Creo que es un enfoque ligeramente mejor de hecho. Lo probaré y volveré aquí.
11mb

6

Esta es la mejor práctica para eliminar cualquier bloque o contenedor en magento 2. Puede pasar name attributedentro del nameelemento a continuación.

<referenceBlock name="block.name" remove="true" />

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> elementes válido, pero en Magento 2 debe establecer la sintaxis igual que anteriormente.


¡Gracias! Creo que tengo que reformular un poco la pregunta. ¿Es posible usar <referenceBlock name="block.name" remove="true" />(estaba equivocado acerca de la removeetiqueta) en un diseño de página directamente ya referenceBlockque tampoco está permitido? Todavía debería moveun elemento a un 'contenedor de eliminación' y luego eliminarlo en el archivo de diseño principal. Lo que me parece extraño.
11mb

referenceBlock se usa cuando el bloque ya está definido con el nombre. de lo contrario no es útil. ex. <block class="Magento\Framework\View\Element\Html\Links" name="top.links">, en este caso puedes usar<referenceBlock name="top.links" remove="true" />
Rakesh Jesadiya

Soy consciente de que el bloqueo debería existir de antemano. Pero en un diseño de página no puedo usar todas las instrucciones de diseño genérico como se describe aquí: devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/… . (Edité mi pregunta), así que no puedo usar referenceBlock
11mb

¿en qué página está trabajando ahora y qué elemento desea eliminar?
Rakesh Jesadiya

Agregué más información en la pregunta. ¡Gracias por su apoyo!
11mb

1

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.