对 Jquery 和 Css 文件使用 cdn - 覆盖 Prestashop 的默认设置

Use cdn for Jquery and Css files - overriding Prestashop's default settings


我的下一个问题是 Php 的所有程序员和 prestashop 的开发人员。
我的问题是我想使用各种 CDN 来缓存我的大部分静态内容,例如 javascript 和 css 文件。
到目前为止我编写的 php 脚本是这个,但问题是我只将一个文件重定向到 CDN 库。我希望缓存其中一些文件,但不是全部。 这是我的一段代码,到目前为止,从我用 WebPagetest 进行的测试来看,它正在运行。

<?php
 class FrontController extends FrontControllerCore {
        public function setMedia() {
            parent::setMedia();
            $key = array_search(_PS_JS_DIR_ . 'jquery/jquery-1.11.0.min.js', $this->js_files);
            if ($key !== false)
                $this->js_files[$key] = '//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js';
        }
    }

此外,为了缓存其他 jquery 文件,我为此添加了更多代码,但没有成功(我遇到了 500 内部服务器错误)

  <?php

class FrontController extends FrontControllerCore {
    public function setMedia() {
        parent::setMedia();
        $key1 = array_search(_PS_JS_DIR_ . 'jquery/jquery-1.11.0.min.js', $this->js_files);
        $key2 = array_search(_PS_JS_DIR_ . 'jquery/plugins/bxslider/jquery.bxslider.js', $this->js_files);
        $key3 = array_search(_PS_JS_DIR_ . 'jquery/plugins/chosen/jquery.chosen.js', $this->js_files);
        if ($key1 !== false)
            $this->js_files[$key1] = '//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js';

        if($key2 !== false)
            $this->js_files[$key2] = '//cdnjs.cloudflare.com/ajax/libs/bxslider/4.1.2/jquery.bxslider.js';

        if($key3 !== false)
            $this->js_files[$key3] = '//cdnjs.cloudflare.com/ajax/libs/chosen/0.9.8/chosen.jquery.js'

      }


?>

关于我应该如何处理我的脚本以缓存我需要的剩余内容,您有什么想法吗?
谢谢
Orestis

如果您正在使用 Prestashop 1.6(未在 1.5 上测试),您可以在 class classes/controller/Controller.php 中重写方法 addJqueryPlugin():

/**
 * Adds jQuery plugin(s) to queued JS file list
 *
 * @param string|array $name
 * @param string null $folder
 * @param bool $css
 */
public function addJqueryPlugin($name, $folder = null, $css = true)
{
    if (!is_array($name)) {
        $name = array($name);
    }
    if (is_array($name)) {
        foreach ($name as $plugin) {
            $plugin_path = Media::getJqueryPluginPath($plugin, $folder);
            switch($plugin) {
                case "bxslider":
                    $plugin_path['js'] = '//cdnjs.cloudflare.com/ajax/libs/bxslider/4.1.2/jquery.bxslider.js';
                    break;
                case "chosen":
                    $plugin_path['js'] = '//cdnjs.cloudflare.com/ajax/libs/chosen/0.9.8/chosen.jquery.js';
                    break;
            }

            if (!empty($plugin_path['js'])) {
                $this->addJS($plugin_path['js'], false);
            }
            if ($css && !empty($plugin_path['css'])) {
                $this->addCSS(key($plugin_path['css']), 'all', null, false);
            }
        }
    }
}