addAttribute und Boolean nicht möglich?

Hallo zusammen,

ich wollte gerade in der neusten Shopware Version über die Plugin Bootstrap.php ein neues Artikel-Attributfeld hinzufügen.

Dieses soll Boolean sein, also die Checkbox. Dabei bekomme ich nur eine Fehlermeldung im Backend, die sagt “Unable to install PluginName, an unknown error occured.”.
Also die eigentlich garnichts aussagt. Ich habe mich dann langsam an den Fehler rangetastet und das Bool Feld als Quelle ausgemacht.
 

Shopware()->Models()->addAttribute('s_articles_attributes', 'lighthouse', 'myCheckBox', 'BOOLEAN', true, false);

Das knallt direkt mal. Danach habe ich das ganze mal über das Backend angelegt um zu prüfen, wie es in der Datenbank hinterlegt wird. Zu meinem erstauen, garnicht.
Lediglich ein Eintrag in der s_core_engine_elements ist gesetzt wurden. Jetzt die drei ??? wo zum Teufel speichert er die Information wenn ich bei einem Artikel das Flagfeld setze.

Und wie kann ich die Checkbox über meine Bootstrap einfügen?

Weiß hier jemand Rat?

 

Beste Grüße

Ja das wird so nicht gehen ohne umfangreiche Core-Anpassungen.

Im Core von Shopware wird an vielen Stellen explizit auf den type geprüft. Und an manchen Stellen wird das dann supported und an anderen nicht. Nicht mal ein tinyint(1) o.ä. kannst du hier nehmen. Das sollte einfach ein int sein, dann geht es. Ist zwar Verschwendung aber wie gesagt ist die Überprüfung einfach nicht zentralisiert.

Hier bei den Artikeln schießt an der Stelle schon mal die Merfachauswahl dazwischen die den Type nicht unterstützt (soweit ich das noch im Kopf hab) - während weiter vorher der Type explizit in der Liste der unterstützten Feld-Typen für Artikel jedoch auftaucht.

Ich würde einfach ein int nehmen und das so hinnehmen :wink:

Ein tinyint wird automatisch als boolean in den attribute models übersetzt:

 $this-\>get( "shopware.model\_manager" )-\>addAttribute( 's\_order\_basket\_attributes', 'atsd', 'blabla', 'tinyint(1)', true, null );

Wird zu:

 /\*\* \* @var boolean $atsdBlabla \* \* @ORM\Column(name="atsd\_blabla", type="boolean", nullable=true) \*/ protected $atsdBlabla;

Viele Grüße

1 Like

Hy Aqua,

das war es. Das hat geklappt, Feld wird nun richtig in der Datenbank erstellt.

Jetzt muss ich nur noch rausfinden, warum ich das Flagfeld bei einem Artikel nicht setzen kann…

generateAttributeModels

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

wird verwendet. Ich kann es auch in der Datenbank setzen.
Im Backend bleibt das Feld ungecheckt, im Frontend, also im Template bekomme ich den korrekten Wert der Datenbank, also ein true.

Cache habe ich schon geleert, hilft nicht. Komisch.

Hi, ich stehe vor der gleiche Hürde. Der Wert wird weder angezeigt, noch bei Eingabe gespeichert. Hat jemand die Lösung ?

Hallo,

ab Version 5.2 dies verwenden:

$attributeService = Shopware()->Container()->get('shopware_attribute.crud_service');

https://developers.shopware.com/developers-guide/attribute-system/#move-attribute-fields-into-anoth

 

Klappt ganz gut.

 

Beste Grüße