it-swarm.com.de

Überschreiben Sie die scripts.js einer Joomla-Vorlage

Ich arbeite in Joomla! 3.4.8.

... also, wie kann ich die templates/my_template/scripts.js überschreiben?

...

PDATE. Ich spreche von einer Frontend-Vorlage, einer Site-Vorlage.

Ich habe eine Vorlage in Themeforest gekauft. Die Vorlage enthält eine Datei in templates/my_template/js/scripts.js.

Das Problem liegt auf der Hand. Wenn ich die Vorlage in Zukunft aktualisiere, gehen alle meine Änderungen verloren. :(

1
George Berkeley

Bearbeitet

Wie Sie dies erreichen, hängt vom Umfang des Skriptobjekts ab.

Suchen Sie in der Skriptdatei nach der Funktion, die beim Laden des Fensters ausgeführt wird. Es sollte entweder beginnen mit:

window.onload = function...

oder

window.addEventListener("load"...

Der Inhalt dieser Funktion hängt ganz davon ab, wie die Vorlagenentwickler das Skript codiert haben. Daher kann ich Ihnen hier nur grobe Richtlinien geben.

Sie müssen den Namen des Hauptcontainerobjekts des Skripts herausfinden. Es heißt wahrscheinlich so etwas wie 'themeForest'. Sie suchen nach etwas wie:

var themeForest = new ThemeForest

oder (wie es wahrscheinlich ist, wurde es mit einem JS-Paket-Manager erstellt) vielleicht so etwas wie:

var themeForest = __webpack_require__(391);

Die genaue Implementierung wird davon abweichen.

Jetzt soll das Objekt im globalen Bereich verfügbar sein . Anhand der obigen Beispiele würden sie also so aussehen:

var themeForest = window.themeForest = new ThemeForest

oder

var themeForest = window.themeForest = __webpack_require__(391);   

Das wichtige Bit ist, sicherzustellen, dass das Skript in eine Eigenschaft des Fensterobjekts umgewandelt wird. Wenn window.themeForest Bereits vorhanden ist, ist es bereits im globalen Bereich verfügbar. Wenn nicht, füge es hinzu, wie ich es oben getan habe.

Jetzt sollten Sie in der Lage sein, einzelne Methoden, Funktionen und Variablen zu überschreiben, indem Sie sie in Ihrem Überschreibungsskript neu zuweisen. Angenommen, es gibt eine Methode namens init(), die Sie überschreiben möchten. Fügen Sie in Ihrem Skript Folgendes hinzu:

window.themeForest.init = function() {
    // Function contents
}

Stellen Sie sicher, dass Ihr Skript in Ihrer Vorlage nach der Datei scripts.js der Vorlage geladen ist.

Alle anderen themeForest-Eigenschaften bleiben unverändert, aber die init-Eigenschaft ist jetzt Ihre Funktion.

Möglicherweise möchten Sie dies auch oben in Ihr Skript einfügen, um die Neuerklärung etwas zu beschleunigen:

window.themeForest = themeForest

Das Beispiel für das Überschreiben, das ich oben angegeben habe, sieht folgendermaßen aus:

themeForest.init = function() {
    // Function contents
}

Ich hoffe, das hilft - ich kann keine genauere Antwort geben, ohne genau zu wissen, wie das Skript der Vorlage funktioniert.

2
chrBrd

Es hängt davon ab, wie dieses js in head enthalten ist. Und basierend auf dem Pfad denke ich, dass es direkt JDocument->addScript Ist, das keine Übersteuerungslogik implementiert.

Basierend darauf würde ich Ihnen in der gegebenen Situation vorschlagen, ein System-Plugin zu erstellen, das onBeforeCompileHead() fängt und dieses scripts.js Aus dem scripts-Array entfernt, und einfach eines davon hinzuzufügen Sie brauchen [Ihre Außerkraftsetzung].

1
Alexandr

Die Idee von @Alexandr, ein Plugin für nicht gesetzte Skripte zu erstellen, ist gut - natürlich hängt es davon ab, wie die Template-Entwickler den Aufruf ausführen.

Eine andere einfache Möglichkeit, die ich manchmal tue, ist, die index.php der Vorlage leicht zu ändern und dann alle gewünschten js- oder css-Dateien so zu laden, wie ich es möchte.

Finden Sie einfach die Aufrufe von js-Dateien und kommentieren Sie sie aus - und fügen Sie dann Ihre hinzu.

Normalerweise sind es nur einige wenige Änderungszeilen, die bei einem zukünftigen Update problemlos beibehalten werden können.

0
FFrewin