Javascript Datei aus Theme überschreiben

Hallo liebe Shopware-Community,

wir haben für unseren Shop ein fertiges Theme gekauft und möchten eine einzelne .js-Datei gern updatesicher anpassen. Die Datei befindet sich unter dem folgenden Pfad:

/custom/plugins/TcinnCleanTheme/Resources/Themes/Frontend/CleanTheme/frontend/_public/src/js/jquery.stickyMenu.js

 

In unserem eigenem abgeleiteten Theme haben wir die modifizierte Datei bereits abgespeichert:

/themes/Frontend/UnserTheme/frontend/_public/src/js/jquery.stickyMenu.js

 

In der Theme.php haben wir die neue Datei ebenfalls eingetragen:

protected $javascript = array(
        'src/js/jquery.stickyMenu.js'
    );

 

Wie können wir jetzt erreichen, dass nur noch unsere eingene, angepasste Datei eingebunden wird? Eigene Versuche über die overridePlugin-Methode sind leider erfolglos geblieben. Ich würde mich freuen, wenn ihr mir ggf. einen kleinen Denkanstoß geben könntet.

Vielen Dank!

 

 

Hallo @Trockenfrucht‍,

Ihre beste Lösung ist die ovrrideplugin-Methode, wenn es funktioniert nicht, dann Sie haben diese Methode nicht richtig benutzen.

in die andere Hand , Shopware hat zwei möglichkeit ( die ich weiß  Wink ) um Javascript-Dateien vom Compiler auszuschließen:

1- discardedJavascriptThemes:  diese Option würde alle Javascript-Dateien, die gehört ein oder mehrer Theme , ausschließen.

2- Theme_Compiler_Collect_Javascript_Files_FilterResult: ein Plugin einbauen , damit du kannst die Javascript-Dateien filteren.

 

VG,

image

Tel.: +49 755 - 183 990 00 | E-Mail: info@enbit.de | Web: http://enbit.de/

@ahmadsaad schrieb:

…Ihre beste Lösung ist die ovrrideplugin-Methode, …

 

VIelen Dank zunächst für die schnelle Antwort. Ich möchte es dann gern mit dem overrideplugin-Methode probieren.

Beim Aufruf der Seite kann ich im Browser zwar erkennen, dass mein angepasster Code kompiliert wird, allerdings wir auch der Code des Original-Skripts weiterhin eingebunden.

Die Original Datei „jquery.stickyMenu.js“ beginnt wie folgt:

(function ($) {
	'use strict';
	
	// header version 1
	if ($('body.headtyp-1').length > 0) {
		
		if ($('.headbar').length > 0) {
			var headerHeight = $("header").outerHeight(true);
			var navigationHeight = $(".headtyp-1 .headbar").outerHeight(true);
			var StickyMenuShow = $('.navigation-main > div').attr('data-stickyMenu');
			var stickyMenuTablet = $('.navigation-main > div').attr('data-stickyMenuTablet');
			var stickyMenuPhone = $('.navigation-main > div').attr('data-stickyMenuPhone');
			var stickyMenuPosition = $('.navigation-main > div').attr('data-stickyMenuPosition');
			var stickyMenuDuration = $('.navigation-main > div').attr('data-stickyMenuDuration');
			var stickyMenuClass = "activsticky";
		}


// ....weiterer Scriptcode

 

Nach meinem Verständis müsste ich den angepassten Code wie folgt einbinden können:

$.overridePlugin('stickyMenu', function() {
    //Angepasser Code
})

 

Funktioniert es möglicherweise nicht, weil die Ursprungsdatei überhaupt keine Methoden enthält?

Vielen Dank für die Mithilfe.

Hallo @Trockenfrucht‍,

mit diese Eingabe, kann ich dir nicht so viel hilfen.

gib mir ein Beispiel was hast du override??.

 von Die Original Datei “jquery.stickyMenu.js” eintragen Sie was gibt nach $.plugin(‘stickyMenu’ …  ein Original Methode von diese Plugin.

und dann von deine Plugin wie hast du diese Methode overriden.

VG,

image

Tel.: +49 755 - 183 990 00 | E-Mail: info@enbit.de | Web: http://enbit.de/

Hallo @Trockenfrucht‍,

hast du dafür eine Lösung gefunden? Ich versuche, den Standardparameter autoSlide für das jquery.image-slider Plugin zu ändern. autoSlide ist auf false gesetzt, und ich würde ihn auf true ändern. Ich habe ein paar Dinge ausprobiert, aber es nimmt immer noch die Standardkonfiguration.

Jede Hilfe ist willkommen.

vielen Dank

Hallo LivingEd,

leider habe ich es selbst auch nicht hinbekommen. Ich bin aber nach wie vor an einer Lösung interessiert.

Sollte jemand hier im Forum noch eine Idee haben, würde ich mich ebenfalls sehr über Hilfe freuen.

 

Hallo @Trockenfrucht‍,

ich glaube ich verstehe deine problem hier.

wie ich sehe von Ihre Beispiel Code von das Original “jquery.stickyMenu.js”  dass diese Datei ist keine Plugin , kannst du überprüfen ob gibt ein Plugin defination beim diese Datei.

etwas wie so

$.plugin('PlluginName', {.......});

ob gibt nicht, dann du brauchst overridePlugin methode nicht, und du kannst einfach discardedLessThemes benutzen und anderen deine StickyMenu Name z.b my_stickyMenu und dann inculde es in deine Theme wie so:

 protected $discardedLessThemes = ['src/js/jquery.stickyMenu.js'];
protected $javascript = array(
        'src/js/jquery.my_stickyMenu.js'
    );

dann es werde funktioniert, wie ich glaube.

VG,

image

Tel.: +49 755 - 183 990 00 | E-Mail: info@enbit.de | Web: http://enbit.de/