如何在 Prestashop 模块中使用的 Smarty 模板中调用 JS 中的后端函数?
How to invoke a backend function in JS in a Smarty template used in a Prestashop module?
在自定义 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
您需要在模块中创建一个 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));
现在在 JavaScript 里面 .tpl
,或者通过一个 .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.
中添加一些安全令牌
在自定义 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
您需要在模块中创建一个 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));
现在在 JavaScript 里面 .tpl
,或者通过一个 .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.
中添加一些安全令牌