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

Jquery 在prestashop 1.5中通过AJAX调用调用控制器函数,jquery,ajax,function,controller,prestashop,Jquery,Ajax,Function,Controller,Prestashop,我试图通过Prestashop 1.5中的AJAX调用调用控制器函数。我甚至不知道这是否可能。这就是我所做的: 我重写产品控制器(在override/controllers/front/ProductController.php中)以加载额外的媒体,并执行一些默认控制器不执行的操作。这就是我的控制器的外观: <?php class ProductController extends ProductControllerCore { public function setMedia

我试图通过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>';
    }


}

您可以直接调用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
    }
 }
我希望您能从代码注释中理解

注意:这是一个示例代码,未经测试。这只是为了给你一个想法


感谢您提供了几个关于如何构建ajax链接的示例(您可以在ajax调用中使用它):

示例1:链接到常规控制器(假定为OrderDetailCustom控制器):

示例2:链接到模块的控制器(假设一个SimpleEmailer示例modile和一个SendSimpleEmail模块控制器)

请查看链接类代码中的这些函数。 此外,对于最后一个示例,请参见此处如何构建模块控制器以及命名工作原理:


谢谢你的帮助!但是如何通过AJAX调用调用我的控制器呢?我的$.ajax方法中的URL是什么?@aliasse您是否已经在prestashop中实现了一个工作的ajax调用?如果没有,请转到此文档链接:感谢Dexter分享此链接感谢此有用的链接@DexterHuinda
{$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
{$link->getModuleLink('simplemailer','sendsimplemail',[],true)}