对 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);
}
}
}
}
我的下一个问题是 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);
}
}
}
}