Mehrere ProductAttributeCondition für verschiedene Values

Hallo Gemeinde,

ein Plugin soll anhand eines Artikel-Attributs prüfen, ob der Artikel aus der Suche ausgeschlossen werden soll oder nicht. Das Attribut vom Typ Boolean soll für den Wert 1 für den Ausschluss des Artikels sorgen.

Soweit kein Problem:

new ProductAttributeCondition(self::ARTICLE_ATTRIBUTE, ProductAttributeCondition::OPERATOR_EQ, 0)

Nun werden nur Artikel beachtet, für die der Attribut-Wert 0 ist. Allerdings ist dieser nicht per default 0, sondern bei Erstellung des Attributes immer NULL. Und das ist für die ProductAttributeCondition nicht das gleiche. Die 0 wird erst übernommen, wenn der Artikel erneut gespeichert wird.

Meine Idee, eine zweite Condition hinzuzufügen, die den Wert NULL abfängt, scheitert daran, dass dann immer nur die jeweils zweite Condition zur Ausführung kommt, also dann nur noch Attribute mit dem Wert NULL, nicht aber mehr mit 0 beachtet werden.

Welche Möglichkeiten gibt es…

a) eine zweite Condition zu nutzen bzw. die beiden zu kombinieren?

b) Das Attribut beim Erstellen direkt für alle Artikel auf 0 zu setzen. Wobei sich an dieser Stelle die Frage stellt, ob das für einen riesigen Produktkatalog nicht zu viel Aufwand/Zeit bedeutet?

Für Hilfe und Ideen bin ich sehr dankbar!

Hallo templeturtle,

also eine zweite Condition zu nutzen ist überflüssig.

Antwort b) ist hier also schon mal richtig.

Du kannst beim erstellen des Attributs via Crud Service einen default Value mitgeben (der 7. Parameter):

$service = Shopware()->Container()->get('shopware_attribute.crud_service');
$service->update('s_articles_attributes', 'dont_show', 'boolean', 
                 [
                   'label' => 'Shoesize',
                   'displayInBackend' => true
                 ],
                 'dont_show',
                 false,
                 0

);

Dann bekommen alle bestehenden Artikel automatisch den Wert 0 und nicht NULL.

Du kannst den default Value auch direkt auf der DB ändern.

Dann musst Du aber alle bestehenden Artikel mit einem Update Statement anpassen:

UPDATE s_articles_attributes SET dont_show=0 WHERE dont_show IS NULL;

 

2 „Gefällt mir“

Danke für die Antwort. Es war mir nicht bewusst, dass ich beim Erstellen via Crud-Service den default-Wert mitgeben kann. In der Doku konnte ich dazu leider nix finden.

@MrMDeluxe schrieb:

Hallo templeturtle,

also eine zweite Condition zu nutzen ist überflüssig.

Antwort b) ist hier also schon mal richtig.

Du kannst beim erstellen des Attributs via Crud Service einen default Value mitgeben (der 7. Parameter):

$service = Shopware()->Container()->get(‚shopware_attribute.crud_service‘);
$service->update(‚s_articles_attributes‘, ‚dont_show‘, ‚boolean‘,
[
‚label‘ => ‚Shoesize‘,
‚displayInBackend‘ => true
],
‚dont_show‘,
false,
0

);

Dann bekommen alle bestehenden Artikel automatisch den Wert 0 und nicht NULL.

Das hat mir auch geholfen, danke. Allerdings scheint der default-Wert nicht zu funktionieren, wenn man eine ComboBox nutzt. Da in der Datenbank dann die Keys stehen, die man vorher über  ‚arrayStore‘ angegeben hat, habe ich es mit dem Key probiert, aber in der Datenbankstruktur registriert es mir keinen Default-Wert.

Warum funktioniert das da nicht?