Gibt es irgendwo eine Doku wie ich per Plugin ein bestehendes Emotion-Widget erweitern kann, sprich dem Banner Widget um ein zusätzliches Feld erweitern um Text zu hinterlegen?
Alternativ, kann ich ein eigenes Shopping-World Element erzeugen und als Basis das Banner-Widget angeben?
um ein Einkaufswelten - Widget zu erstellen, gibt es eine ausführliche Dokumentation von Shopware: 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.
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
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 ^^
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 $slider->getFields() ja holen. Aber was wird da zurückgegeben? Man kann das bei der Installation einen Plugins ja nicht debuggen. Oder?
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.
@shwosh : 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.