DenKon26DenKon26 MemberComments: 87 Received thanks: 7 Member since: August 2015 edited October 18

Hallo,

 

Ich probiere gerade über ein Plugin custom Fields und ein custom Field set anzulegen.

Das klappt soweit mit folgendem Code:

 

$customFieldSetRepository = $this->container->get('custom_field_set.repository');

$customFieldSetRepository->create([
    [
        'name' => 'my_test_logos',
        'config' => [
            'label' => [
                'de-DE' => 'Test Logos',
                'en-GB' => 'test logos'
                ]
            ],
        'customFields' => [
            [
                'name' => 'test_logo1_url',
                'type' => CustomFieldTypes::TEXT,
                'config' => [
                    'label' => [
                        'de-DE' => 'Artikel Logo 1',
                        'en-GB' => 'Article logo 1'
                    ],
                    'componentName' => "sw-media-field",
                    'customFieldType' => "media"
                ]
            ],
            [
                'name' => 'test_logo1_tooltip',
                'type' => CustomFieldTypes::TEXT
            ]
        ]
    ]
], $installContext->getContext());

 

Nun habe ich im Code herausgefunden, dass über einen Parameter "relations" eine custom_field_set_relation erzeugt werden kann.

 

Wie kriege ich es also nun (am besten mit Codebeispiel) hin, beim Erstellen dieses Custom Field Sets auch gleichzeitig eine Relation auf "product" zu erzeugen?

 

$customFieldSetRepository = $this->container->get('custom_field_set.repository');

$customFieldSetRepository->create([
    [
        'name' => 'my_test_logos',
        'config' => [
            'label' => [
                'de-DE' => 'Test Logos',
                'en-GB' => 'test logos'
                ]
            ],
        'customFields' => [
            [
                'name' => 'test_logo1_url',
                'type' => CustomFieldTypes::TEXT,
                'config' => [
                    'label' => [
                        'de-DE' => 'Artikel Logo 1',
                        'en-GB' => 'Article logo 1'
                    ],
                    'componentName' => "sw-media-field",
                    'customFieldType' => "media"
                ]
            ],
            [
                'name' => 'test_logo1_tooltip',
                'type' => CustomFieldTypes::TEXT
            ]
        ],
        'relations' => [
            // was muss hier rein um eine relation zu "product" anzulegen?
        ]
    ]
], $installContext->getContext());

 

 

Vielen Dank im Voraus!

 

Grüße

Dennis

1 Answer

  • KrispinKrispin MemberComments: 127 Received thanks: 37 edited October 30 Member since: September 2018

    Hi Dennis,

    der JSON-String sieht dann folgender Maßen zu aus:

     

    {  
       "id":"b115ccb2e28c4465be04e634e5a39369",
       "name":"migration_tdztrz5656_product",
       "config":{  
          "label":{  
             "de-DE":"Product migration custom fields (attributes)"
          },
          "translated":true
       },
       "relations":[  
          {  
             "id":"9afdfcd84c5248e49d3ce176e6a91cc7",
             "entityName":"product"
          }
       ],
       "customFields":[  
          {  
             "id":"f0ecc93a01e74955840bd8e0d862418e",
             "name":"migration_tdztrz5656_product_attr2",
             "type":"text",
             "config":{  
                "componentName":"sw-field",
                "label":{  
                   "de-DE":"Freitext-2"
                },
                "helpText":{  
                   "de-DE":"Freitext zur Anzeige auf der Detailseite"
                },
                "customFieldPosition":2,
                "type":"text",
                "customFieldType":"text"
             }
          }
       ]
    }

    Somit bei dir dann in PHP:

    'relations' => [
        [
           'id' => // eine UUID,
           'entityName' => 'product'
        ]
    ]

    Hoffe das hilft dir.

    Gruß

    Krispin

    Quote
    Accepted Answer
  • Accepted Answer

Answers

  • KrispinKrispin MemberComments: 127 Received thanks: 37 edited October 30 Member since: September 2018

    Hi Dennis,

    der JSON-String sieht dann folgender Maßen zu aus:

     

    {  
       "id":"b115ccb2e28c4465be04e634e5a39369",
       "name":"migration_tdztrz5656_product",
       "config":{  
          "label":{  
             "de-DE":"Product migration custom fields (attributes)"
          },
          "translated":true
       },
       "relations":[  
          {  
             "id":"9afdfcd84c5248e49d3ce176e6a91cc7",
             "entityName":"product"
          }
       ],
       "customFields":[  
          {  
             "id":"f0ecc93a01e74955840bd8e0d862418e",
             "name":"migration_tdztrz5656_product_attr2",
             "type":"text",
             "config":{  
                "componentName":"sw-field",
                "label":{  
                   "de-DE":"Freitext-2"
                },
                "helpText":{  
                   "de-DE":"Freitext zur Anzeige auf der Detailseite"
                },
                "customFieldPosition":2,
                "type":"text",
                "customFieldType":"text"
             }
          }
       ]
    }

    Somit bei dir dann in PHP:

    'relations' => [
        [
           'id' => // eine UUID,
           'entityName' => 'product'
        ]
    ]

    Hoffe das hilft dir.

    Gruß

    Krispin

    Quote
    Accepted Answer
  • mdswmdsw MemberComments: 135 Received thanks: 5 Member since: June 2017

    Gibt es hierzu ein How To? Wo muss die JSON liegen? Was ist noch notwendig?

  • KrispinKrispin MemberComments: 127 Received thanks: 37 Member since: September 2018

    Hi mdsw,

    die JSON habe ich nur dazu geschrieben, da dies genutzt werden kann um per JSON-API-Call die Daten zu erstellen.
    Wenn man das in PHP macht, wie bei DenKon26, dann muss man daraus ein Array machen (wie auch in meiner Antwort beschrieben).
    Hoffe das hilft dir weiter.

    Gruß

    Krispin

    Thanked by 1mdsw
  • mdswmdsw MemberComments: 135 Received thanks: 5 Member since: June 2017

    Achso, das macht man also einfach wieder in der Lifecycle-Methode InstallContext. Einen CRUD-Service oder sowas gibt es nicht?!

  • KrispinKrispin MemberComments: 127 Received thanks: 37 Member since: September 2018

    Hi mdsw,

    wenn man das über ein Plugin machen möchte, kann man das am Besten über das DAL machen.
    Da muss man dann kein JSON oder ähnliches schreiben, sondern man erstellt das Object per Array und speichert seine Daten über das Repository (wie es DenKon26 auch gemacht hat). Siehe Doku: https://docs.shopware.com/en/shopware-platform-dev-en/internals/core/data-abstraction-layer/write?category=shopware-platform-dev-en/internals/core/data-abstraction-layer

    Gruß

    Krispin

Sign In or Register to comment.