Virtuemartのカートモジュールを変更するためにレイアウトオーバーライドを使用していますが、ajaxリクエストは更新時にコードの一部を削除します。このため、テンプレートだけでなく、モジュールが呼び出すJavaScriptルーチンも変更したいと思います。
モジュール自体を変更することで必要な動作をすばやく取得できましたが、コード(jsファイル内にあり、default.phpの一部ではありません)を複製してオーバーライド内に配置できるかどうか疑問に思っていました。 Virtuemartを更新するたびに修正する必要はありません。
出来ますか?何か案は?
はいといいえ...
「いいえ」から始めましょう-Joomlaコア開発者はスクリプトを挿入する方法を作成しましたが、スクリプトを削除する(API)方法はありません。
そして、「はい」ですが、複雑です。
削除に影響を与えるには、Joomlaシステムプラグインを作成する必要があります。
OnBeforeCompileHeadよりも早く実行すると、別のスクリプトで再度挿入される可能性があります。
この例では、スクリプトを削除するだけです。私は別の場所に新しいスクリプトを挿入しているためです。これを変更して、削除と交換を同時に行うこともできますが、それはあなたが決めることです。
これは私が書いたBS3テンプレートに対して私が行った方法です。私は本当にBS 2.3 javascriptを捨て、それをBS3 javascriptに置き換える必要がありました。この例は1つしか示していませんが、プラグインは複数のJavaScriptの削除に対応するように作成されています。
class PlgSystemRWBS3 extends JPlugin {
function onBeforeCompileHead() {
$doc = JFactory::getDocument();
$cfg = JFactory::getConfig();
$min = $cfg->get('debug', 0, 'INTEGER') ? '' : '.min';
$remove = array(
'/media/jui/js/bootstrap'.$min.'.js'
);
$this->_removeScript($doc, $remove);
}
private function _removeScript($o, $remove) {
$removed = false;
foreach($remove as $r) {
$found = preg_grep('/'.preg_quote($r,'/').'$/', array_keys($o->_scripts));
if(count($found) > 0) {
unset($o->_scripts[array_shift($found)]);
}
}
}
}