使用 ajax 调用 prestashop 模块

4 ajax module prestashop prestashop-1.7

我有一个名为“MyMenu”的 PrestaShop 模块,我想通过 AJAX 调用调用此菜单。我的模块显示在hookFooter()方法中:

public function hookFooter()
{
    $display = $this->display(__FILE__, 'megamenu.tpl', $smartyCacheId);
    Tools::restoreCacheSettings();
    return  $display;
}
Run Code Online (Sandbox Code Playgroud)

我想用这个脚本显示:

<div class="load_menu"></div>
<script>
    $(document).ready(function (e) {
        $.ajax({
            method: "POST",
            url: "../modules/MyMenu.php",
            data: {},
            success: function (data) {
                $('.load_menu').html(data);
            }
        })
    });
</script>
Run Code Online (Sandbox Code Playgroud)

Mat*_*oye 6

最好的方法是通过链接到您的模块的前端控制器来完成。您可以像这样调用网址:

$link->getModuleLink('modulename','controller', $parameters);
// Parameters is an optionnal array, it can be empty
Run Code Online (Sandbox Code Playgroud)

对于控制器,放置一个像这样的文件 ./modules/modulename/controllers/front/ajax.php ,内容如下:

class ModuleNameAjaxModuleFrontController extends ModuleFrontController
{
public function initContent()
{

    $response = array('status' => false);

    require_once _PS_MODULE_DIR_.'modulename/modulename.php';

    $module = new ModuleName;

    if (Tools::isSubmit('action')) {
        $context = Context::getContext();

        $cart = $context->cart;

        switch (Tools::getValue('action')) {

            case 'actionname':


                $response = array('status' => true);

                break;

            default:
                break;

        }
    }

    // Classic json response
    $json = Tools::jsonEncode($response);
    $this->ajaxDie($json);

    // For displaying like any other use this method to assign and display your template placed in modules/modulename/views/template/front/...
    // $this->context->smarty->assign(array('var1'=>'value1'));
    // $this->setTemplate('template.tpl');

    // For sending a template in ajax use this method
    // $this->context->smarty->fetch('template.tpl');

}
}
Run Code Online (Sandbox Code Playgroud)