Hallo Community,
ich habe ein neues Freitextfeld angelegt (SW 5.2.2) mit Einfachauswahl und Entity Media. Es handelt sich konkret um Thumbnails für Videos, di in den Medienmanager hochgeladen wurden.
Wenn ich nun bei einem Artikel eines dieser Bilder auswähle, wird mir in das Freitextfeld (my_video_field) nur eine Zahl ausgegeben, ich denke es ist wohl die ID des Bildes (konkret: 13871).
Ich benötige aber den Pfad zum Bild.
Im Template sieht mein Code so aus:
Die Ausgabe ist dann eben so:
Hat jemand eine Idee, wie ich mit der ID des Bildes den Pfad abfragen kann?
Oder wieso wird mit dem Freitextfeld nicht die URL des Bildes ausgegeben?
Vielen Dank,
beste Grüße
Benötige ich dafür ein eigenes Plugin oder kann mit smarty im Template mit Hilfe der Bild-ID der Pfad aus der Tabelle s_media ausgelesen werden?
Nein, kann ja nicht.
Der Pfad zu den Bildern ist ja media/image.
Und der Name des Bildes ist “my_image.jpg”. Ausgegeben wird aber die ID.
Das Ergebnis ist dann my-site/media/image/13871.
Wenn ich in der Tabelle s_media nach der ID suche habe ich ja alles, den Namen, den Pfad.
Ich müßte im Template eine ähnliche Abfrage hinkriegen wie z.B. bei einem Controller
href="{url controller=detail sArticle=$sArticle.articleID mediaId=$sArticle.my_video_field}"
Aber für die s_media gibt es keine Verknüpfung mit s_articles und/oder keine action für “media” im controller detail.
Nein, kann ja nicht.
Stimmt.
Wahrscheinlich über Plug-In zu lösen.
Wahrscheinlich über Plug-In zu lösen.
Jo, dachte ich mir.
Ich hätte es als logisch empfunden, den Pfad anstatt der ID an’s Frontend zu übergeben.
Naja, trotzdem danke
Hey Flo,
bist du in diesem Thema schon weitergekommen? Ich suche aktuell auch noch nach einer Möglichkeit. Sofern ich nichts finde, werde ich mich wohl an ein Plugin hierzu machen müssen :(
Liebe Grüße
Kevin
Leider nicht. Ein Plugin hierfür wäre super!
Dann werde ich mich mal daran machen. Gar nicht so einfach den richtigen Ansatzpunkt hierzu zu finden. Naja mal sehen.
Melde mich falls ich etwas hinbekomme.
Liebe Grüße
Kevin
Hi Flo,
wie versprochen hatte ich mich heute Vormittag nochmals mit dem Thema beschäftigt und eine erstes Plugin zu dem Thema erstellt. Von der Konfiguration her ist es noch sehr rudimentär aber vielleicht hilft es dir auch weiter.
Kannst es dir herunterladen unter:
Ansonsten habe ich mich einfach an das Listing im Frontend gehängt. Das Plugin wird dabei auch nur für das Listing der Hersteller ausgeführt. Im Backend konfiguriert werden muss der Spaltenname des Freitextfeldes welches im Frontend ausgegeben werden soll. Werde das die Tage noch etwas sauberer gestalten. Aber vielleicht hilft es dir ja auch weiter…
Anbei zur Vollständigkeit die aktuelle Klasse. Bei Fragen kannst dich gerne melden. Bei mir hat das Plugin in zwei Shops auf jeden Fall funktioniert :)
Liebe Grüße
Kevin
'onSecureDetailPostDispatch'
];
}
/**
* @param Enlight_Event_EventArgs $arguments
*/
public function onSecureDetailPostDispatch(Enlight_Event_EventArgs $arguments)
{
/**@var $controller \Shopware_Controllers_Frontend_Detail */
$controller = $arguments->get('subject');
$connection = $this->container->get('dbal_connection');
$controller->View()->addTemplateDir($this->getPath() . '/Resources/views');
$config = $this->container->get('shopware.plugin.config_reader')->getByPluginName($this->getName());
$mediapathComplete = '';
//Implement only for Manufacturer Action
if($controller->Request()->getActionName() == 'manufacturer' && isset($config['supplierAttribute']))
{
//Get manufacturer id from params
$manufacturerId = $controller->Request()->getParam('sSupplier', null);
//Check if manufacturerId exists
if(isset($manufacturerId))
{
//get Manufacturer from manufacturer service
/**@var $manufacturer Manufacturer*/
$manufacturer = $this->container->get('shopware_storefront.manufacturer_service')->get(
$manufacturerId,
$this->container->get('shopware_storefront.context_service')->getShopContext()
);
//Check if manufacturer exists
if(isset($manufacturer))
{
//Now check if an image exists
$manufacturerArray = json_decode(json_encode($manufacturer->getAttribute('core')), true);
if(array_key_exists($config['supplierAttribute'], $manufacturerArray))
{
$manufacturerImage = $manufacturer->getAttribute('core')->get($config['supplierAttribute']);
}
else
{
$manufacturerImage = null;
}
if(isset($manufacturerImage))
{
//Get Shopware Mediaservice
$mediaservice = $this->container->get('shopware_media.media_service');
//Build SQL for media path
$mediapath = $connection->fetchColumn(
'SELECT path FROM s_media WHERE id = :mediaId',
array(':mediaId' => $manufacturerImage)
);
if($mediaservice->has($mediapath) == 1)
{
$mediapathComplete = $mediaservice->getUrl($mediapath);
}
}
}
}
}
$controller->View()->assign('kschmidManufacturerImage', $mediapathComplete);
}
}
Super, vielen dank.
Mit Anpassungen kann ich es nun auch für die Ausgabe von zusätzlichen Bildern in der Detailansicht verwenden, die über ein s_articles_attribute zugeordnet worden sind.
Ich werde die Anpassungen demnächst posten.
Hey Flo,
gerne, ich konnte es aufgrund einer Produktivsetzung noch nicht weiter anpassen.
Aber vielleicht können wir die Chance nutzen ein allgemeingültiges Plugin zu dem Thema, dass sowohl die Hersteller Media Freitextfelder, als auch Artikelfreitextfelder Bilder abdeckt, bereitstellen?
Davon hätten doch sicherlich einige etwas davon, wenn man das so ohne weitere Anpassung außer Konfiguration nutzen könnte oder was meinst du?
Liebe Grüße
Kevin
Ja, ich hoffe, ich bekomme das hin.
Bin nicht so gut im Programmieren und habe momentan sehr viel zu tun.
Aber ich melde mich, sobald ich Zeit dazu habe.
Danke für Deine Rückmeldung!
Hi Flo,
ich interessiere mich auch für deinen Lösungsweg. Gibts ne Chance, dass du das noch postest?
Danke und Grüße