私はJoomlaで働いています! 3.4.8。
...では、templates/my_template/scripts.jsをオーバーライドするにはどうすればよいですか?
...
更新。フロントエンドテンプレート、サイトテンプレートのことです。
テンプレートをテーマフォレストで購入しました。テンプレートには、templates/my_template/js/scripts.jsにファイルがあります。
問題は明白です。将来テンプレートを更新すると、すべての変更が失われます。 :(
編集済み
これをどのように達成するかは、スクリプトオブジェクトのスコープによって異なります。
スクリプトファイルで、ウィンドウが読み込まれたときに実行される関数を検索します。次のいずれかで始まる必要があります。
_window.onload = function...
_
または
_window.addEventListener("load"...
_
この関数の内容は、テンプレート開発者によるスクリプトのコーディング方法に完全に依存するため、ここでは大まかなガイドラインのみを示します。
スクリプトのメインコンテナオブジェクトの名前を見つける必要があります。それはおそらく「themeForest」のようなものと呼ばれています。あなたは次のようなものを探しています:
_var themeForest = new ThemeForest
_
または(おそらく、それはJSパッケージマネージャーを使用して構築されています)おそらく次のようなものです:
_var themeForest = __webpack_require__(391);
_
正確な実装は異なります。
次に、そのオブジェクトをグローバルスコープで使用できるようにします。したがって、上記の例を使用すると、次のようになります。
_var themeForest = window.themeForest = new ThemeForest
_
または
_var themeForest = window.themeForest = __webpack_require__(391);
_
重要なのは、スクリプトがwindowオブジェクトのプロパティになるようにすることです。 _window.themeForest
_がすでに存在する場合は、すでにグローバルスコープで使用できます。そうでない場合は、上記のように追加します。
これで、オーバーライドスクリプトでそれらを再割り当てすることにより、個々のメソッド、関数、変数をオーバーライドできるはずです。オーバーライドしたいinit()
というメソッドがあるとしましょう。スクリプトに次を追加します。
_window.themeForest.init = function() {
// Function contents
}
_
スクリプトがテンプレートに読み込まれていることを確認してください後テンプレートのscripts.jsファイル。
他のすべてのthemeForestプロパティはそのままですが、initプロパティが関数になります。
これをスクリプトの先頭に追加して、再宣言を少し速くすることもできます。
_window.themeForest = themeForest
_
これで、上記で指定したオーバーライドの例は次のようになります。
_themeForest.init = function() {
// Function contents
}
_
お役に立てば幸いです。テンプレートのスクリプトがどのように機能するかを正確に知らないと、具体的な答えを出すことはできません。
このjsがheadにどのように含まれているかによります。パスに基づいて、オーバーライドロジックを実装しないのは単純な_JDocument->addScript
_だと思います。
これに基づいて、与えられた状況では、onBeforeCompileHead()
をキャッチしてこの_scripts.js
_をscripts
配列から設定解除するシステムプラグインを作成し、単純に追加することをお勧めします[あなたのオーバーライド]が必要です。
@Alexandrによる、スクリプトを設定解除するプラグインの作成に関するアイデアは良いものです。もちろん、テンプレート開発者がどのように呼び出すかによって異なります。
私が時々行うもう1つの簡単な方法は、テンプレートのindex.phpをわずかに変更して、必要なjsまたはcssファイルをロードすることです。
Jsファイルへの呼び出しを見つけてコメント化し、自分のファイルを含めてください。
通常、これはほんの数行の変更であり、将来のアップデートで簡単に維持できます。