使用Json在PrestaShop的Cart摘要中将变量传递给JS

时间:2015-04-13 14:54:25

标签: php ajax json prestashop

我知道PS使用 Json 来从控制器中恢复变量。例如,在cart-summary.js中有:

$.ajax({
type: 'POST',
headers: { "cache-control": "no-cache" },
url: baseUri + '?rand=' + new Date().getTime(),
async: true,
cache: false,
data: 'controller=cart&ajax=true&allowSeperatedPackage=true&value='
+ ($(this).prop('checked') ? '1' : '0')
+ '&token='+static_token
+ '&allow_refresh=1',
success: function(jsonData)
{
//some functions...
}

我相信变量/数组是从 cart.php 传递的。我的问题是 cart.php 中的哪个函数/方法负责传递数据?

提示:cart.php中现在有 jsonEncode echo

我的目的是将一些变量从另一个控制器传递给cart-summary.js。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

根据经验,Prestashop平台的ajax请求适用于以下结构的网址: 前端要求:

  

控制器= XXX

确定应该为请求调用的控制器,在这种情况下' cart'意味着将要求CartController.php管理呼叫。

  

AJAX =真

表示请求将是ajax,并且在输出之前需要由控制器在json中转换响应。

  

标记= XXX

它是用于内部身份验证的令牌,并且由任何控制器使用以确保没有伪造/外部请求。

后端管理:

一旦控制器将其命名为POST / PUT数据,它总是由 postProcess 功能处理,任何控制器都拥有并从其父级扩展基础控制器。

在这种特定情况下,如果你打开CartController,你会看到一个postProcess函数,它分析你传递给它的所有参数(allowSeperatedPackage,allow_refresh等),在按要求处理完所有元素后生成一个响应。 例如,在您链接的调用中,allowSeperatedPackage将在控制器中触发以下子循环

elseif (Tools::getIsset('changeAddressDelivery'))
                $this->processChangeProductAddressDelivery();

将使用

更新用户购物车中的参数
$this->context->cart->allow_seperated_package = (boolean)Tools::getValue('value');
$this->context->cart->update();
die('{"error":false}');

请注意产品的GET特别是在ParentOrderController + shopping-cart.tpl上制作的购物车摘要页面中,所以如果你需要在页面上添加一些内容ajax它不是正确的方法,但您可能需要在 ParentOrderController 中扩展 _assignSummaryInformations()功能,并添加您需要的任何变量。

不幸的是,购物车是整个Prestashop系统中最复杂/最长的一个,实现新功能并不是一件容易的事,但这是唯一的方法。通过CartController / Cart / OrderController类的代码,看看你真正需要添加新参数的位置。 (记得使用覆盖系统,以避免不可读的代码更改!)

答案 1 :(得分:0)

您可以使用此挂钩actionCartListOverride 或者只需修改displayAjax中方法controllers/front/CartController.php 您将找到一个$result数组,您可以在其中添加变量。