我正在尝试通过Prestashop 1.5中的AJAX调用来调用控制器函数。我甚至不知道是否可能。这就是我做的: 我覆盖产品控制器(在override / controllers / front / ProductController.php中)以加载额外的媒体并执行默认控制器不执行的操作。这就是我的控制器的样子:
<?php
class ProductController extends ProductControllerCore
{
public function setMedia() {
parent::setMedia();
// Add extra ressources
// CSS
$this->addCSS(...)
$this->addJS(array(...));
}
// Extra methods
public function renderCart() {
echo '<h2>HELLO</h2>';
}
}
这是我的问题:如何通过AJAX调用调用renderCart()函数?这甚至可能吗?
感谢您的帮助!
答案 0 :(得分:2)
您可以直接调用renderCart()函数,而不是以其他方式执行。通常,每个控制器都有一些预定义的函数
init()
and initContent()
每个人都有自己的细节和目的,所以我不打算在这里解释。
现在你需要做什么来在你的控制器中创建另一个名为init()的函数,然后用它调用你的renderCart函数。 检查下面的示例代码
public function init()
{
parent::init(); //First you have to call the parent init to initialize resources
if($this->ajax) //special variable to check if the call is ajax
{
$this->renderCart(); // call your function here or what ever you wanna do
}
}
我希望您能从代码评论中理解。
注意:这是示例代码,未经过测试。它只是为了给你一个想法
谢谢
答案 1 :(得分:0)
关于如何构建ajax链接的几个例子(然后你可以在ajax调用上使用它):
示例1:链接到常规控制器(假设OrderDetailCustom控制器):
{$link->getPageLink('order-detail-custom', true)}
//you will then use it like this (note ajax:true):
$.get(ajax_link, {'id_order': id_order, 'ajax': true});
//the controller will then generally have some
//utility functions based on Tools::getValue('ajax') or
//$this->isXmlHttpRequest(); > a builtin Controller class's function
示例2:链接到模块的控制器(假设SimpleMailer示例modile和SendSimpleMail模块控制器)
{$link->getModuleLink('simplemailer','sendsimplemail',[],true)}
请查看Link类代码中的这些函数。 此外,对于最后一个示例,请参阅此处如何构建模块控制器以及命名的工作原理:
how to generate a link to a module controller in prestashop?