如何在Prestashop模块中使用的Smarty模板中调用JS中的后端函数?

时间:2018-08-24 15:50:20

标签: prestashop smarty prestashop-1.7

在自定义的prestashop模块中,我试图在下拉列表中动态显示子类别。

这是我在调用模板之前添加到挂钩中的代码:

$subcatObj = new Category("24");
$subcatObj2 = $subcatObj->getSubCategories($this->context->language->id);

$this->context->smarty->assign('seriesCategories', $subcatObj2 );

这就是我在模板中使用它的方式:

<select id="series_dropdown" class="selectpicker" data-style="btn-primary">
    {foreach from=$seriesCategories item=seriesCategory}
        <option value="{$seriesCategory.id_category}">{$seriesCategory.name}</option>
    {/foreach}
</select>

我需要用不同于JS的值调用此getSubCategories,以动态填充下拉列表。 因此,我改为使用硬编码24,我想使用JS变量。

$subcatObj = new Category(******** JAVASCRIPT VARIABLE *********);
$subcatObj2 = $subcatObj->getSubCategories($this->context->language->id);

该怎么做才能做到这一点? -这是一种AJAX网络服务-

Prestashop 1.7.1

1 个答案:

答案 0 :(得分:1)

您需要在模块中创建一个php文件来处理ajax请求,例如:

  

/modules/your_module/ajax.php

<?php

require_once(dirname(__FILE__).'/../../config/config.inc.php');

$subcatObj = new Category((int)Tools::getValue('id_category'));
$subcatObj2 = $subcatObj->getSubCategories((int)Context::getContext()->language->id);

die(Tools::jsonEncode($subcatObj2));

现在在.tpl内的JavaScript中,或在其中加载的.js文件中:

$.ajax({
    url: '/modules/your_module/ajax.php',
    type: 'POST',
    dataType: 'JSON',
    data: { id_category: $('#series_dropdown').val() }
})
.done(function(data) {
    console.log(data); // 'data' should contain the response of corresponding sub-categories
})
.fail(function() {
    console.log('An error has occurred!');
});

PD。这是一个基本示例,您应该在ajax中添加一些安全令牌。