Ist es möglich, Elemente in einem Seitenlayout in Magento2 zu entfernen?


8

Wenn ich die Dokumentation zu Seitenlayouts lese ( http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html#layout-types-page ), sehe ich, dass die Die folgenden Anweisungen in diesem XML-Dokument sind zulässig:

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

<referenceBlock name="block.name" remove="true" />Wie kann ich ein bestimmtes Element in einem bestimmten Seitenlayout entfernen, da dies keine der zulässigen Anweisungen ist?

Was ich für die Top-Kategorien möchte, ist ein ganz anderes Seitendesign. Ich brauche keine bestimmten Behälter und Blöcke für dieses Design. Für diese Kategorien möchte ich nur untergeordnete Kategorien und nicht die Produkte anzeigen.

Ich habe jetzt die folgenden Zeilen in mein Seitenlayout eingefügt: (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>

In dem habe design\frontend\Vendor\Name-of-theme\Magento_Theme\layouts.xmlich hinzugefügt:

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

Ich habe allen Top-Kategorien dieses Katalogs Block-Seitenlayout im Admin gegeben.

Dann habe design\frontend\Vendor\Name-of-theme\Magento_Theme\layout\default.xmlich im Hauptlayout ( ) hinzugefügt:

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

Der gesamte Löschblock wird also mit allen Dingen, die ich hierher verschoben habe, im Seitenlayout gelöscht. Das funktioniert gut! Es erreicht genau das, was ich will, aber das Ganze scheint mir ein wenig hackisch.

Wird dies als gute Praxis angesehen? Wenn nicht, was wäre eine gute Alternative?

Edit 1 : Das remove-tag in meiner Frage wurde durch das richtige geändert , um Verwirrung zu vermeiden.

Bearbeiten 2 : Weitere Informationen zu den Dateien und Speicherorten.

Antworten:


12

Wie wäre es mit:

  • Erstellen eines neuen Containers (anstelle eines Blocks)
  • Bewegen Sie Ihre Blöcke in den Container
  • Entfernen Sie den Behälter

Etwas wie das:

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

Ja, genau das habe ich getan. Mein Punkt ist: Das fühlt sich komisch an. Ist dies die einzige Problemumgehung? Warum hat Magento diese Funktion nicht in die page_layouts integriert und gibt es einen guten Grund dafür, dass Blöcke nicht entfernt werden können?
11 MB

@ 11mb ist etwas anders als in meinem Beitrag. Ich erstelle und referenziere einen Container in einer einzigen Datei (dem Seitenlayout xml), während Sie in Ihrer Frage einen Block und mehrere XML-Dateien verwenden. Das ist jedoch eine großartige Frage. Ich bin mir nicht sicher, warum Magento diese Funktion nicht in den page_layouts
Raphael bei Digital Pianism

@ 11mb zögern Sie nicht, ein Problem auf dem Magento 2 GitHub-Repo zu erstellen, um dieses Problem zu beheben. Es ist definitiv ein interessantes Problem und ich bin sicher, dass es einen guten Grund dafür gibt
Raphael bei Digital Pianism

1
Ich sehe, was du hier getan hast. Ich denke, es ist in der Tat ein etwas besserer Ansatz. Ich werde es ausprobieren und hierher zurückkommen.
11mb

6

Dies ist die beste Vorgehensweise zum Entfernen von Blöcken oder Behältern in Magento 2. Sie können das folgende Element im name attributeInneren passieren name.

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

Sie können innerhalb des Magento 2-Systems suchen, Sie haben viele Orte Syntax wie oben gefunden.

Seine magento Empfehlung Weg. Wenn Attribut remove = "true", dann fügen Sie das Element zur Liste entfernen aus diesem Layout.

In Magento 1 <remove> elementist gültig, aber in Magento 2 müssen Sie die Syntax wie oben festlegen.


Danke! Ich denke, ich muss die Frage ein wenig umformulieren. Ist es möglich, <referenceBlock name="block.name" remove="true" />(ich habe mich in Bezug auf das removeTag geirrt ) direkt in einem Seitenlayout zu verwenden, da dies ebenfalls referenceBlocknicht zulässig ist. Ich sollte noch moveein Element zu einem 'Löschcontainer' und dann in der Hauptlayoutdatei löschen. Was mir seltsam erscheint.
11 MB

referenceBlock wird verwendet, wenn bereits ein Block mit einem Namen definiert ist. sonst ist es nicht nützlich. Ex. <block class="Magento\Framework\View\Element\Html\Links" name="top.links">, in diesem Fall können Sie verwenden<referenceBlock name="top.links" remove="true" />
Rakesh Jesadiya

Mir ist bewusst, dass der Block vorher existieren sollte. In einem Seitenlayout kann ich jedoch nicht alle allgemeinen Layoutanweisungen verwenden, wie hier beschrieben: devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/… . (Ich habe meine Frage bearbeitet), daher kann ich referenceBlock
11mb

Auf welcher Seite arbeitest du gerade und welches Element soll gelöscht werden?
Rakesh Jesadiya

Ich habe der Frage weitere Informationen hinzugefügt. Danke für deine Unterstützung!
11 MB

1

Die Seitenlayouts sollten nur zum Erstellen eines Drahtgitters / einer Drahtstruktur der Seite verwendet werden und nicht für kleinere Änderungen wie das Entfernen von Blöcken.

Um einen Block nur für Ihr neues Layout zu entfernen, ist es meiner Meinung nach am besten, ein eigenes Layout-Handle zu erstellen und die Änderungen dort vorzunehmen. Sie können beispielsweise catalog_category_toplevel.xml erstellen, die Ihr neues Drahtmodell / Layout verwendet, und die darin enthaltenen Blöcke entfernen.

Da dies eher eine Back-End-Aufgabe ist, fühle ich mich nicht wohl genug, um Anweisungen für diese Entschuldigung zu geben :( Diese beiden Artikel von Alan Storm können Ihnen dabei helfen:

TL: DR

Wenn Sie dies tun und bewährte Methoden befolgen möchten, müssen Sie ein neues Layout-Handle erstellen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.