# Einkaufswelt Widget Felder hinzufügen

**URL:** <https://forum.shopware.com/t/einkaufswelt-widget-felder-hinzufugen/50388>\
**Category:** Programmierung\
**Created:** [11. Januar 2018 um 09:45 UTC](https://forum.shopware.com/t/einkaufswelt-widget-felder-hinzufugen/50388 "2018-01-11T09:45:22Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![langnickel](https://avatars.discourse-cdn.com/v4/letter/l/3ec8ea/32.png) [@langnickel](https://forum.shopware.com/u/langnickel)\
**Post date:** [11. Januar 2018 um 09:45 UTC](https://forum.shopware.com/t/einkaufswelt-widget-felder-hinzufugen/50388/1 "2018-01-11T09:45:22Z")

</div>

Gibt es irgendwo eine Doku wie ich per Plugin ein bestehendes Emotion-Widget erweitern kann, sprich dem Banner Widget um ein&nbsp;zusätzliches Feld erweitern um Text zu hinterlegen?

Alternativ, kann ich ein eigenes Shopping-World Element erzeugen und als Basis das Banner-Widget angeben?

---

<div class="post-metadata">

**Author:** ![sschreier](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/sschreier/32/23296_2.png) [@sschreier](https://forum.shopware.com/u/sschreier)\
**Post date:** [11. Januar 2018 um 16:41 UTC](https://forum.shopware.com/t/einkaufswelt-widget-felder-hinzufugen/50388/2 "2018-01-11T16:41:58Z")

</div>

Hallo,

um ein Einkaufswelten - Widget zu erstellen, gibt es eine ausführliche Dokumentation von Shopware: [Custom shopping world elements](https://developers.shopware.com/developers-guide/custom-shopping-world-elements/) .

Dich bei dem Banner-Widget von Shopware selbst “einzuklinken”, wird wahrscheinlich schwieriger werden, “einfacher” und sicherer wäre es, einfach selbst die ganze Funktion umzusetzen, so wie du es brauchst.

Beste Grüße

Sebastian

---

<div class="post-metadata">

**Author:** ![Stephan\_Grass](https://avatars.discourse-cdn.com/v4/letter/s/76d3ee/32.png) [@Stephan\_Grass](https://forum.shopware.com/u/Stephan_Grass)\
**Post date:** [25. Januar 2018 um 11:10 UTC](https://forum.shopware.com/t/einkaufswelt-widget-felder-hinzufugen/50388/3 "2018-01-25T11:10:28Z")

</div>

Hast Du eine Lösung gefunden?  
Das&nbsp;Banner-Widget nachzubauen erscheint mir recht kompliziert zu sein.

Ich weiß z.B. nicht, wie man an die Bildbreite und -höhe des Bildes kommt und wie man Bilder für die responsive Darstellung generieren kann.

Im Template componemt\_banner.tpl gibt es {$Data.thumbnails}. Woher kommt das?

&nbsp;Fragen über fragen …

---

<div class="post-metadata">

**Author:** ![langnickel](https://avatars.discourse-cdn.com/v4/letter/l/3ec8ea/32.png) [@langnickel](https://forum.shopware.com/u/langnickel)\
**Post date:** [25. Januar 2018 um 14:51 UTC](https://forum.shopware.com/t/einkaufswelt-widget-felder-hinzufugen/50388/4 "2018-01-25T14:51:00Z")

</div>

Ich bin die letzten Tage nich dazu gekommen das weiter zu Verfolgen. Ich habe zur Zeit das notwendigste mit css Überschreibungen umgesetzt welche modular in das css textfeld kommt. Ich bräuchte zwar noch eine Lösung um zusätzlichen Text per Emotion-Widget zu hinterlegen. Ich glaube ich schaue die Tage nochmal etwas genauer. Zur not eben per Brechstange 🙂

&nbsp;

Das Data kannst du per&nbsp;

```
 'Shopware\_Controllers\_Widgets\_Emotion\_AddElement'

```

modifizieren. Beispiel:

```
public function onModifyFrontendEmotionElement(\Enlight_Event_EventArgs $args) {
        $element = $args->get('element');
        $data = $args->getReturn();

        if ($element['component']['xType'] !== 'emotion-components-...') {
            return $data;
        }

        $data['my_value'] = 'Test';

        return $data;
    }

```

Sprich ich müsste das Template überschreiben, was kein Problem sein sollte. Ich müsste meine zusätzliche Daten in die View bekommen (was mit obigen Methode geht). Jetzt brauch ich nurnoch ne möglichkeit wie ich die zusätzlichen Daten in der Datenbank persistieren kann. Man könnte ein Custom-Model per Plugin registrieren. welches ne OneToOne auf nen bestehendes Emotion-Widget hat und dann im obigen Beispiel nen query machen und die zusätzlichen Daten einfügen. Dann per überschrieben Template anzeigen. Jetzt ist die Frage wie man diese Daten eingibt. Idealerweise in der Standard Backend Form vom Emotion widget neue Felder einfügen. Zur not halt über nen eigenes ExtJS Fenster. Irgendwie gehts bestimmt, muss halt mal schauen ^^

---

<div class="post-metadata">

**Author:** ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)\
**Post date:** [25. Januar 2018 um 15:30 UTC](https://forum.shopware.com/t/einkaufswelt-widget-felder-hinzufugen/50388/5 "2018-01-25T15:30:00Z")

</div>

Hier ein Beispiel wie man weitere Felder hinzufügen kann. Aber Achtung! Ihr müsst sie beim Deinstallieren auch wieder selbständig entfernen.

```
getEmotionComponent('emotion-components-banner-slider');
        if ($slider == null) {
            return false;
        }

        // Jetzt können wir wie unter https://developers.shopware.com/developers-guide/custom-shopping-world-elements/#adding-configuration-fields-to-the-element
        // beschrieben neue Felder hinzufügen.

        // Beispiel:
        // $slider->createTextField( ... )

    }

    /**
     * returns an emotion component by xtype
     * @param $xtype
     * @return null|object
     */
    private function getEmotionComponent($xtype)
    {
        $models = $this->container->get('models');
        $repository = $models->getRepository('Shopware\Models\Emotion\Library\Component');

        $component = $repository->findOneBy([
            'xType' => $xtype,
        ]);

        if (!$component instanceof \Shopware\Models\Emotion\Library\Component) {
            return null;
        }
        return $component;
    }
/* [...] */

```

In diesem Beispiel in der install-Methode eures Plugins.

Viele Grüße

---

<div class="post-metadata">

**Author:** ![Stephan\_Grass](https://avatars.discourse-cdn.com/v4/letter/s/76d3ee/32.png) [@Stephan\_Grass](https://forum.shopware.com/u/Stephan_Grass)\
**Post date:** [26. Januar 2018 um 09:04 UTC](https://forum.shopware.com/t/einkaufswelt-widget-felder-hinzufugen/50388/6 "2018-01-26T09:04:21Z")

</div>

&nbsp;

Danke simkli!!!

Das ist es doch! Die neuen Felder stehen schön im Template zur Verfügung. Top!!!

---

<div class="post-metadata">

**Author:** ![langnickel](https://avatars.discourse-cdn.com/v4/letter/l/3ec8ea/32.png) [@langnickel](https://forum.shopware.com/u/langnickel)\
**Post date:** [26. Januar 2018 um 09:41 UTC](https://forum.shopware.com/t/einkaufswelt-widget-felder-hinzufugen/50388/7 "2018-01-26T09:41:51Z")

</div>

Dankeschön 🙂 Auf die Iddee wäre ich um ehrlich zu sein nicht gekommen oO

---

<div class="post-metadata">

**Author:** ![Stephan\_Grass](https://avatars.discourse-cdn.com/v4/letter/s/76d3ee/32.png) [@Stephan\_Grass](https://forum.shopware.com/u/Stephan_Grass)\
**Post date:** [26. Januar 2018 um 10:19 UTC](https://forum.shopware.com/t/einkaufswelt-widget-felder-hinzufugen/50388/8 "2018-01-26T10:19:34Z")

</div>

Doch noch ne Frage.  
Wenn man die Felder wie beschrieben anlegt und das Plugin deinstalliert und wieder installiert, muss man die Felder ja löschen, damit das neue Feld nicht mehrfach angelegt wird. Dann sind natürlich alle Daten futsch.

Wie kann man prüfen, ob es ein Feld schon gibt?  
Man kann die Felder mit&nbsp;$slider-\>getFields() ja holen. Aber was wird da zurückgegeben? Man kann das bei der Installation einen Plugins ja nicht debuggen. Oder?

---

<div class="post-metadata">

**Author:** ![Stephan\_Grass](https://avatars.discourse-cdn.com/v4/letter/s/76d3ee/32.png) [@Stephan\_Grass](https://forum.shopware.com/u/Stephan_Grass)\
**Post date:** [26. Januar 2018 um 10:58 UTC](https://forum.shopware.com/t/einkaufswelt-widget-felder-hinzufugen/50388/9 "2018-01-26T10:58:52Z")

</div>

Ok. Erledigt. Hab’s mit ner foreach durchlaufen und auf den Namen geprüft.

---

<div class="post-metadata">

**Author:** ![shwosh](https://avatars.discourse-cdn.com/v4/letter/s/3ec8ea/32.png) [@shwosh](https://forum.shopware.com/u/shwosh)\
**Post date:** [13. Februar 2018 um 16:42 UTC](https://forum.shopware.com/t/einkaufswelt-widget-felder-hinzufugen/50388/10 "2018-02-13T16:42:49Z")

</div>

Moin,  
kannst du (oder jemand anders, der es weiß) ein Beispiel posten, wie du die Felder wieder deinstallierst? Wäre super nett. Ich hänge hier gerade fest. Sonst klappt es soweit.

---

<div class="post-metadata">

**Author:** ![simkli](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/simkli/32/13124_2.png) [@simkli](https://forum.shopware.com/u/simkli)\
**Post date:** [13. Februar 2018 um 17:10 UTC](https://forum.shopware.com/t/einkaufswelt-widget-felder-hinzufugen/50388/11 "2018-02-13T17:10:56Z")

</div>

@shwosh‍ :&nbsp;Du holst dir einfach wieder das entsprechende Einkaufsweltelement, iterierst über alle Felder und löscht dein eigenes. In etwa so:

```
function uninstall() {
    // EntityManager z.B. via DependencyContainer holen
    $models = $this->container->get('models');

    // Einkaufsweltelement über die zuvor definierte Helfer-Methode holen 
    // (Helfer-Methode siehe vorherigen Beitrag von mir)
    $slider = $this->getEmotionComponent('emotion-components-banner-slider');
    if ($slider == null) {
        return false;
    }

    // Über alle Felder iterieren und ggf. dein Feld löschen
    foreach($slider->getFields() as $field) {
        if ($field->getName() == 'name_deines_feldes') {
            $models->remove($field);
        }
    }
    $models->flush();

}

```

Alternativ könntest du dir auch die Repository von den Einkaufswelt-Feldern holen und dort nach deinem Feld suchen und es dann löschen.

Viele Grüße
