通过prestashop 1.5中的AJAX调用调用控制器函数

时间:2013-03-18 13:33:32

标签: jquery ajax function controller prestashop

我正在尝试通过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()函数?这甚至可能吗?

感谢您的帮助!

2 个答案:

答案 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?