Vom virtuellen Media-Pfad zum Shopware\Bundle\StoreFrontBundle\Struct

Hallo zusammen,

ich arbeite derzeit an einem Plugin, welches u.a. ein Einkaufswelten-Element beinhaltet. Mittels des MediaSelectionFields kann im Backend (Konfiguration Einkaufswagen-Element) ein Bild ausgewählt werden. Über das MediaSelectionField erhalte ich allerdings lediglich den Pfad zum Medium, nicht aber das vollständige Struct inkl. z.B. bereits vorhandener Thumbnails/Retina-Sources, etc. Um mein Frontend-Template responsive gestalten zu können, hätte ich gerne ein Shopware\Bundle\StoreFrontBundle\Struct, finde aber keinen Constructor bzw. irgendeinen Service, welcher den virtuellen Media-Pfad für mich in dieses Struct überführt? Könnte ihr mir hier einen Tipp geben?

 

Vielen Dank und Grüße,

Jonas

Nach sehr langem Studium des Cores habe ich zufällig die Antwort direkt nach dem Posten hier im Forum gefunden. Über die File-ID und den richtigen MediaService (habe zuvor mit ‘shopware_media.media_service’ gearbeitet) bekomme komme ich zum gewünschten Resultat:

$context = $this->get('shopware_storefront.context_service')->getShopContext();
$mediaService = Shopware()->Container()->get('shopware_storefront.media_service');
$mediaService->get(<>, $context);

 

Gruß, Jonas

Da meine letzte Antwort noch nicht die eigentliche Frage beantwortet und ich den Reverse-Lookup im einfachsten Fall ebenso benötige, hier meine Variante vom Media-Pfad, über die ID zum Struct:

$mediaId = Shopware()->Db()->fetchOne("SELECT id FROM s_media WHERE path = ?", [<>]);
$context = $this->get('shopware_storefront.context_service')->getShopContext();
$mediaService = $this->get('shopware_storefront.media_service');
$mediaService->get($mediaId, $context);

Oder gibt es hier schönere Alternativen, die keinen direkten DB-Zugriff erfordern?

Hast du das mal über die Models versucht?

Ungetestet aber das hier habe ich im Backend controller von Shopware gefunden:

 

 $this-\>mediaRepository = Shopware()-\>Models()-\>getRepository('Shopware\Models\Media\Media'); $mediaQuery = $this-\>getMediaRepository()-\>getMediaByPathQuery($media\_path); $mediaModel = $mediaQuery-\>getOneOrNullResult();

 

Das hier ist das statement im Model, scheint das richtige zu sein:

 

 public function getMediaByPathQueryBuilder($path) { $builder = $this-\>getEntityManager()-\>createQueryBuilder(); $builder-\>select(array('media')); $builder-\>from('Shopware\Models\Media\Media', 'media') -\>where('media.path = ?1') -\>setParameter(1, $path); return $builder; }
1 „Gefällt mir“

Vielen Dank, das ist perfekt!