Überschreiben von Artikelnname in last seen articles

Hallo,

das Shopware-Standard-Plugin “LastArticles” schreibt als Artikelnamen die Artikel inkl. Variantenbezeichnung in die DB.

Ich versuche grade mich da reinzuhängen, da wir hier nur den Artikelnamen ohne die Variantenbezeichnung stehen haben wollen.

 In "Shopware\_Plugins\_Frontend\_LastArticles\_Bootstrap" gibt es in der Methode setLastArticleById() ein notify-Event, wo ich allerdings nur an die Artikel-ID rankomme. Den DB-Eintrag updaten geht auch nicht, da das Event schon vor dem DB-Insert ausgeführt wird. Mittels after-Hook habe ich auch versucht, aber der scheint gar nicht zu greifen, bzw. bin ich mir nicht sicher, ob Hooks in Methoden der Bootstrap überhaupt möglich sind? Hat jemand einen Tipp, wie ich den Artikelnamen hier überschreiben kann, am besten bevor der Insert geschieht, müsste also irgendwie an die $article rankommen. 

public function setLastArticleById($articleId)
{
    $article = $this->getArticleData((int) $articleId);

    Shopware()->Session()->sLastArticle = $articleId;
    $sessionId = Shopware()->Session()->get('sessionId');

    if (empty($sessionId) || empty($article['articleName']) || empty($articleId)) {
        return;
    }

    Shopware()->Events()->notify('Shopware_Modules_Articles_Before_SetLastArticle', array(
        'subject' => Shopware()->Modules()->Articles(),
        'article' => $articleId
    ));

    return Shopware()->Db()->query('
        INSERT INTO s_emarketing_lastarticles
            (img, name, articleID, sessionID, time, userID, shopID)
        VALUES
            (?, ?, ?, ?, NOW(), ?, ?)
        ON DUPLICATE KEY UPDATE time=NOW(), userID=VALUES(userID)
    ', array(
        (string) $article['image'],
        (string) $article['articleName'],
        $articleId,
        $sessionId,
        (int) Shopware()->Session()->sUserId,
        (int) Shopware()->Shop()->getId()
    ));
}

 

Danke und Gruss

oh mann … habs jetzt zwar über einen anderen Weg zwar hinbekommen indem ich mich auf das Event: 

 Enlight\_Controller\_Action\_PostDispatchSecure\_Widgets\_Index

draufgesetzt haben und dann den Artikelnamen in der Datenbank upgedatet hab. Hat aber nichts gebracht, weil die Artikelname in “Zuletzt angesehen” aus dem Local-Storage gezogen werden.

Ein einfaches Überschreiben der JS-Var im Smarty-Template (frontend/index/index) hat gereicht

 {block name='frontend\_index\_header\_javascript\_inline' append} lastSeenProductsConfig.currentArticle.articleName = '{$sArticle.articleName|escape:"javascript"}'; {/block}

Jetzt kommen die Artikelnamen ohne den Variantenzusatz im Slider raus.

1 Like

@Liverson‍ wo genau? In themes/Frontend/MeinTemplate/frontend/index/index.tpl ??

Ich stehe genau vor der gleichen Problematik. Sieht bei uns doof aus, wegen den Größen hinter dem Produkttitel.

Soll dann das hier die Stelle sein? SW 5.2

{block name="frontend_index_header_javascript"}
    
        //<![CDATA[
        {block name="frontend_index_header_javascript_inline"}
        var timeNow = {time() nocache};</code></pre>

<p> </p>

Hi,

ich kann mich zwar an die Problematik jetz im Detail nicht mehr erinnern, aber du musst halt in deinem Theme in der frontend/index/index.tpl

Hier den Block einfügen:

 {block name='frontend\_index\_header\_javascript\_inline' append} lastSeenProductsConfig.currentArticle.articleName = '{$sArticle.articleName|escape:"javascript"}'; {/block}

Hmmmmm, haben das jetzt an zig Stellen versucht in einem Testshop. Der ist ganz frisch installiert, leider ohne Erfolg.

Danke Dir trotzdem

was steht denn im Quelltext, wird dort das Code-Snippet ausgegeben?

 lastSeenProductsConfig.currentArticle.articleName = meinArtikelName

Mit einem anderen Smarty-Block hat es bei mir geklappt (Shopware 5.5.10):

{extends file='parent:frontend/index/index.tpl'}

{* let the user modify the data here *}
{block name="frontend_index_header_javascript_data"}
    {$smarty.block.parent}
    {if $sArticle}
        {$lastSeenProductsConfig.currentArticle.articleName = $sArticle.articleName}
    {/if}
{/block}