Prestashop: как отправить данные из шаблона админпанели в админ-контроллер?

Я пытаюсь создать настраиваемую страницу в админпанели Prestashop, где владелец магазина может заполнять свои предстоящие события, которые будут отображаться в столбце на странице header.tpl. Шаблоны и контроллер пока работают, их структура основана на ответе здесь, в Stack Overflow:

Как создать новую страницу в панели администратора prestashop? < / а>

Теперь я сделал в content.tpl (с добавленными пользовательскими файлами JavaScript и CSS) форму с полями ввода. Следующим шагом является отправка его контроллеру для сохранения в базе данных. Но я застрял в этой части. Я не могу найти, как мне красиво отправить форму контроллеру. Сначала я попробовал это с помощью функции Ajax, но не смог найти правильный способ. Также без Ajax успеха нет.

$.ajax({
type: 'POST',
headers: { "cache-control": "no-cache" },
url: baseUri + '?rand=' + new Date().getTime(),
async: true,
cache: false,
dataType : "json",
data:{
    processEvents: true,
    ajax: 'true',
    controller: 'AdminEvents',
    token: static_token
    },
    //success: function(jsonData){
        //}
    });

Это пример функции Ajax, которую я пробовал. Мои вопросы:

  • Как другие файлы tpl или js получают baseUri, где эта переменная установлена?
  • Какова функция даты и времени? Rand в этой строке? Что-то вроде токена безопасности?
  • What is the url of the controller? Also the url when I use
  • I guess the processEvents : true and Ajax : true is for security reasons and to check if the form is submitted by Ajax or not?
  • Зачем нужно отправлять имя контроллера?
  • Откуда токен?

Вопросы по контроллеру:

  • Какие (функции Prestashop по умолчанию) можно или нужно использовать? Например:

    if (Tools::isSubmit('name')){
    

    и Т. Д.

    if (Tools::getValue('create_account')){
    

    и Т. Д.

  • Могу ли я использовать эти функции где угодно или только в функции Init?

Много вопросов, не стесняйтесь отвечать только на их часть, мне просто нужен хороший толчок в правильном направлении, поиск и чтение онлайн-документации и в Интернете не дали мне решения и немного промыли мне мозги.

РЕДАКТИРОВАТЬ:

Я сам немного продвинулся:

  • Откуда берется токен?
  • Какой URL у контроллера? Также URL, когда я использую

С помощью инструментов getAdminTokenLite и имени контроллера я сгенерировал URL-адрес контроллера:

$token = '?controller=AdminEvents&token='.Tools::getAdminTokenLite('AdminEvents');

URL-адрес для публикации - это токен плюс домен, каталог администратора и index.php.

С помощью инструмента getValue я получаю данные POST, как в PHP, с помощью $ _POST ["name"].

Tools::getValue('event_name')

Так что он работает, но я думаю, что с другими инструментами Presta по умолчанию он может быть лучше.


person Dinizworld    schedule 23.01.2014    source источник


Ответы (1)


Я знаю, что вам уже очень поздно отвечать, но наверняка это поможет другим товарищам с той же проблемой.

Вот пример того, как реализовать вызовы ajax в Prestashop 1.6 на панели администратора, используя ЛЮБОЙ контроллер из BackOffice (при желании вы также можете использовать контроллер ajax.php, но я использую для этого AdminImportController ())

tpl часть:

$('#mybtn').click(function(e) {

    var data = $('#datalist').val();

    // Ajax call with secure token 
    $.post( "{$current|escape:'html':'UTF-8'}&token=       {$token|escape:'html':'UTF-8'}",
             { ajax: true, action: "MyFunction", mydata: data } );

            });

И на стороне контроллера администратора:

    public function ajaxProcessMyFunction()
    {
        // Get param
        $mydata = (int)Tools::getValue('mydata');

        $answer = 0;

        if( $mydata > 0 ) {

            $this->importProfList = Db::getInstance()->executeS(
                "SELECT * FROM  .... LIMIT 1"
            );
            ...
            $answer = $someOperationResult;
        }

        // Response
        die(Tools::jsonEncode(array(
          'answer' => htmlspecialchars($answer)
        )));
  }

Проверено и отлично работает.

С Уважением

person manuelbcd    schedule 23.06.2015