Prestashop Ajax Значение для класса модуля - PullRequest
0 голосов
/ 14 июля 2020

Я уже передал значение ajax переднему контроллеру из js в prestashop 1.7.6. Поэтому я сначала установил ссылку в функции hookFooter файла класса модуля с помощью

// Create a link with the path
$link = new Link;
$parameters = array("action" => "send_changed_price");
$ajax_link = $link->getModuleLink('mymodule','ajax', $parameters);

Во-вторых, использовал этот URL-адрес в файле custom. js и сделал вызов Ajax с помощью

    $.getJSON(
        ajax_link, 
        {parameter1 : 1100}, 
        function(data) {
            if(typeof data.status !== "undefined") {

                // Use your new datas here
                console.log(data);
            }

        }
    );

И получить значение Ajax в функции init_content фронт-контроллера mymoduele / controllers / front / ajax. php с

     switch (Tools::getValue('action')) {

            case 'send_changed_price':
            $var1 = Tools::getValue('parameter1');
            // $var1.=$var;//(float)$var1;
            // Edit default response and do some work here
            $response = array('status' => true, "message" => $var1);
            break;

        default:
            break;

    }

Проблема в том, что я хочу использовать это значение ajax в моем классе модуля, но не в классе переднего контроллера. Потому что я должен использовать это значение в функции hookActionCartSave (одна из ловушек) моего класса модуля.

Как я могу передать это значение в основной класс модуля? Или есть другой способ передать значение Ajax в основной класс модуля напрямую?

Ответы [ 2 ]

0 голосов
/ 18 июля 2020

Во-первых, я добавил эти данные в datable с помощью одного переднего контроллера, который адаптируется к базе данных:

<?php


class DbAdapter extends ObjectModel {
    
    public static $definition_array = array(
        'table' => 'tablename',
        'primary' => 'id',
        'fields' => array(
            'value1' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
            'value2' => array('type' => self::TYPE_FLOAT, 'validate' => 'isNegativePrice', 'required' => true)
        )
    );

    public static function insertData($value1, $value2, ...) {
            $result=Db::getInstance()->insert('tablename', array(
                'value1' => $value1,
                'value2' => $value2,
                ...........
            ));
    }

    public static function getData($value1) {
        $query = "SELECT * FROM `"._DB_PREFIX_."tablename` WHERE `value1` = $value1 ORDER BY id DESC";
        return Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($query);
    }
}

На переднем контроллере после получения значения Ajax сохраните их с помощью этой функции адаптера datatable.

switch (Tools::getValue('action')) {

            case 'send_changed_price':
                $var1 = Tools::getValue('parameter1');
                $var2 = "additional_value";

                DbAdapter::insertData($var1, $var2);
                break;

            default:
                break;

        }

И в только что использованном основном классе модуля getData() function

$stitch_data_row= DbAdapter::getStitch($specific_price->id_cart);

Конечно, вы должны включить этот файл класса адаптера Db php вверху в main модуля class и Ajax файл класса.

include_once(_PS_MODULE_DIR_ . 'modulename/classes/DbAdapter.php');
0 голосов
/ 17 июля 2020

Из FrontController вы можете вызвать любую функцию модуля, которая вам нужна, используя $this->module->HERE_IS_NAME_OF_YOUR_MODULE_FUNCTION()

...