Крючок выполняется только во время выполнения, когда Prestashop генерирует файлы шаблонов. Здесь вы хотите создать функцию ajax в своем модуле.
Ваш модуль файлы будут выглядеть следующим образом:
- mymodule.php
- ajax/
- my_module_ajax.php
- js/
- my_module.js
- views/
- templates/
- front/
- my_module_template.tpl
В файле mymodule.php
у вас есть:
<?php
if (!defined('_PS_VERSION_'))
exit;
class MyModule extends Module
{
public function __construct()
{
[...]
}
public function install()
{
if (!parent::install() || !$this->registerHook('header'))
return false;
return true;
}
public function hookHeader($params)
{
$this->context->controller->addJS(($this->_path).'js/my_module.js');
}
public function _ajax_create_product($params)
{
[...]
return $result;
}
}
В файле my_module_ajax.php
у вас есть:
<?php
require_once(dirname(__FILE__).'/../../../config/config.inc.php');
require_once(dirname(__FILE__).'/../../../init.php');
require_once(dirname(__FILE__).'/../mymodule.php');
$context = Context::getContext();
// Instance of module class
$module = new MyModule();
switch (Tools::getValue('action'))
{
case 'createProduct':
echo $module->_ajax_create_product(Tools::getValue('test'));
break;
default:
die('error');
}
В файл my_module.js
у вас есть:
$(document).ready(function(){
$(document).on('click', '#myButton', function(){
createProduct('a_value');
});
});
function createProduct(value) {
$.ajax({
type: 'GET',
url: baseDir + 'modules/mymodule/ajax/my_module_ajax.php?rand=' + new Date().getTime(),
headers: { "cache-control": "no-cache" },
async: true,
cache: false,
data: 'action=createProduct&value=' + value+ '&other=' + 'test',
success: function(data)
{
console.log("product created");
}
});
}
В файле my_module_template.tpl
у вас есть:
<button id="myButton" name="myButton">Create product!</button>
Этот код не проверяется и должна быть адаптирована к вашим потребностям, но общая концепция здесь.
Вместо того, чтобы называть крючок, вы должны просто вызвать метод для создания продукта, который вызовет для вас крюк. – TheDrot
@TheDrot: метод создания продукта находится на функции hook. Функция hook находится в файле php. Единственный способ вызвать функцию из файла php в файл tpl - использовать hook. Нет? – androniennn
Ну, тогда вы делаете это неправильно, потому что крюк должен использоваться, чтобы делать некоторые дополнительные вещи ** после ** создания продукта. – TheDrot