Как вызвать внутреннюю функцию в JS в шаблоне Smarty, используемом в модуле Prestashop? - PullRequest
0 голосов
/ 24 августа 2018

В пользовательском модуле 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>

Мне нужно вызвать getSubCategories с различными значениями из JS, чтобы динамически заполнить раскрывающийся список. Так что вместо жестко закодированных 24 я бы хотел использовать переменную JS.

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

Что нужно сделать, чтобы добиться этого?-Это своего рода веб-сервис AJAX-

Prestashop 1.7.1

1 Ответ

0 голосов
/ 24 августа 2018

Вам нужно создать php-файл в вашем модуле для обработки ajax-запроса, например:

/ модули / 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.

...