Freitextfelder Einfachauswahl/Mehrfachauswahl: Eigene (Custommodels) Entitties verwenden

Hallo Community!

In der neueren Version von Shopware gibt es bei den Freitextfeldern die Möglichkeit Entities (Länder, Kunden, Versandarten…) zu referenzieren. Das Feature finde ich wirklich super, vielen Dank dafür!

Nun würde ich aber gerne meine eingene Entity verwedenden um sie als Freitextfeld zu referenzieren. Entities werden ja durch Modelklassen beschrieben. Also habe ich ein Plugin geschrieben, in dem ich ein neue CustomModel registriert habe. Meine neue Entity erscheint leider nicht zur Auswahl. Im Code habe ich auch gesehen, dass die Liste der Entities fix (statisch) ist. Ich habe dann auch mir ein Freitextfeld konfiguriert und danach meine neue Entity über die Datenbank für das neue Freitextfeld gesetzt. Leider kommt dann der Fehler:

„[Semantical Error] line 0, col 22 near ‚Shopware\CustomModels\Dir\MyNewModel‘: Error: Class ‚Shopware\CustomModels\Dir\MyNewModel‘ is not defined.“

Gibt es hier eine Möglichkeit eigene Entities zu verwenden?

Schöne Grüße,

Nikolaj Ruppert

Wie hast du den denn registriert?

Hallo ruppert,

das gleiche Problem habe ich auch aber ich finde keine Lösung.
Hast Du dein Problem schon gelöst?

Kannst Du (oder jemand andere) mir dazu helfen?

Die Shopware Version ist die 5.5.4.
Unter custom/plugins habe ich diese Ordner Struktur:

Ich bin sicher dass ich etwas falsch mache aber ich weiß nicht was ich korriegieren muss :confused:
Es gibt auch manche Dateien die ich nicht brauche, aber an diese Stelle ich verstehe nicht mehr was ich brauche.
z.B auf das Shopware Doku für das Attribute System sagt dass ich eine View brauche, aber dafür die nichts mehr erklären .

Schöne Grüße,
Sia Seraf

Hallo Sia Seraf,

ja, ich habe es dann hinbekommen. Ich habe es hier nicht gepostet weil genau nach der, von dir referenzierten Anleitung programmiert habe. Ich hatte nur einen Tipfehler gehabt. Was möchtest du den genau machen? Welche eigene Entität wird es sein und an was (Artikel, Bestellung, Position, Kunde…?) möchtest du deine Entität knüpfen? Wenn du keine View im Backend erweitern möchtest, dann brauchst du auch keine View-Datei anlegen.

Gruß, Ruppert

1 „Gefällt mir“

Hallo Ruppert,

die neue Entität soll ich mit die Artikel verknüpfen.
Wir haben ein Shop wo die Artikeln verschiedene Farben haben. Wir möchten diese verschiedenen Farben mit die Hauptfarben(wie Schwarz, Weiss usw.) zuordnen, um wenn jemand nach Schwarz sucht, alle Artikel die als Hauptfarbe schwarz haben werden angezeigt. Des wegen brauche ich eine neue Entität um die Artikeln mit  diese Hauptfarben zu verbinden.
Ich habe auf die Freitextfelder eine neue Mehrfachauswahl Attribut unter die s_articles_attributes Tabelle erstellt und diese Attribut muss ich mit diese neue Entität verbinden.
 

VG, Anastasia

Gibt es einen Grund warum du das nicht über Eigenschaften lösen kannst? Also eine Eigenschaft ‘Farbe’ erstellen und deinen Artikeln zuweisen. Dann kann man im Frontend sogar danach filtern.

Aber zu deiner Frage, der Code müsste in ertwa so aussehen:

        $service = $this->container->get('shopware_attribute.crud_service');

        //generates the database schema for the own entity
        $em = $this->container->get('models');
        $schemaTool = new SchemaTool($em);
        $schemaTool->updateSchema(
            [$em->getClassMetadata(\PathToMy\Models\Color::class)],
            true
        );

        $service->update(
            's_articles_attributes',
            'my_colors_multi_selection',
            'multi_selection',
            [
                'entity' => \PathToMy\Models\Color::class,
                'displayInBackend' => true,
                'label' => 'Farben',
            ],
            null,
            true
        );

Irgendwelche Views zu erweitern ist meiner Meinungn nach nicht notwendig.

Viel Erfolg,

Ruppert

1 „Gefällt mir“

Hallo Ruppert,

Deine Vorslag mit die Eigenschaften war sehr gut.
Mein Problem aber hier ist, dass die Eigenschaften nur für das Produkt sind und nicht für alle Varianten des Produktes.
Die Varianten sind die die ich zuorden möchte.

Ich habe jetzt in die Eigeschaften ein neues Set mit ein neues Hauptfarben Grupp erstellt. Auf die Freitextfelder habe ich auch eine neue Attridute und als Entität habe ich die Eigenschafts-Option: Shopware\Models\Property\Value verbindet.
Aber von diese Entität möchte ich nur die Hauptfarben Grupp Values anzeigen.
Derzeit sehe ich alle Values von alle Gruppen.

Weiss Du wie die Values nur von eine Eigenschaften Grupp anzeigen kann?

z.B. im Backend in die Hauptfarben Values sehe ich so was:

Kann ich anstatt ein neues Entität nur ein Grupp mit Values von eine andere Entität auswählen?
Wie mache ich das?
Ich habe auf die Dokus so was nicht gefunden.

viele Grüße,
Anastasia

Hi

ich wusste gar nicht dass man Eigenschaften in den Freitextfeldern verknüpfen kann. Daher ist die Antwort, nein -  ich weiß nicht ob man die Eigenschaften in deinem Freitextfeld auf eine Gruppe oder Ähnliches einschränken kann.

Ein Anderer Vorschlag warum erstellst du dir nicht ein Freitextfeld mit einer Combo-Auswahl, also irgendwie so:

    public function install(InstallContext $context)
    {
        $service = $this->container->get('shopware_attribute.crud_service');

        $service->update('s_articles_attributes', 'my_colors', 'combobox', [
            'label' => 'Farben',

            //user has the opportunity to translate the attribute field for each shop
            'translatable' => true,

            //attribute will be displayed in the backend module
            'displayInBackend' => true,

            //in case of combo box type, defines the selectable values
            'arrayStore' => [
                ['key' => '1', 'value' => 'Rot'],
                ['key' => '2', 'value' => 'Grün'],
                ['key' => '3', 'value' => 'Blau']
            ],
        ]);
    }

 

1 „Gefällt mir“