# MediaService -&gt; virtuellen Pfad ausgeben

**URL:** https://forum.shopware.com/t/mediaservice-gt-virtuellen-pfad-ausgeben/32798
**Category:** Programmierung
**Created:** [6. Dezember 2015 um 12:24 UTC](https://forum.shopware.com/t/mediaservice-gt-virtuellen-pfad-ausgeben/32798 "2015-12-06T12:24:52Z")
**Posts on this page:** 12
**Page:** 1

<div class="post-metadata">

### Author: ![HEPI](https://avatars.discourse-cdn.com/v4/letter/h/a87d85/32.png) [@HEPI](https://forum.shopware.com/u/HEPI)
#### Post date: [6. Dezember 2015 um 12:24 UTC](https://forum.shopware.com/t/mediaservice-gt-virtuellen-pfad-ausgeben/32798/1 "2015-12-06T12:24:52Z")

</div>

Hallo, möchte auf ein Bild zugreifen. Der Pfad ist ja nicht wie in der DB hinterlegt, es wird ein “virtual paths” angelegt. Jetzt muss ich ja diesen Pfad erstellen, damit ich im tpl drauf zugreifen kann. In der Bootstrap habe ich geschrieben: ` $path = $subcat[$n]['path']; $mediaService = $container-\>get('shopware\_media.media\_service'); $url = $mediaService-\>getUrl($path); ` Aber der gibt mir einen Fehler aus. Fatal error: Call to a member function getUrl() on null in …/html/engine/Shopware/Plugins/Local/Frontend/HPCategoryListing/Bootstrap.php on line 62 503 Service Unavailable Bestimmt habe ich wieder etwas falsch verstanden. Würde mich freuen, wenn mir wieder jemand helfen könnte. Gruß

---

<div class="post-metadata">

### Author: ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)
#### Post date: [6. Dezember 2015 um 12:57 UTC](https://forum.shopware.com/t/mediaservice-gt-virtuellen-pfad-ausgeben/32798/2 "2015-12-06T12:57:34Z")

</div>

Überprüfe mal deine path Variable. Die scheint leer zu sein!

---

<div class="post-metadata">

### Author: ![HEPI](https://avatars.discourse-cdn.com/v4/letter/h/a87d85/32.png) [@HEPI](https://forum.shopware.com/u/HEPI)
#### Post date: [6. Dezember 2015 um 13:14 UTC](https://forum.shopware.com/t/mediaservice-gt-virtuellen-pfad-ausgeben/32798/3 "2015-12-06T13:14:07Z")

</div>

Das Problem ist, ich weiß nicht, wie ich die “MediaService.php” in meine Bootstrap einbinde, damit ich auf die Klasse zugreifen kann. Den virtuellem Pfad, um auf das Bild zugreifen zu können, habe ich jetzt selber geschrieben: [code] $pathMD = md5($subcat[$n][‘path’]); $vPath1 = substr($pathMD, 0, 2); $vPath2 = substr($pathMD, 2, 2); $vPath3 = substr($pathMD, 4, 2); $temp = explode(’/’, $subcat[$n][‘path’]); for ($i=0; $i\<count .="$temp[$i].’/’;" funktioniert auch. aber wie bekomme ich den code ans laufen in der fragestellung hatte\>

---

<div class="post-metadata">

### Author: ![TeichDatensysteme](https://avatars.discourse-cdn.com/v4/letter/t/43a26b/32.png) [@TeichDatensysteme](https://forum.shopware.com/u/TeichDatensysteme)
#### Post date: [7. Dezember 2015 um 14:30 UTC](https://forum.shopware.com/t/mediaservice-gt-virtuellen-pfad-ausgeben/32798/4 "2015-12-07T14:30:55Z")

</div>

Der Media Service kann nicht über $container instanziiert werden, weil - die Variable bzw. das passende Objekt in Deinem Kontext gar nicht vorhanden ist. Für die Bootstrap könnte es so aussehen (Zugriff über das Shopware Singleton) ` $mediaService = Shopware()-\>Container()-\>get('shopware\_media.media\_service'); $path = $subcat[$n]['path']; $url = !empty($path) ? $mediaService-\>getUrl($path) : $path; ` Schöne Grüße, Niklas

---

<div class="post-metadata">

### Author: ![HEPI](https://avatars.discourse-cdn.com/v4/letter/h/a87d85/32.png) [@HEPI](https://forum.shopware.com/u/HEPI)
#### Post date: [8. Dezember 2015 um 02:03 UTC](https://forum.shopware.com/t/mediaservice-gt-virtuellen-pfad-ausgeben/32798/5 "2015-12-08T02:03:00Z")

</div>

Super - funktioniert und verstanden. Vielen Dank !

---

<div class="post-metadata">

### Author: ![LiquidEddy](https://avatars.discourse-cdn.com/v4/letter/l/dc4da7/32.png) [@LiquidEddy](https://forum.shopware.com/u/LiquidEddy)
#### Post date: [3. April 2016 um 00:16 UTC](https://forum.shopware.com/t/mediaservice-gt-virtuellen-pfad-ausgeben/32798/6 "2016-04-03T00:16:31Z")

</div>

ich häng mich mal dran an die Frage

wenn ich im Backend ein Bild hochlade. Kenn ich ja den Pfad und Bildnamen nicht! Vorallem wenn ich viele Bilder hochlade will ja nicht jedes Bild per Hand bennennen.

Wie erhalte ich den Bildnamen und den&nbsp;Pfad programatisch. Im Tutorial wird ja angenommen das der Pfad bereits bekannt ist&nbsp;

&nbsp;

```
The following code snippets should be self-explanatory. They assume you already retrieved both the virtual $path from the Media entity and the $mediaService instance from the DI container:

$path = 'media/image/my-fancy-image.png';
$mediaService = $container->get('shopware_media.media_service');

```

$path = ‘media/image/my-fancy-image.png’;  
ist mir ja völlig unbekannt

&nbsp;

Gibt es be spezielle Methode dazu die den $path beim Hochladen wiedergibt?

---

<div class="post-metadata">

### Author: ![LiquidEddy](https://avatars.discourse-cdn.com/v4/letter/l/dc4da7/32.png) [@LiquidEddy](https://forum.shopware.com/u/LiquidEddy)
#### Post date: [10. April 2016 um 14:00 UTC](https://forum.shopware.com/t/mediaservice-gt-virtuellen-pfad-ausgeben/32798/7 "2016-04-10T14:00:42Z")

</div>

und keiner eine Idee wie der Media Service den Dateinamen ausgibt?&nbsp;

&nbsp;

&nbsp;

---

<div class="post-metadata">

### Author: ![RainerF](https://avatars.discourse-cdn.com/v4/letter/r/77aa72/32.png) [@RainerF](https://forum.shopware.com/u/RainerF)
#### Post date: [26. Mai 2017 um 23:06 UTC](https://forum.shopware.com/t/mediaservice-gt-virtuellen-pfad-ausgeben/32798/8 "2017-05-26T23:06:34Z")

</div>

Wer die Funktion mal außerhalb ohne Zugriff auf die Klasse braucht, hier die Kurzversion:

```
$path = ltrim($path, "/");
$path_elements = explode("/", $path);
$path_info = pathinfo($path);
$path_md5 = md5($path);
$path = array_slice(str_split($path_md5, 2), 0, 3);
$path = $path_elements[0]."/".$path_elements[1]."/".join("/", $path)."/".$path_info['basename'];
$path = '//'.$_SERVER['HTTP_HOST'].'/'.$path;

```

&nbsp;

---

<div class="post-metadata">

### Author: ![derwunner](https://avatars.discourse-cdn.com/v4/letter/d/e5b9ba/32.png) [@derwunner](https://forum.shopware.com/u/derwunner)
#### Post date: [27. Mai 2017 um 17:32 UTC](https://forum.shopware.com/t/mediaservice-gt-virtuellen-pfad-ausgeben/32798/9 "2017-05-27T17:32:25Z")

</div>

Hallo,

&nbsp;

der Media Service sollte da sein, schließlich versuchst in einem Event darauf zuzugreifen. Du solltest auch

```
$this->container->get('shopware_media.media_service')

```

Anstatt von

```
$container->get('shopware_media.media_service')

```

verwenden. Falls es sich dabei um ein neues Plugin handelt, dann würde ich Dir auch empfehlen auf das neue Plugin System umzusteigen:&nbsp;[https://developers.shopware.com/developers-guide/plugin-system/](https://developers.shopware.com/developers-guide/plugin-system/)

Sobald der Shopware Kernel gebootet ist, ist auch der Container da. Der wird im Modul frontend und backend automatisch gebootet.

Von diesem ominösen Shopware() Aufruf würde ich die Finger lassen, der ist alt und man braucht ihn auch in 90% der Fälle nicht mehr. Von irgendwelchen selbst gebastelten Lösungen würde ich ebenfalls die Finger lassen. Falls es doch nötig sein soltle, dann baue Deinen eigenen Service, bzw. ersetze einen vorhandenen.

Wenn Du nur ein Bild in einem Template abrufen willst, dann gibt es auch eine Smarty Anweisung dafür:&nbsp;[MediaService](https://developers.shopware.com/developers-guide/shopware-5-media-service/#smarty)

Den virutellen Pfad findest Du für jedes Bild in der Datenbank.

&nbsp;

&nbsp;

MFG

derwunner

---

<div class="post-metadata">

### Author: ![RainerF](https://avatars.discourse-cdn.com/v4/letter/r/77aa72/32.png) [@RainerF](https://forum.shopware.com/u/RainerF)
#### Post date: [27. Mai 2017 um 18:58 UTC](https://forum.shopware.com/t/mediaservice-gt-virtuellen-pfad-ausgeben/32798/10 "2017-05-27T18:58:39Z")

</div>

Hallo @derwunner,​

danke für Deine Antwort.

Gibt es irgendeine „best practice“ um in einer simplen PHP-Datei (die separat außerhalb von Shopware angebunden wird und für eine&nbsp;Ajax-Response sorgt) Shopware einzubinden? Ist das irgendwie über ein include möglich?

Für WordPress geht das relativ einfach (siehe&nbsp;[How to include WordPress functions in custom .php file? - Stack Overflow](https://stackoverflow.com/questions/15304926/how-to-include-wordpress-functions-in-custom-php-file)).

&nbsp;

---

<div class="post-metadata">

### Author: ![shyim](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/shyim/32/7681_2.png) [@shyim](https://forum.shopware.com/u/shyim)
#### Post date: [27. Mai 2017 um 19:04 UTC](https://forum.shopware.com/t/mediaservice-gt-virtuellen-pfad-ausgeben/32798/11 "2017-05-27T19:04:48Z")

</div>

Nein gibt es nicht. Musst es über ein Plugin machen. Für solche Methoden hassen auch sehr Viele Entwickler Wordpress&nbsp; ![Kiss](https://forum.shopware.com/plugins/CKEditor/plugins/smiley/images/kiss.png "Kiss").

---

<div class="post-metadata">

### Author: ![derwunner](https://avatars.discourse-cdn.com/v4/letter/d/e5b9ba/32.png) [@derwunner](https://forum.shopware.com/u/derwunner)
#### Post date: [29. Mai 2017 um 06:12 UTC](https://forum.shopware.com/t/mediaservice-gt-virtuellen-pfad-ausgeben/32798/12 "2017-05-29T06:12:19Z")

</div>

Auch wenn Smarty Chaos ist, verhindert es dennoch noch größeres Chaos.

PHP Dateien, die Ajax Abfragen enthalten ist mega Chaos. Eine Modul Einbindung oder ähnliches&nbsp;wäre denkbar, dafür braucht die ominöse PHP Datei aber erstmal eine saubere Struktur.
