Shopware6UserShopware6User MemberComments: 13 Received thanks: 4 Member since: July 2019 edited October 2019

Hallo zusammen :)

Ich befasse mich momentan mit dem Erstellen eigener CMS-Blöcke und Elementen. Die How-To Anleitungen sind übrigens sehr gut, danke daür!
Nun wollte ich einen Schritt weitergehen: Anstatt nur eine bestehende Kategorie (z.B. 'text-image') mit Blöcken zu ergänzen, möchte ich eine eigene Kategorie anlegen.

Ich versuchte die Ordnerstruktur  wie folgt zu imitieren: [...]/sw-cms/blocks/"meineKategorie"/"meineBlöcke"/[...]. Dies hat aber leider nicht geklappt (Im Backend habe ich nur die Auswahlmöglichkeiten zwischen den vier Standard-Kategorien).

Bevor ich noch weiter probiere deshalb die Frage: Ist dies machbar? Wenn Ja, ist mein Ansatz richtig?

Danke für eure Antworten

EDIT: Ich habe die Lösung nun doch gefunden: Die verschiedenen Auswahlen sind tatsächlich 'hardcoded' unter [...]/module/sw-cms/component/sw-cms-sidebar/sw-cms-sidebar.html.twig. Dort kann man manuell eine option hinzufügen. Damit der erstellte Block in dieser Kategorie erscheint, muss man im index.js des Blocks die richtige category angeben.

Thanked by 2DateIdee experthing

Answers

  • experthingexperthing MemberComments: 3 Received thanks: 1 Member since: July 2019

    @Shopware6User‍ Danke dir für die Infos Dienst hier in Erfahrung gebracht hast. Könntest du bitte noch genauer darauf eingehen wie du das umgesetzt hast mit der eigenen Kategorie?

     

    evtl. mit den Code Snippets, das wäre wirklich klasse, wir knabbern nämlich gerade an demselben Problem und kommen nicht weiter :(

     

    danke dir schon mal, Michi

  • Shopware6UserShopware6User MemberComments: 13 Received thanks: 4 Member since: July 2019

    @experthing

    Du musst folgenden Twig Block extenden:

    {% block sw_cms_sidebar_block_overview_category %}
    <div class="sw-cms-sidebar__block-category">
        <sw-select-field :label="$tc('sw-cms.detail.label.blockCategorySelection')"
                         v-model="currentBlockCategory">
            <option value="text">{{ $tc('sw-cms.detail.label.blockCategoryText') }}</option>
            <option value="image">{{ $tc('sw-cms.detail.label.blockCategoryImage') }}</option>
            <option value="video">{{ $tc('sw-cms.detail.label.blockCategoryVideo') }}</option>
            <option value="text-image">{{ $tc('sw-cms.detail.label.blockCategoryTextImage') }}</option>
            <option value="commerce">{{ $tc('sw-cms.detail.label.blockCategoryCommerce') }}</option>
            <option value="sidebar">{{ $tc('sw-cms.detail.label.blockCategorySidebar') }}</option>
            <option value="DEIN_BLOCK_NAME">DEINE_BESCHREIBUNG</option> <!-- added option -->
        </sw-select-field>
    </div>
    {% endblock %}

    Die Ordnerstruktur zu diesem File sieht folgendermassen aus:

    /custom/plugins/DEIN_PLUGIN/src/Resources/app/administration/src/module/sw-cms/component/sw-cms-sidebar/sw-cms-sidebar.html.twig

     

  • ShopwareNoobyShopwareNooby MemberComments: 9 Received thanks: 0 Member since: January 10

    Hi Shopware6User :),

    eine vielleicht etwas dumme Frage: wie extendest du den Block bzw. welchen Pfad verwendest du? Mit 

    {% sw_extends 'sw-cms-sidebar/sw-cms-sidebar.html.twig' %} funktionierts bei mir leider nicht.

    Viele Grüße 

    Vanessa :)

     

  • Shopware6UserShopware6User MemberComments: 13 Received thanks: 4 Member since: July 2019

    @ShopwareNooby

    Das Erweitern der twig-Templates für die Administratiion funktioniert hier ein bisschen anders, als für den Storefront:

    Stelle sicher, dass die Ordnerstrukur wie folgt ist: 

    [...]/module/sw-cms/component/sw-cms-sidebar/

    Darin erstellst du dann wie oben beschrieben deinen (überschreibenden) Block. Hier braucht es also kein {% extends %} oder dergleichen. 

    Damit der Block dann auch registriert wird, machst du auf gleicher Ebene ein index.js file mit folgendem Inhalt: 

    const { Component } = Shopware;
    import template from './sw-cms-sidebar.html.twig';
    
    Component.override('sw-cms-sidebar', {
        template
    });

    Dann musst du noch sicher stellen, dass dieses index.js file erkannt wird, indem du es im main.js importierst: 

    import './module/sw-cms/component/sw-cms-sidebar';

     

    Anmerkung: Es ist wohl empfehlenswert eigene Blöcke / Elemente einfach einer bestehenden Kategorie unterzuordnen anstatt eine neue zu erstellen, da dann keine Überschreibung der core files stattfindet. 

    Thanked by 1ShopwareNooby
  • ShopwareNoobyShopwareNooby MemberComments: 9 Received thanks: 0 Member since: January 10

    Danke Shopware6User :)

Sign In or Register to comment.