FFWDccFFWDcc MemberComments: 17 Received thanks: 0 Member since: October 2018

Hallo Zusammen,

ich sitze gerade an einem Projekt dei dem ich eine Bildausgabe im Frontend durch Freitextfelder benötige. Durch einige Suchen bin ich auf div. Lösungen gekommen.

pluginname->_private->smarty->modifier.mediaurl.php

<?php
function smarty_modifier_mediaurl($value, $format = array())
{
    if (is_numeric($value)) {
        $id = (int)$value;
        $media = Shopware()->Models()->getRepository('Shopware\Models\Media\Media')->findOneBy(['id' => $id]);
        if ($media) {
            $path = $media->getPath();

            $mediaUrl = Shopware()->Container()->get('shopware_media.media_service')->getUrl($path);

            return $mediaUrl;
        }
    }
}

Dadurch die Entwicklung innerhalb eines Plugins und nicht in einem Theme erfolgt, wird der Modifier leider nicht direkt erkannt. Also habe ich weiter gesucht und eine Möglichkeit der Registrierung in den Docs gefunden. mainplugin.php:

public function build(ContainerBuilder $container)
    {
        parent::build($container);
        $container->addCompilerPass(new AddTemplatePluginDirCompilerPass());
    }

Diese zeigt auf Plugin->Components->CompilerPass->AddTemplatePluginDirCompilerPass.php:

<?php
namespace FfwdHeroBannerSw5\Components\CompilerPass;

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
/**
 * Class AddTemplatePluginDirCompilerPass
 */
class AddTemplatePluginDirCompilerPass implements CompilerPassInterface
{
    /**
     * @param ContainerBuilder $container
     */
    public function process(ContainerBuilder $container)
    {
        $template = $container->getDefinition('template');
        $template->addMethodCall('addPluginsDir', ['pluginname/_private/smarty']);
    }
}

Leider kann ich in Smarty weiterhin nicht auf den modifier {$sCategoryContent.attr|mediaurl} zugreifen. Wie kann ich Shopware nun diesen Modifier korrekt beibringen?

Answers

  • LukaschelLukaschel MemberComments: 73 Received thanks: 17 Member since: July 2017

    Hallo,

    wo soll denn das Bild genau ausgegeben werden?

    Im Artikel?

    Wenn du sowieso ein Plugin gebaut hast würde ich eher an ein dementsprechendes Event hängen und das Bild dort an das Template übergeben.

    Grüße Lukaschel

  • FFWDccFFWDcc MemberComments: 17 Received thanks: 0 Member since: October 2018

    Das Bild soll im Kategoriemenü über ein Freitextfeld definiert werden und dann im Frontend (z.B: Listing) ausgegeben werden. Da die entsprechenden Freitextfelder aber nur eine ID und keinen Pfad ausgeben muss ich eine entsprechende Interpretation erreichen. In einigen Beiträgen stand, dass dies am besten über einen SmartyModifier zu erreichen ist. 

    https://forum.shopware.com/discussion/comment/199709/#Comment_199709

    Die entsprechende Einbindung soll angeblich so funktionieren:

    https://developers.shopware.com/designers-guide/smarty/#register-custom-smarty-plugins-in-a-shopware-plugin 

    Bei deiner Idee müsste es ein Frontend Event sein und eine Methode die die Funktion des SmartyModifier mit einer Datenbankabfrage kombiniert und alles in eine neues Attribut bereitstellt oder?

Sign In or Register to comment.