0

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

谢谢你的帮助 !

4

2 回答 2

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
    }
 }

我希望您能从代码注释中理解。

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

谢谢

于 2013-03-19T06:53:39.053 回答
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 示例模块和 SendSimpleMail 模块控制器)

{$link->getModuleLink('simplemailer','sendsimplemail',[],true)}

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

如何在 prestashop 中生成到模块控制器的链接?

于 2015-07-09T07:44:18.000 回答