2017-03-16 31 views
2

私はモジュールのjs/css/tplや他のファイルを無効にする方法があると知っていますが、例えば/js/validate.jsファイルを上書きする方法は見つけられません。 自分のファイルを/themes/my-theme/jsフォルダに配置しようとしましたが、結果が表示されません(validate.jsはまだ/js/フォルダから読み込まれます)。/js/*.jsファイルを上書きする方法はありますか?

これを行う方法はありますか?

答えて

2

これを行うための組み込み機能はありません。

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を削除する必要があります。

+0

回答と解決に感謝します。 – AlexandrX

関連する問題