私はモジュールのjs/css/tplや他のファイルを無効にする方法があると知っていますが、例えば/js/validate.js
ファイルを上書きする方法は見つけられません。 自分のファイルを/themes/my-theme/js
フォルダに配置しようとしましたが、結果が表示されません(validate.jsはまだ/js/
フォルダから読み込まれます)。/js/*.jsファイルを上書きする方法はありますか?
これを行う方法はありますか?
私はモジュールのjs/css/tplや他のファイルを無効にする方法があると知っていますが、例えば/js/validate.js
ファイルを上書きする方法は見つけられません。 自分のファイルを/themes/my-theme/js
フォルダに配置しようとしましたが、結果が表示されません(validate.jsはまだ/js/
フォルダから読み込まれます)。/js/*.jsファイルを上書きする方法はありますか?
これを行う方法はありますか?
これを行うための組み込み機能はありません。
addMedia
の方法を無効にすることができます。FrontController
です。
は、このファイル/override/classes/controller/FrontController.php
作成します。このオーバーライドで
<?php
class FrontController extends FrontControllerCore
{
/**
* Adds a media file(s) (CSS, JS) to page header
*
* @param string|array $media_uri Path to file, or an array of paths like: array(array(uri => media_type), ...)
* @param string|null $css_media_type CSS media type
* @param int|null $offset
* @param bool $remove If True, removes media files
* @param bool $check_path If true, checks if files exists
* @return true|void
*/
public function addMedia($media_uri, $css_media_type = null, $offset = null, $remove = false, $check_path = true)
{
if (!is_array($media_uri)) {
if ($css_media_type) {
$media_uri = array($media_uri => $css_media_type);
} else {
$media_uri = array($media_uri);
}
}
$list_uri = array();
foreach ($media_uri as $file => $media) {
if (!Validate::isAbsoluteUrl($media)) {
$different = 0;
$different_css = 0;
$type = 'css';
if (!$css_media_type) {
$type = 'js';
$file = $media;
}
if (strpos($file, __PS_BASE_URI__.'modules/') === 0) {
$override_path = str_replace(__PS_BASE_URI__.'modules/', _PS_ROOT_DIR_.'/themes/'._THEME_NAME_.'/'.$type.'/modules/', $file, $different);
if (strrpos($override_path, $type.'/'.basename($file)) !== false) {
$override_path_css = str_replace($type.'/'.basename($file), basename($file), $override_path, $different_css);
}
if ($different && @filemtime($override_path)) {
$file = str_replace(__PS_BASE_URI__.'modules/', __PS_BASE_URI__.'themes/'._THEME_NAME_.'/'.$type.'/modules/', $file, $different);
} elseif ($different_css && @filemtime($override_path_css)) {
$file = $override_path_css;
}
if ($css_media_type) {
$list_uri[$file] = $media;
} else {
$list_uri[] = $file;
}
// Here we add our test to override default js files
} elseif (strpos($file, _PS_JS_DIR_) === 0) {
$override_path = str_replace(_PS_JS_DIR_, _PS_ROOT_DIR_.'/themes/'._THEME_NAME_.'/js/default/', $file, $different);
if (strrpos($override_path, $type.'/'.basename($file)) !== false) {
$override_path_css = str_replace($type.'/'.basename($file), basename($file), $override_path, $different_css);
}
if ($different && @filemtime($override_path)) {
$file = str_replace(_PS_JS_DIR_, __PS_BASE_URI__.'themes/'._THEME_NAME_.'/js/default/', $file, $different);
} elseif ($different_css && @filemtime($override_path_css)) {
$file = $override_path_css;
}
if ($css_media_type) {
$list_uri[$file] = $media;
} else {
$list_uri[] = $file;
}
} else {
$list_uri[$file] = $media;
}
} else {
$list_uri[$file] = $media;
}
}
if ($remove) {
if ($css_media_type) {
return parent::removeCSS($list_uri, $css_media_type);
}
return parent::removeJS($list_uri);
}
if ($css_media_type) {
return parent::addCSS($list_uri, $css_media_type, $offset, $check_path);
}
return parent::addJS($list_uri, $check_path);
}
}
を、あなたは今、デフォルト/js/validate.js
ファイルを上書きするファイル/themes/my_theme/js/default/validate.js
を作成することができます。
PS:オーバーライドと同じように、ファイル/cache/class_index.php
を削除する必要があります。
回答と解決に感謝します。 – AlexandrX