Prestashop: Как да изпратя данни от шаблона на администраторския панел към администраторския контролер?

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

Как да създадете нова страница в административния панел на prestashop?

Сега направих в content.tpl (с добавените персонализирани JavaScript и CSS файлове) формата с полетата за въвеждане. Следващата стъпка е да го изпратите на контролера, за да го запишете в базата данни. Но аз съм заседнал тази част. Не мога да намеря как мога добре да изпратя формуляра на контролера. Първо го пробвах с функция на 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["име"].

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