Custom Fields in Mailtemplate

Hallo,

ich möchte in den E-Mail-Vorlagen meine CustomFields verwenden. Hierbei handelt es sich um Felder, die im Backend verwendet werden. Diese sollen dann beim Versand einer Mail genutzt werden.

Nach folgender Anleitung habe ich hierfür einen Decorator erstellt:

Wenn ich dann {{ myCustomData }} in meinem E-Mail-Template verwende, wird auch „Example data“ ausgegeben.

Nun möchte ich das ganze mit Custom Fields verknüpfen. Dafür habe ich die CustomFields direkt über das Plugin erstellt

public function install(InstallContext $installContext): void
    {

        $customFieldSetRepository = $this->container->get('custom_field_set.repository');
        $customFieldSetRepository->create([
            [
                'name' => 'custom_example',

                'config' => [
                    'label' => [
                        'de-DE' => 'Example Label',
                        'en-GB' => 'Example Label'
                    ]
                ],

                'relations' => [[
                    'entityName' => 'order'
                ]],

                'customFields' => [
                    [
                        'name' => 'custom_example_one',
                        'type' => CustomFieldTypes::HTML,
                        'config' => [
                            'label' => [
                                'de-DE' => 'Example 1',
                                'en-GB' => 'Example 1',
                            ],
                            'componentName' => "sw-text-editor",
                            'customFieldType' => "textEditor"
                        ]
                    ]
                ]
            ],
        ], $installContext->getContext());
    }

Die Datei AddDataToMails, die nach der Anleitung erstellt habe, sieht wie folgt aus:

<?php declare(strict_types=1);

namespace Blauband\EmailBase\Service;

use Shopware\Core\Content\Mail\Service\AbstractMailService;
use Shopware\Core\Framework\Context;
use Symfony\Component\Mime\Email;

class AddDataToMails extends AbstractMailService
{
    /**
     * @var AbstractMailService
     */
    private AbstractMailService $mailService;

    public function __construct(AbstractMailService $mailService)
    {
        $this->mailService = $mailService;
    }

    public function getDecorated(): AbstractMailService
    {
        return $this->mailService;
    }

    public function send(array $data, Context $context, array $templateData = []): ?Email
    {
        $templateData['myCustomData'] = 'Example data';


        return $this->mailService->send($data, $context, $templateData, );
    }
}

Ich weiß nicht, wie ich in die Variable $templateData[‚myCustomData‘] die Daten aus einer Customfield laden kann…

Hat hierzu jemand eine Idee?

Da musst du wohl ein Repository in dein __construct mit laden und dann über das Repository die Daten laden und der Variable zuweisen.

Die Frage ist, wieso das überhaupt notwendig ist. Wenn du das dem Entity Order zuweist, dann würde ich aus dem Bauch heraus sagen, dass du über Order.customFields darauf zugreifen können solltest. Ist wie gesagt aber nur ein Bauchgefühl. Habe den konkreten Fall nicht als Code vor Augen.

1 „Gefällt mir“

Was meinst du genau mit Entity Order zuweisen?

Meinst du damit die Anlage einer Zusatzfeldes mit einer Zuweisung zu Bestellungen (Order)?

Ja, genau, das meine ich damit.

1 „Gefällt mir“

Folgendes habe ich verwendet - klappt:

{{ order.customFields.custom_order_custom_example_one }}