Export funktioniert nicht mit Custom Plugin

Hallo an die Community,

erstmal danke für die vielen hilfreichen Beiträge hier. Ich konnte bereits einige sehr knifflige Probleme mit eurer Hilfe lösen.
Jetzt stehe ich allerdings vor einem Problem, dass nicht ganz so leicht zu lösen ist.

Ich habe für einen Kunden ein Plugin geschrieben, dass es ihm ermöglicht einige sehr personalisierte Daten in den Artikeldetails anzugeben. Einige davon sind für das Frontend bestimmt und andere wiederum nur für Exporte gedacht.

Das funktioniert auch alles wirklich gut und wir sind mit dem Ergebnis bisher sehr zufrieden, jedoch lassens ich die Artikel mit den „Custom Attributen“ nicht exportieren.

Diese Attribute habe ich mit dem CRUD service angelegt, wie in den Docs beschrieben:

private function addAttributes()
{
    $service = Shopware()->Container()->get('shopware_attribute.crud_service');

    $customColumns = [
        'ausfuehrung' => [
            'table' => 's_articles_attributes',
            'name' => 'ks_ausf',
            'type' => 'textfield',
            'params' => [
                'label' => 'Ausführung',
                'supportText' => 'Die Ausführung des Produktes',
                'helpText' => 'Die Ausführung des Produktes',
                'translatable' => true,
                'displayInBackend' => true,
                'entity' => '',
                'position' => 500,
                'custom' => false
            ]
        ],
        'funktion' => [
            'table' => 's_articles_attributes',
            'name' => 'ks_funk',
            'type' => 'textfield',
            'params' => [
                'label' => 'Funktion',
                'supportText' => 'Die Funktion des Produktes',
                'helpText' => 'Die Funktion des Produktes',
                'translatable' => true,
                'displayInBackend' => true,
                'entity' => '',
                'position' => 501,
                'custom' => false
            ]
        ],
        'lieferumfang' => [
            'table' => 's_articles_attributes',
            'name' => 'ks_lieferumfang',
            'type' => 'textfield',
            'params' => [
                'label' => 'Lieferumfang',
                'supportText' => 'Der enthaltene Lieferumfang des Produktes',
                'helpText' => 'Der enthaltene Lieferumfang des Produktes',
                'translatable' => true,
                'displayInBackend' => true,
                'entity' => '',
                'position' => 502,
                'custom' => false
            ]
        ],
        'dnHauptwarengruppe' => [
            'table' => 's_articles_attributes',
            'name' => 'ks_dn_hauptwarengruppe',
            'type' => 'textfield',
            'params' => [
                'label' => 'Hauptwarengruppe',
                'supportText' => 'Die Hauptwarengruppe',
                'helpText' => 'Hauptwarengruppe',
                'translatable' => true,
                'displayInBackend' => true,
                'entity' => '',
                'position' => 600,
                'custom' => false
            ]
        ],
        'dnWarengruppe' => [
            'table' => 's_articles_attributes',
            'name' => 'ks_dn_warengruppe',
            'type' => 'textfield',
            'params' => [
                'label' => 'Warengruppe',
                'supportText' => 'Die Warengruppe',
                'helpText' => 'Warengruppe',
                'translatable' => true,
                'displayInBackend' => true,
                'entity' => '',
                'position' => 601,
                'custom' => false
            ]
        ],
        'dnKurztext1' => [
            'table' => 's_articles_attributes',
            'name' => 'ks_dn_kurztext_1',
            'type' => 'textfield',
            'params' => [
                'label' => 'Kurztext 1',
                'supportText' => 'Kurztext 1',
                'helpText' => 'Kurztext 1',
                'translatable' => true,
                'displayInBackend' => true,
                'entity' => '',
                'position' => 602,
                'custom' => false
            ]
        ],
        'dnKurztext2' => [
            'table' => 's_articles_attributes',
            'name' => 'ks_dn_kurztext_2',
            'type' => 'textfield',
            'params' => [
                'label' => 'Kurztext 2',
                'supportText' => 'Kurztext 2',
                'helpText' => 'Kurztext 2',
                'translatable' => true,
                'displayInBackend' => true,
                'entity' => '',
                'position' => 603,
                'custom' => false
            ]
        ],
        'dnMengeneinheit' => [
            'table' => 's_articles_attributes',
            'name' => 'ks_dn_mengeneinheit',
            'type' => 'textfield',
            'params' => [
                'label' => 'Mengeneinheit',
                'supportText' => 'Mengeneinheit',
                'helpText' => 'Mengeneinheit',
                'translatable' => true,
                'displayInBackend' => true,
                'entity' => '',
                'position' => 604,
                'custom' => false
            ]
        ],
        'dnAusschreibungstext' => [
            'table' => 's_articles_attributes',
            'name' => 'ks_dn_ausschreibungstext',
            'type' => 'textfield',
            'params' => [
                'label' => 'Ausschreibungstext',
                'supportText' => 'Ausschreibungstext',
                'helpText' => 'Ausschreibungstext',
                'translatable' => true,
                'displayInBackend' => true,
                'entity' => '',
                'position' => 605,
                'custom' => false
            ]
        ]
    ];

    foreach ($customColumns as $col) {
        $service->update($col['table'], $col['name'], $col['type'], $col['params']);
    }

    // Rebuild attribute models
    $metaDataCache = Shopware()->Models()->getConfiguration()->getMetadataCacheImpl();
    $metaDataCache->deleteAll();

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

Ich habe auch schon die entsprechenden Methoden ausprobiert, die hier in den Foren oder sonstwo im Netz zu finden sind, aber leider bekomme ich immer wieder den Fehler, dass im Doctrine Model das entsprechende Feld „attributeKsDnKurztext1“ nicht assoziiert ist:

[Semantical Error] line 0, col 2647 near ‚ksDnKurztext1‘: Error: Class Shopware\Models\Attribute\Article has no field or association named ksDnKurztext1

Vielleicht gibt es hier ja jemanden, der das Problem auch schon einmal hatte und mir weiterhelfen kann. Interessanterweise meckert der Export nicht bei den anderen Feldern, die davor kommen müssten (Hauptwarengruppe, Warengruppe) sondern erst bei dem Kurztext.

Methoden, die ich schon ausprobiert habe:

  1. Doctrine Model neu generieren lassen (via Freitextfeldverwaltung)
  2. Cache clear im Backend
  3. Cache clear via Terminal (php bin/console sw:cache:clear)
  4. Cache move via Terminal

Meine Shopware Installation läuft auf Version 5.3.2 und alle verwendeten Plugins sind auf dem neuesten Stand.

Mittlerweile komme ich nicht mehr weiter und kann leider auch keinen Fehler ausmachen, der das auslösen könnte. Wie gesagt funktioniert sonst alles, was ich eingebaut habe einwandfrei, die Datenbank spiegelt auch den Stand der Daten exakt wieder und die Ausgabe ist ebenso problemlos (auch via API).

Über einen Hinweis was ich noch versuchen kann wäre ich sehr dankbar.

Hallo m_engelen,

 

ich hatte das Problem selbst auch schon und kann Dir sagen, es liegt am Namen des Attributs.

Die Namen werden ja im Snake Case angegeben. Es gibt dann aber ein Problem bei der Umwandlung von Camelcase zurück zum Snake Case,

Falsch: ks_dn_kurztext_1 wird zu:  KsDnKurztext1 und zurück: ks_dn_kurztext1

Richtig ist daher : ks_dn_kurztext1

Es gibt halt keine groß geschriebene 1 die Deiner Benamung entsprechen könnte.

 

Viele Grüße,

Markus

 

1 „Gefällt mir“

Hallo MrMDeluxe,

Vielen Dank für die Antwort. Das ist eigentlich komplett logisch, komisch, dass ich nicht selbst darauf gekommen bin!
Mit einem Update des Plugins und “Neubenamung” der Columns/Attribute konnte ich das Problem lösen.