FrazeColderFrazeColder MemberComments: 2 Received thanks: 0 Member since: January 31

Hallo zusammen,

ich habe ein Problem, was sich aber in mehrere kleine Probleme zerlegen lässt. Leider habe ich allerdings noch keine Antwort auf mein Problem gefunden und ich zweifel an der Umsetzbarkeit!

Mein Ziel ist, dass ich gerne weitere Felder (als Pflichtfelder) beim Registrierungsformlar hinzufügen möchte sowie ein File Upload (Bild & PDF). Diese Felder sollen natürlich auch übermittelt und gespeichert werden. Ich habe zwar im Backend schon Custom Fields angelegt, muss die jetzt allerdings noch im Frontend anzeigen lassen und natürlich auch in der Datenbank speichern lassen.

Die Frage ist, wie mache ich das. Ich finde dazu leider keine Anleitung im Netz. Shopware 6 ist ja auch noch nicht so verbreitet.

MfG und Vielen Dank!

Answers

  • MoorleicheMoorleiche MemberComments: 276 Received thanks: 51 Member since: August 2019
    <?php declare(strict_types=1);
    
    namespace Moorl\VerpackG\Subscriber;
    
    use Shopware\Core\Checkout\Customer\CustomerEvents;
    use Shopware\Core\Framework\Translation\Translator;
    use Shopware\Core\System\SystemConfig\SystemConfigService;
    use Symfony\Component\EventDispatcher\EventSubscriberInterface;
    
    class EventSubscriber implements EventSubscriberInterface
    {
    
        private $systemConfigService;
        private $translator;
    
        public function __construct(SystemConfigService $systemConfigService, Translator $translator)
        {
            $this->systemConfigService = $systemConfigService;
            $this->translator = $translator;
        }
    
        public static function getSubscribedEvents(): array
        {
            return [
                CustomerEvents::MAPPING_REGISTER_CUSTOMER => 'addVerpackG'
            ];
        }
    
        public function addVerpackG($event): void
        {
    
            $data = $event->getInput();
    
            $customer = $event->getOutput();
    
            if (!isset($customer['customFields'])) {
                $customer['customFields'] = [];
            }
    
            $customer['customFields']['moorl_verpack_g_customer_active'] = ($data->get('verpackG') !== null);
    
            $event->setOutput($customer);
    
        }
    
    }

    Es gibt ein Event dafür, bin mir ziemlich sicher, dass auch der File Upload damit möglich ist. CustomFields auf jeden Fall ;)

     

     

    Thanked by 1kull_martin
  • FrazeColderFrazeColder MemberComments: 2 Received thanks: 0 Member since: January 31

    Wo finde ich das in der Dokumentation?

    Also muss ich als erstes das Custom Field im Backend anlegen und dann den Code personalisieren? Das wars?

  • FrazeColderFrazeColder MemberComments: 2 Received thanks: 0 Member since: January 31

    Vielen Dank!

    Hast Du noch einen Tipp zum File Upload? Da Blicke ich leider gar nicht durch.. Wie funktioniert das mit dem speichern des Dokumentes und wie kann ich es im Frontend und im Admin Dashboard wieder zur Verfügung stellen?

  • MoorleicheMoorleiche MemberComments: 276 Received thanks: 51 Member since: August 2019

    @FrazeColder
    Also ich kann dir den Tipp geben, dass ich bei der selben Problemstellung (Dokument Speichern) mir einfach angeschaut habe was im Shopware core passiert, wenn ich eine Datei im Medien Manager hoch lade :D

  • patchee500patchee500 MemberComments: 13 Received thanks: 9 Member since: February 9

    Vielen Dank!

    Hast Du noch einen Tipp zum File Upload? Da Blicke ich leider gar nicht durch.. Wie funktioniert das mit dem speichern des Dokumentes und wie kann ich es im Frontend und im Admin Dashboard wieder zur Verfügung stellen?

    Falls noch jemand Interesse an einem rudimentären Ansatz hat, hochgeladene Bilder (via Formularupload) der Medien Ansicht hinzuzufügen, folgendes hat bei mir funktioniert:
    Zuerst Media Entity via Repository speichern und dann persistFileToMedia entsprechend aufrufen:

    $this->mediaRepository->upsert(
        [
            [
                'id' => $customImageId,
                'mediaFolderId' => $customImageFolderId,
                'name' => 'my_custom_image'
            ]
        ],
        $systemContext
    );
    
    $mediaFile = new MediaFile(
        $_FILES[$image]['tmp_name'],
        $_FILES[$image]['type'],
        $extension,
        $_FILES[$image]['size']
    );
    
    $this->fileSaver->persistFileToMedia($mediaFile, 'my_custom_image', $customImageId, $systemContext);

     

Sign In or Register to comment.