SW 5.2 - Backend Plugin / eigene Attribute in Artikeldetails

Hallo(http://forum.shopware.com/profile/21387/Jan Bücker „Jan Bücker“)[@Jan Bücker](http://forum.shopware.com/profile/21387/Jan Bücker „Jan Bücker“)‍,

ich würde gerne noch einmal bei dem Thema nachhaken. Die Lösung von dir (und somit aus der Dokumentation) funktioniert ja nur bei eigenen (Freitext-)Feldern, die nicht variantenfähig sind (also nur bei Hauptartikeln). Oder wo müsste man da ansetzen, um dies auch bei Varianten zu ermöglichen (siehe mein Kommentar)?

Das heisst also auch im Umkehrschluss, da ja der Final Release von Shopware Version 5.2 schon vollzogen wurde, sollte man die eigenen Freitextfeldern (mit Variantenfähigkeit) nun erstmal im Freitextfeld-Fieldset von Shopware platzieren, damit die Käufer das Plugin auch gleich zum Release nutzen können?

 

Alternativ könnte man ja später auch über einen Update - Befehl auf die s_attribute_configuration - Tabelle und dem entsprechenden Feldnamen die Anzeige im Backend im Nachhinein wieder deaktivieren und die Platzierung außerhalb (sofern das Laden und Speichern für die Varianten auch möglich sein wird) implementieren?

Beste Grüße

Sebastian

Das Beispiel aus der Dokumentation veranschaulicht lediglich wie man allgemein die Felder benutzen kann. Das soll nicht als real-world Beispiel dienen, sondern die generelle Vorgehensweise voranschaulichen. Wenn du dieses Beispiel variantenfähig machen möchtest, musst du dort selbst nochmal nach suchen und es dementsprechend anpassen.

Wenn du es umgesetzt hast, können wir den Code auch gerne mit in die Dokumentation übernehmen. :slight_smile:

Hallo [@Jan Bücker](http://forum.shopware.com/profile/21387/Jan Bücker „Jan Bücker“)‍,

ich habe dein Beispiel getestet und komme damit auch zu guten Ergebnissen. Leider harpert es noch bei „ComboBox“-Felder mit einem Ajax-Store. Hierbei gibt die „ComboBox“ immer die Id aus nicht nicht den dazugehörigen Datensatz. Gibt es eine Dokumentation wie man den Wert korrekt setzen muss?

Grüße
Ingo Walther

1 Like

Ich muss mich auch kurz einhaken, eigene Attribute in der DB erweitern ist aber mit …

        $this->Application()->Models()->addAttribute(
            's_categories_attributes',
            'foo',
            'foo_column',
            'varchar(100)',
            true,
            null
        );

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

… weiterhin so gedacht, korrekt? Weil, das klappt in allen Shop-Versionen bisher so getestet - ich würde aber natürlich gerne sicher gehen, dass das auch so gedacht ist :slight_smile:

Nachtrag : Ok, habe jetzt die passende Antwort gelesen. Versionscheck machen, ab 5.2 den Crud-Service verwenden und gut. Pribiere ich aus :wink:

Schöne Grüße,
Niklas

@TeichDatensysteme schrieb:

Ich muss mich auch kurz einhaken, eigene Attribute in der DB erweitern ist aber mit …

$this->Application()->Models()->addAttribute(
‘s_categories_attributes’,
‘foo’,
‘foo_column’,
‘varchar(100)’,
true,
null
);

Shopware()->Models()->generateAttributeModels(
array(
‘s_categories_attributes’
)
);

… weiterhin so gedacht, korrekt? Weil, das klappt in allen Shop-Versionen bisher so getestet - ich würde aber natürlich gerne sicher gehen, dass das auch so gedacht ist :)

EDIT: Ok, habe jetzt die passende Antwort gelesen. Versionscheck machen, ab 5.2 den Crud-Service verwenden und gut. Pribiere ich aus ;)

Schöne Grüße,
Niklas

Hallo,

ja bei Versionen unterhalb von Shopware Version 5.2 ist das weiterhin so gedacht, eigene Felder anzulegen. Der crud service steht erst ab Shopware Version 5.2 zur Verfügung und muss ab da verwendet werden.

Beste Grüße

Sebastian

Danke für den Hinweis, Sebastian - klappt.

Weiteres:  Bis 5.2 habe ich das Attribut im create/update einfach mitgegeben, im key - attributes mit dem weiteren key der eigenen Attributs- Spalte:

$category = array(
            'parentId' => $parentId,
            'name' => $name,
            'active' => true,
            'attribute' => array(
                'fooColumn' => $fooValue
            )
        );

Ist das immer noch “valide” oder “muss” man ab 5.2 DataPersister nutzen? Mein Beispiel würde so aussehen:

/**
* @var \Shopware\Bundle\AttributeBundle\Service\DataPersister $service
*/

$service = Shopware()->Container()->get('shopware_attribute.data_persister');

$service->persist(
	array(
		'foo_column' => $fooValue
	),
	's_categories_attributes',
	$categoryId
);

So wie ich das der Doku entnehmen kann (da kein gesonderter Hinweis existiert) ist das setzen über das ‘attribute’ Array im normalen update/create für Standard-Attribute attr1 - attr20 weiterhin kein Problem?

Bezüglich Selektion, ist es noch OK per attributes zu selektieren, oder “muss” man das ab 5.2 ausschließlich per DataLoader machen?
Ich habe z.B. eine Hilfsfunktion zum selektieren spezieller Kategorien über ein eigenes Attribut

protected function getCategoryByUniqueId($uniqueId)
    {

        $filters = array(array('property' => 'attributes.fooColumn', 'expression' => '=', 'value' => $uniqueId));

        $query = $this->getCategoryResource()->getRepository()->getListQuery($filters, array(), 1);

        return $query->getOneOrNullResult($this->getCategoryResource()->getResultMode());

    }

Das funktioniert immer noch wie gewünscht, über Shopware\Models\Category\Repository::getListQueryBuilder::after erweitere ich den QueryBuilder mit meinem eigenen Attribut, welches ich wie oben dann gewünscht selektieren kann. Wie gesagt jetzt Frage, ob es da andere “bevorzugtere” Wege gibt - freue mich über Feedback!

Schöne Grüße!
Niklas

@em_iw schrieb:

Hallo [@Jan Bücker](http://forum.shopware.com/profile/21387/Jan Bücker „Jan Bücker“)‍,

ich habe dein Beispiel getestet und komme damit auch zu guten Ergebnissen. Leider harpert es noch bei „ComboBox“-Felder mit einem Ajax-Store. Hierbei gibt die „ComboBox“ immer die Id aus nicht nicht den dazugehörigen Datensatz. Gibt es eine Dokumentation wie man den Wert korrekt setzen muss?

Grüße
Ingo Walther

Hallo Zusammen,

gibt es bereis eine Lösung für das ComboBox-Problem wie oben beschrieben. Habe nähmlich auch das Problem.

Beste Grüße,

Denis 

@spdenis schrieb:

@em_iw schrieb:

Hallo [@Jan Bücker](http://forum.shopware.com/profile/21387/Jan Bücker “Jan Bücker”)‍,

ich habe dein Beispiel getestet und komme damit auch zu guten Ergebnissen. Leider harpert es noch bei “ComboBox”-Felder mit einem Ajax-Store. Hierbei gibt die “ComboBox” immer die Id aus nicht nicht den dazugehörigen Datensatz. Gibt es eine Dokumentation wie man den Wert korrekt setzen muss?

Grüße
Ingo Walther

Hallo Zusammen,

gibt es bereis eine Lösung für das ComboBox-Problem wie oben beschrieben. Habe nähmlich auch das Problem.

Beste Grüße,

Denis

Hallo Denis,

ich konnte das Problem selbst lösen. Bei mir war das Problem, dass der Wert als String geladen wurde und nicht als Integer.

Versuche doch einmal folgendes:

me.attrField.setValue(parseInt(response.data['__attribute_my_column']));

Grüße
Ingo Walther

1 Like