我知道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。
感谢您的帮助。
答案 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
数组,您可以在其中添加变量。