Prestashop: передача данных из js-файла контроллеру на пользовательскую страницу

#ajax #controller #request #prestashop

#ajax #контроллер #запрос #prestashop

Вопрос:

У меня возникли трудности с передачей значения из моего личного js в контроллер и восстановлением его на личной странице tpl.

Этот модуль будет использоваться для настройки продукта после некоторых выборов и заполнения полей.

Выбранные элементы переходят с вкладок на вкладки. Проблема в том, что я не могу получить значение {$ var}

У меня есть:

  • JS в root-> modules-> modulename-> views-> js->namejsfile.js
  • КОНТРОЛЛЕР в корне-> модули-> имямодуля-> контроллеры-> передняя панель->controllername.php
  • ПРОСМОТР в root->modules->modulename->views->templates-> front->filename.tpl

в JS

 $('#send').click(function(){
            var ciao = 'cioaa';
            var myUrl = prestashop.urls.base_url   'index.php?fc=moduleamp;module=configuratore';
            $.ajax({
                type: 'get',
                cache:false,
                url: myUrl,
                data: {
                    ajax: true,
                    datas:ciao,
                    action: 'fromAjax',
                },
          })
          .done(function() {
            console.log('Success!');
          })
          .fail(function() {
            console.log('error');
          });
});
  

в PHP

 class ConfiguratoreTaskModuleFrontController extends ModuleFrontController
{
    public function __construct()
    {
        parent::__construct();
    }

    public function init()
    {
        parent::init();
    }

    public function initContent()
    {


        parent::initContent();
        $this->setTemplate('module:configuratore/views/templates/front/task.tpl');
    }
    $this->fromAjax();
}

public function fromAjax()
{
    $mVar = Tools::getValue('datas');
    return   $this->context->smarty->assign(array('var'=>$mVar));
}
  

в TPL

 {$var}
  

Комментарии:

1. Я исправил, добавив контроллер в URL. amp;controller=task Я получаю ответ в журнале консоли, но я не вижу параметр на пользовательской странице. что я делаю не так?

Ответ №1:

 <?

public function fromAjax()
{
    $mVar = Tools::getValue('datas');
    $this->context->smarty->assign(array('var'=>$mVar));
    $templateFile = 'module:configuratore/views/templates/front/task.tpl';
    $html = $this->fetch($templateFile);
    die($html); // pass to JS
}
  

в JS:

 .done(function(html) {
        console.log(html);
      })
  

Комментарии:

1. Нет, не работает. ошибка ответа с Attempted to call an undefined method named "createTemplate" of class "ConfiguratoreTaskModuleFrontController" и при возврате к setTemplate ошибка начинается Call to a member function fetch() on null

2. О, извините. Я имел в виду метод использования, а не функции, которые я использовал. Сообщение было обновлено

3. Спасибо Махди. Я изменил вашу выборку в $this->context->smarty->fetch на основе последней версии, и теперь ошибка в макете Notice: Undefined index: layout