Zusatzfelder / Custom fields nicht mehr per DAL anlegbar

Hallo zusammen,

ich habe den Foreneintrag Custom Fields + Set Relation in Plugin erstellen sowie die Doku von Shopware Add custom field - Shopware Developer als Vorlage zur Anlage von neuen Zusatzfeldern verwendet.

Die Zusatzfelder werden grundlegend angelegt, die Konfiguration ist jedoch fehlerhaft, sodass sie im Adminbereich nicht mehr editiert werden können.

Führt man folgendes Beispiel aus der Doku aus:

$this->customFieldSetRepository->create([
    [
        'name' => 'swag_example_set',
        'config' => [
            'label' => [
                'en-GB' => 'English custom field set label',
                'de-DE' => 'German custom field set label'
            ]
        ],
        'customFields' => [
            [
                'name' => 'swag_example_size',
                'type' => CustomFieldTypes::INT,
                'config' => [
                    'label' => [
                        'en-GB' => 'English custom field label',
                        'de-DE' => 'German custom field label'
                    ],
                    'customFieldPosition' => 1
                ]
            ]
        ]
    ]
], $context);

wird das Feld zwar angelegt, ist jedoch nicht editierbar. In der Tabelle custom_field ist der Inhalt des Feldes config wie folgt:

{
    "label": {
        "de-DE": "German custom field label",
        "en-GB": "English custom field label"
    },
    "customFieldPosition": 1
}

Legt man das Feld jedoch händisch im Adminbereich an, sieht das config-Feld in der Datenbank wie folgt aus:

{
    "type": "text",
    "label": {
        "en-GB": "English custom field label"
    },
    "helpText": {
        "en-GB": null
    },
    "placeholder": {
        "en-GB": null
    },
    "componentName": "sw-field",
    "customFieldType": "text",
    "customFieldPosition": 1
}

Eingesetzte Shopware-Version 6.4.0.0. Hat sich da irgendetwas geändert, muss man bei der Anlage irgendetwas anders eingeben?

Viele Grüße,
Malte

Im Slack hat mir jemand geantwortet, dass folgendes Beispiel funktionieren sollte:

/**
 * @var Context
 */
$context = Context::createDefaultContext();
$customFieldSetRepo = $this->container->get('custom_field_set.repository');

$customFieldSetRepo->create([
    [
        'name' => 'custom_set',
        'config' => [
            'label' => [
                'en-GB' => 'specific accountsettings',
                'de-DE' => 'Spezifische Kontoeinstellungen'
            ]
        ],
        'customFields' => [
            [
                'name' => 'custom_set_field',
                'type' => CustomFieldTypes::BOOL,
                'config' => [
                    'label' => [
                        'en-GB' => 'english label',
                        'de-DE' => 'Deutsches Label'
                    ],
                    'customFieldPosition' => 1
                ]
            ]
        ],
        'relations' => [
            [
                'entityName' => 'customer'
            ]
        ]
    ]
], $context);

Allerdings ist es bei mir auch in dem Fall so, dass ich das Zusatzfeld im Adminbereich nicht konfigurieren kann, also unter Einstellungen > System > Zusatzfelder > Bearbeiten > und dann unten das entsprechende Zusatzfeld editieren > Konfiguration ist kaputt.

In der Tabelle hat das config-Feld folgenden Wert:

{
   "label": {
        "de-DE": "Deutsches Label",
        "en-GB": "english label"
    },
    "customFieldPosition": 1
}

Mag mal jemand testen, ob das bei ihm/ihr funktioniert?

Liebe Grüße,
Malte

Hab jetzt auf 6.4.3.0 aktualisiert, der Fehler besteht nach wie vor.

Mag das bitte einmal jemand bei sich testen, ob es funktioniert? Also Anlage eines Custom Fields wie oben beschrieben und hinterher das Custom Field im Admin editieren (also nicht das Zusatzfeld zuweisen, sondern das Zusatzfeld an sich editieren; bei mir fehlt dann der Typ und der Name/das Label lässt sich nicht ändern).

Shopware Issuetracker Hab ein Issue erstellt.

Schau dir doch einfach mal den Request beim anlegen von Custom Fields an. Bei die fehlt der „componentName“ und „customFieldType“ in deinem config Array.

Bildschirmfoto 2021-08-13 um 08.57.03

1 „Gefällt mir“

Dann ist aber a) die Beschreibung in der Dokumentation falsch („The type is important to mention, because the administration will use this information to display a proper field.“. Gemeint ist damit tatsächlich der Key „type“ auf der Ebene des config-Keys, nicht der „customFieldType“. customFieldType und componentName finden in der Doku gar keine Erwähnung) und b) die bisherigen Beispiele aus Forum und Co., die allesamt ohne die Angabe der beiden Infos zu funktionieren scheinen. Oder es hat einfach nie jemand geprüft, ob die Felder dann tatsächlich auch editierbar sind (weil zuordbar sind sie ja und es können Werte vergeben werden). Wobei das wieder entgegen der Aussage in der Doku steht, dass der type benötigt wird, um ein entsprechendes Feld im Admin zu rendern.

Aber ja, damit funktioniert es! Danke :wink:

War das schon immer so oder hat sich das irgendwann geändert, dass man die speziell mit angeben muss? Weil man findet so viele Beispiele, wo es nicht mit angegeben ist und wo es zu funktionieren scheint. Aber wie gesagt, vielleicht haben die auch nie probiert, das Feld dann im Adminbereich zu editieren…

Ich würde sagen im Zweifel so machen wie es die Applikation tut und nicht wie es möglicherweise falsch in der Doku steht.