Prestashop 1.7.6.2 модуль обратного вызова ajax

#ajax #prestashop #jquery-select2 #prestashop-1.7

#ajax #prestashop #jquery-select2 #prestashop-1.7

Вопрос:

У меня проблема с ajax из select2 в prestashop 1.7. Когда я пытаюсь что-то записать, вызов равен 200, но я получил сообщение об ошибке «Контроллер Psb2BAjaxModuleAdmin отсутствует или недействителен».

Я создаю контроллер для тестирования в своем модуле modules/psb2b/src/Controller/Psb2BAjaxModuleAdminController.php

 <?php


namespace ScenarioPSB2BController;
use SymfonyComponentHttpFoundationJsonResponse;
use PrestaShopBundleControllerAdminFrameworkBundleAdminController;

class Psb2BAjaxModuleAdminController extends FrameworkBundleAdminController
{
    public function __construct()
    {
        parent::__construct();
    }
 
    public function initContent()
    {
        parent::initContent();

    return $this->ajaxDie(json_encode("test"));

    }
    
    public function postProcess()
    {
        PrestaShopLogger::addLog("MODULE CONTROLLER OK ", 1);
    }

    public function displayAjax()
    {
            $usb_search_token = $this->generateUrl("psb2bAjaxAdmin");

           return $this->ajaxDie(json_encode("test"));
    }

}
 

и в каталоге администратора admin*********/ темы/по умолчанию/js

 $(document).ready(function(){
    $('#category_features').select2({
      width: 'resolve',
      ajax: {
        type: 'POST',
        url: usb_search_token,
        dataType:'json',
        delay: 250,
          data: function (params) {
              return {
                  q: params.term // search term
              };
          },
          success: function (result) {
              console.log(result);
          }
  } });


});
 

В моем модуле я использовал hook

 public function hookActionAdminControllerSetMedia()
{

    MediaCore::addJsDefL('usb_search_token', $this->context->link->getAdminLink('Psb2BAjaxModuleAdmin'));
    $this->context->controller->addCSS(_PS_BO_ALL_THEMES_DIR_ . 'default/js/select2-full/dist/css/select2.min.css','all');
    $this->context->controller->addJS(_PS_BO_ALL_THEMES_DIR_ . 'default/js/select2-full/dist/js/select2.min.js');
    $this->context->controller->addJS(_PS_BO_ALL_THEMES_DIR_ . 'default/js/tree.js');

}
 

Ответ №1:

Кажется, ваш контроллер больше похож на 1.6 , чем на 1.7 с Symfony one.

Обычно у меня есть метод indexAction в controllers/Admin/my_controller.php .

В этом методе я использую

 Media::addJsDef(array(
'usb_search_token' => admin_link));
));
 

Затем, поскольку этот метод возвращает

 return $this->render('@Modules/rmvcolorgrid/views/admin/my_file.html.twig', [])
 

URL-адрес доступен для файла js в views/js/back.js .

Вы должны взглянуть на PS docs для рекомендуемого способа создания этого.