Plugins und Attribute

Moin, wollte mal wissen wie andere bei der Entwicklung von Plugins vorgehen. Wenn ich z.B. zusätzliche Informationen bei Artikeln oder Kategorien habe, nehme ich hierfür die Attribute. Sagen wir mal ich nehme attr1, attr2 und attr3 für zusätzliche Artikeldetails. Dann finde ich noch ein paar schöne Plugins im Store, die mir auch noch gefallen. Es kann doch gut sein, dass ein Plugin dabei ist, welches auch auf die selben Attribute zugreift. Kann man im voraus solche Konflikte ausschliessen? Oder sehe ich hier Probleme, die es gar nicht gibt?

Hey Rednaxela,

du kannst selber Attribute hinzufügen :wink:

In der Bootstrap.php:install():

public function install() {
    Shopware()->Models()->addAttribute('s_order_details_attributes', 'devprefix', 'yourplugin', 'datatype');
    Shopware()->Models()->generateAttributeModels(array('s_order_details_attributes'));

}

So kannst du direkt über das Model drauf zugreifen welches unter  var/cache/production__REVISION__/doctrine/attributes  abgelegt wird.

Mit freundlichen Grüßen,
Simon Bäumer :wink:

Wunderbar, dankeschön. Ich hatte immer im Hinterkopf, dass man keine Datenbankfelder hinzufügen sollte, dass dadurch z.b. Artikel duplizieren nen Fehler wirft. Vielleicht schwirrt mir der Gedanke noch aus einem anderen Grund im Kopp rum Wink

@Rednaxela schrieb:

Wunderbar, dankeschön. Ich hatte immer im Hinterkopf, dass man keine Datenbankfelder hinzufügen sollte, dass dadurch z.b. Artikel duplizieren nen Fehler wirft. Vielleicht schwirrt mir der Gedanke noch aus einem anderen Grund im Kopp rum Wink

Hallo,

du darfst oder solltest auch keine Datenbankfelder den „primären“ Tabellen hinzufügen, das stimmt auch so. Für neue Felder soll man genau deshalb auch die Attribut-Tabellen nutzen (wie von Simon erwähnt). Wenn es keine passende Attribut-Tabelle gibt, kann man den Bereich (vorerst) nicht erweitern.

Grund dafür ist, dass dem „Model“ der primären Tabelle ja deine durch SQL hinzugefügte Spalte gar nicht bekannt ist - somit kann dann auch nur ein Fehler geworfen werden. Bei den Attribut-Tabellen hast du dazu beispielsweise die Funktion:

Shopware()->Models()->generateAttributeModels(array('s_order_details_attributes'));

, die die neue Spalte dem Model ergänzt (hier bspw. der Order-Details-Attribut-Tabelle).

Beste Grüße

Sebastian