Shopware

Wird versucht per Javascript oder jQuery auf Elemente der Einkaufswelten zuzugreifen, ist dies nicht ganz einfach da die Einkaufswelten per Ajax nachgeladen werden.

So klappts:

In Shopware eine sogenante Modal-Box anlegen ist nicht schwer.  In diesem Beispiel wird ein p Tag verwendet. Es können natürlich auch andere HTML-Elemente verwendet werden. Die Höhe und Breiteangaben mit data-width="800" data-height="440" sind optional.

<p class="myModalClass" data-content="" data-modalbox="true" data-targetSelector="a" data-width="800" data-height="440" data-mode="ajax">
<a title="Express-Lieferung" href="/{url controller=custom sCustom=193}" style="text-decoration:underline">Express-Lieferung erwünscht?</a>
</p>

Die Nummer 193 in dem Beispiel, ist die ID der Shopseite, deren Inhalt in dem Popup angezeigt wird.

Manchmal sieht man auch so etwas:

<p class="product--tax" data-content="" data-modalbox="true" data-targetSelector="a" data-mode="ajax">{s name="DetailDataPriceInfo"}{/s}

In diesem Fall steht der Link in dem Textbaustein mit dem Namen DetailDataPriceInfo.

Oder nur mit a

<a title="Expertenservice"
 href="/{url controller=custom sCustom=199}" style="text-decoration:underline"
 data-content="{url controller="custom" sCustom="199" ordernumber="123456" foo="bar" fullPath}"
 data-modalbox="true"
 data-mode="ajax"
 data-height="666"
 data-width="888"
 onmouseover="click();">Expertenservice</a>

 




In dem Ordner 

themes/Frontend/Responsive/frontend/_public/src/js/ befinden sich einige jQuery Plugins. Hier ein Beispiel zum Überschreiben:

themes/Frontend/Responsive/frontend/_public/src/js/jquery.captcha.js

Anfang Originalcode (ohne Kommentare):

(function($, window) {
    'use strict';

    $.plugin('swCaptcha', {

        defaults: {

            autoLoad: false,

            src: '',

            hasError: false
        }, .....

Dem Template in der

themes/Frontend/FVRespo/Theme.php

mitteilen, dass auf die Datei in unserem Template zugegriffen wird

  protected $javascript = array(
	   'src/js/jquery.captcha.js', .....

Und die Datei in das eigene Template kopieren

themes/Frontend/EIGENESTEMPLATE/frontend/_public/src/js/jquery.captcha.js

Dann noch in der Datei angeben, dass es sich um ein Override handeld. Kompletter Inhalt der Datei (ohne Kommentare):

$.overridePlugin('swCaptcha', {

	defaults: {

		autoLoad: true,

		src: '',

		hasError: false
	}
});

Natürlich können außer wie  hier in diesem Beispiel außer Defaults auch noch andere Funktionen, mit Komma getrennt hinzugefügt werden

 

 

Will man z.B. bei dem Plugin SwagFuzzy (Intelligente Suche) die Ergebnisseite fuzzy_result.tpl in seinem eigenen Plugin anpassen geht das so.

Die Originaldatei liegt in:
engine/Shopware/Plugins/Community/Backend/SwagFuzzy/Views/frontend/swag_fuzzy/search/fuzzy_result.tpl

Irgendwo auf den Seiten von Shopware fand ich den Hinweis, dass extendsTemplate nicht mehr verwendet wird. Ich habe es ohne extendsTemplate mit x verschiedenen Pfaden ausprobiert... Bei mir (SW 5.2.26) funktionierte das nicht.

In meiner "Bootstrap" Datei verwende ich den Controller
'Enlight_Controller_Action_PostDispatchSecure_Frontend_Search' => ['onPostDispatchSecureSearch'],

In meiner Methode onPostDispatchSecureSearch (Ja die darf auch anders benannt werden), gebe ich so
$view->addTemplateDir($this->getPath() . '/Resources/Views/');
den Template View Pfad an.

Und nun mit
$view->extendsTemplate('frontend/swag_fuzzy/search/fuzzy_result_fvhg.tpl'); meine Templatedatei an. ACHTUNG, die Templatedatei darf nicht wie die Originaldatei heißen.

In meiner Templatedatei
custom/plugins/fvhgFrontendExtension/Resources/Views/frontend/swag_fuzzy/search/fuzzy_result_fvhg.tpl
steht dann nur noch ganz oben die Erweiterung für die Originaltemplatedatei.
{extends file='parent:frontend/swag_fuzzy/search/fuzzy_result.tpl'}

Jetzt können die Blöcke mit append oder prepend erweitert oder ganz geändert werden.