È possibile rimuovere elementi in un layout di pagina in Magento2?


8

Quando leggo la documentazione sui layout di pagina ( http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html#layout-types-page ) vedo che il sono consentite le seguenti istruzioni in questo documento XML:

  • <container>
  • <referenceContainer>
  • <move>
  • <update>

Dato che <referenceBlock name="block.name" remove="true" />non è una delle istruzioni consentite come posso rimuovere un determinato elemento in uno specifico layout di pagina?

Quello che voglio per le categorie principali è un altro design di pagina. Non ho bisogno di determinati contenitori e blocchi per questo disegno. Per queste categorie voglio solo mostrare le categorie secondarie e non i prodotti.

La cosa che ho fatto ora è, ho aggiunto le seguenti righe nel mio layout di pagina: (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>

Nel design\frontend\Vendor\Name-of-theme\Magento_Theme\layouts.xmlho aggiunto:

<layout id="catalog-blocks">
    <label translate="true">Catalog Blocks</label>
</layout>

Ho dato a tutte le categorie principali questo layout di pagina dei blocchi di catalogo nell'amministratore.

Quindi nel layout principale ( design\frontend\Vendor\Name-of-theme\Magento_Theme\layout\default.xml) ho aggiunto:

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

Quindi l'intero blocco di eliminazione verrà eliminato, con tutte le cose che ho spostato qui, nel layout di pagina. Funziona bene! Raggiunge esattamente quello che voglio, ma tutto mi sembra un po 'hacker.

Questa è considerata una buona pratica? In caso contrario, quale sarebbe una buona alternativa?

Modifica 1 : removeho cambiato il tag nella mia domanda con quello giusto per evitare confusione.

Modifica 2 : ulteriori informazioni sui file e sui percorsi dei file.

Risposte:


12

Che dire:

  • creazione di un nuovo contenitore (anziché un blocco)
  • sposta i blocchi nel contenitore
  • rimuovere il contenitore

Qualcosa come questo:

<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ì, è esattamente quello che ho fatto. Il mio punto è: questo sembra strano. È questa l'unica soluzione? Perché Magento non ha incorporato questa funzione in page_layouts ed esiste una buona ragione per non poter rimuovere i blocchi?
11

@ 11mb è leggermente diverso da quello che hai fatto come nel mio post sto creando e facendo riferimento a un contenitore in un singolo file (il layout di pagina xml) mentre nella tua domanda stai usando un blocco e diversi file XML. Tuttavia, questa è una grande domanda, non sono sicuro del motivo per cui Magento non abbia creato questa funzione nei page_layouts
Raphael at Digital Pianism

@ 11mb sentiti libero di creare un problema sul repository GitHub di Magento 2 per affrontare quel problema, è sicuramente un problema interessante e sono sicuro che ci sia una buona ragione dietro di esso
Raphael al Digital Pianism

1
Vedo cosa hai fatto qui. Penso che sia davvero un approccio leggermente migliore. Lo proverò e tornerò qui.
11

6

Questa è la migliore pratica per rimuovere qualsiasi blocco o contenitore in magento 2. Puoi passare name attributeall'interno namenell'elemento sottostante.

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

Puoi cercare all'interno del sistema Magento 2, hai trovato molti posti sintassi come sopra.

Il suo modo di raccomandazione magento. Se l'attributo remove = "true", quindi aggiungere l'elemento da elencare rimuovere da quel layout.

In magento 1 <remove> elementè valido ma in Magento 2 devi impostare la sintassi come sopra.


Grazie! Penso di dover riformulare un po 'la domanda. È possibile utilizzare <referenceBlock name="block.name" remove="true" />(ho sbagliato sul removetag) in un layout di pagina direttamente dal momento che referenceBlocknon è nemmeno permesso. Dovrei ancora moveun elemento in un 'contenitore-cancellazione' e quindi eliminarlo nel file di layout principale. Il che mi sembra strano.
11

referenceBlock viene utilizzato quando il blocco è già definito con il nome. altrimenti non è utile. ex. <block class="Magento\Framework\View\Element\Html\Links" name="top.links">, in questo caso puoi usare<referenceBlock name="top.links" remove="true" />
Rakesh Jesadiya

Sono consapevole che il blocco dovrebbe esistere in anticipo. Ma in un layout di pagina non posso usare tutte le istruzioni di layout generico come descritto qui: devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/… . (Ho modificato la mia domanda), quindi non posso usare referenceBlock
11

in quale pagina stai lavorando per ora e quale elemento vuoi eliminare?
Rakesh Jesadiya,

Ho aggiunto alcune ulteriori informazioni alla domanda. Grazie per il vostro sostegno!
11

1

I layout di pagina dovrebbero essere usati solo per creare un wireframe / struttura della pagina e non per piccole modifiche come la rimozione di blocchi.

Per rimuovere un blocco solo per il tuo nuovo layout, penso che il modo migliore sia creare il tuo handle di layout e apportare le modifiche. Ad esempio, è possibile creare catalog_category_toplevel.xml che utilizza il nuovo wireframe / layout e rimuovere i blocchi al suo interno.

Poiché si tratta più di un'attività di back-end, non mi sento abbastanza a mio agio da fornire istruzioni per questa scusa :( Questi due articoli di Alan Storm potrebbero aiutarti in questo:

TL: DR

Se si desidera eseguire questa operazione e seguire le migliori pratiche, è necessario creare un nuovo handle di layout.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.