Gelöst: Plugin Backup Bild Upload/Auswahl

Hallo,

ich habe in meinem Plugin Backend eine Möglichkeit ein Bild hochzuladen oder auszuwählen. Dies sieht in der View so aus:

fields: {
    id: { },
    active: { fieldLabel: 'Aktiviert' },
    image: {
        xtype: 'shopware-media-field',
        fieldLabel: 'Bild',
        valueField: 'id',
        allowBlank: false
    },
    text: { fieldLabel: 'Text' }
}

Ich habe mir das von hier abgeschaut:

https://forum.shopware.com/discussion/41441/sw-5-2-plugin-entwicklung-backend-bild-upload

So jetzt werden ID in der DB Tabelle gespeichert! Wie bekomme ich bei der Frontend Ausgabe daraus Bilder.

Shopware scheint das nicht zu behandeln ?!

Danke :slight_smile:

Hallo Freunde :),

ist die Frage nicht verständlich oder bin ich der einziege der im Backend Bilder als IDs speichert? Hab das so aus dem Link oben.

Ich könnte natürlich in der DB nach der ID suchen und Pfad lesen, aber da muss ich schon was eigentes basteln. Wie sieht das von Shopware Seite aus. 

Ich komme von Joomla und da kann man Problem los in einem Formular „Medien“ speichern und auf de Seite vorne ausgeben. Sorry aber, hab so ein geführl als ob Shopware in Beta Phase ist, alles muss man im Cor nachschauen :).

Grüße

Möglichkeit A (einfach)
Bei valueField gibst du statt ‘id’ einfach ‘path’ an.
Im Template nutzt du dann {media path=$hierStehtDerPath} drin. Dann wandelt es dir den kurzen Path zu einer vollständigen URL, das kannst du im img-Tag verwenden

Möglichkeit B
Du nutzt den MediaService um dir mit der Bild ID die Daten des Bildes zu holen. Die Daten schreibstu du dann in eine Template-Variable. (Alternativ nutzt du noch den LegacyStructConverter um aus dem Bild-Struct ein einfaches assoziatives Array zu machen)

Viele Grüße

 

Jo, danke für die Aufmerksamkeit :slight_smile:

A
Wen der „Pfad“ statt der „ID“ gespeichert wird, dann lädt Shopware nicht das Bild im Backend, in diesem Media Form Element. Deswegen wird auch in dem oben Link zu „ID“ graten. (Das ist ja auch eine komische Funkiotn, man speichert das Bild, weiß aber beim nächsten betrachten nicht welches das ist. Hallo :slight_smile: )
Oder geht das anders, Pfad speichern und im Backend wird das Bild angezeigt?

B
Könntest du mir auch ein Script zeigen, bzw. hier wird nicht auf die ID eingegenagen MediaService.
Wocher weiß ich welche Funktino das ist, um aus der ID ein Pfad zu bekommen? ->getPathById() ? ->getUrlById() ? Wo kann ich das nachschauen.

Möglichkeit A: Statt xtype:‚shopware-media-field‘ probier’ mal xtype:‚mediaselectionfield‘.
 

image: {
    xtype: 'mediaselectionfield',
    fieldLabel: 'Bild',
    allowBlank: false,
    multiSelect: false,
},

Möglichkeit B: Ich meine den MediaService im StoreFrontBundle nicht den im MediaBundle.
Mit der get-Funktion erhälst du ein MediaStruct: shopware/MediaService.php at 5.4 · shopware/shopware · GitHub

Viele Grüße

Super Danke, hat geholfen. 

Falls jemand auch so eine Frage hat, hier ist der Code dazu.

  1. Die Bilder sind als IDs in der Datenbank gespeichert.
  2. Mit Hilfe der Funktion $mediaService->get(), wird der Pfad des Bilder ermittelt. 

Dieser Code durchläuft eine Array und tauscht die Image-ID durch Image-Pfad aus. Die For-Schleife ist eigentlich selbsterklärend. Die wichtigen Funktionen und Objekte sind $mediaService, $context und $mediaService->get().

/* @var \Shopware\Bundle\StoreFrontBundle\Service\Core\MediaService $mediaService */
$mediaService = $this->container->get('shopware_storefront.media_service');
/* @var \Shopware\Bundle\StoreFrontBundle\Struct\ShopContext $context */
$context = $this->container->get('shopware_storefront.context_service')->getShopContext();

// Set image path by (image) id
foreach ($answers as $key => $answer) {
    /* @var \Shopware\Bundle\StoreFrontBundle\Struct\Media $media */
    $media = $mediaService->get($answer['image'], $context);

    if ($media) {
        $answers[$key]['image'] = $media->getPath();
    }
}