Prestashop内建的cart block模块支持ajax模式,要开启此模式需要到后台->Modules->Cart block v1.2 by PrestaShop->Configure中选中将Ajax cart开启。可是我就遇到了奇怪的事情,开启此功能后不但没有体验到ajax的速度,还把购物车搞的不好用了。每次点Add to cart总会刷新页面跳转到购物车页面,而不是ajax方式更新侧边栏的购物车模块。


工作正常的情况


ajax模式异常

检查后发现与Prestashop版本无关,与主题无关,模块本身也没有错误,那很可能是配置问题,看了一下blockcart.php的代码,发现有这么一段

public function hookHeader()
{
if (Configuration::get('PS_CATALOG_MODE'))
return;
Tools::addCSS(($this->_path).'blockcart.css', 'all');
if ((int)(Configuration::get('PS_BLOCK_CART_AJAX')))
Tools::addJS(($this->_path).'ajax-cart.js');
}

这段代码是通过Tools::addCSS和Tools::addJS方法向head标签中添加css和js链接,用firebug看了一下网站,发现果然没有加载blockcart.css和ajax-cart.js,原因是没有将这个模块添加到Header中。于是,到Modules->Positions->Translate a module中,将blockcart Hook into Header of pages,一切正常了。

总结一下,这里涉及到了在Prestashop的Module中如何向head中添加css和js文件引用的问题

1. 在module的主文件中你需要定义一个叫hookHeader()的方法,在这个方法中通过addCSSaddJS方法添加文件。例如:

Tools::addCSS(($this->_path).'blockcart.css', 'all');

$this->_path指module的路径,如果还有子目录,在后面添加路径即可。

Tools::addJS(array($this->_path.'js/myfile1.js', $this->_path.'js/myfile2.js'));

上面代码演示了如何添加多个js文件

2. 这一步很重要,只有将这个模块加入到Header of Pages这个位置,才能使添加文件成功。