rewuxiin Posted December 4, 2014 Share Posted December 4, 2014 (edited) надеюсь знатоки натолкнут на понимание вопроса. я лишь немного пишу на php, с ajax и json знаком, однако так и не понял как работать с ними в prestashop документацию читал, возможно не наткнулся на то что нужно.так же, как пример, рассматривал модуль ajaxcart. модуль не связан с магазином и вообще какими либо функциями, ему нужно лишь получить из базы данные и отобразить. получаю данные, отправляю в smarty public function hookDisplayHome($params) { $vendors = array(); $sql = 'SELECT * FROM `podbor_shini_i_diski`'; $results = Db::getInstance()->ExecuteS($sql); foreach ($results as $row) { $vendors[] = $row['vendor']; } $this->context->smarty->assign(array( 'vendors' => array_unique($vendors), )); return $this->display(__FILE__, 'selectioncar.tpl'); в шаблоне у меня форма, в которой поочередно нужно выбирать из выпадающего списка данные.т.е. выше я отображаю марки авто, выбираю марку - отправляю ajax, возвращаю данные для следующего поля - марку автомобиля, далее год авто, и объемвот как здесь http://basecontent.info/stats/podbor_shini_diski/new/podbor.phpв контроллере создаю функцию которая допустим вернет мне модель public function displayAjax($post){ $models = array(); if (!empty($post['vendor']) != 0) { foreach ($results as $row) { if ($row['vendor'] == $post['vendor']) { $models[] = $row['car']; } } } return $models; } создаю файл selectioncar-ajax.php include_once(dirname(__FILE__).'/selectioncar.php'); $context = Context::getContext(); $selectionCar = new selectioncar(); $models = $selectionCar->displayAjax($_POST); die(Tools::jsonEncode(array('models'=>$models))); ну и jquery function retMod() { data = $('#carTyre').serialize(); $.ajax({ type: 'POST', headers: {"cache-control": "no-cache"}, url: baseDir + 'modules/selectioncar/selectioncar-ajax.php', async: true, cache: false, data: data, success:function(res){ alert(res); } }); } однако алерт получаю пустой. как же получить данные? Edited December 4, 2014 by rewuxiin (see edit history) Link to comment Share on other sites More sharing options...
frozzen Posted December 4, 2014 Share Posted December 4, 2014 Попробуйте в $.ajax data добавить параметр ajax=true. Насколько я помню, именно так контроллер понимает, что это был ajax-запрос. Link to comment Share on other sites More sharing options...
rewuxiin Posted December 4, 2014 Author Share Posted December 4, 2014 Попробуйте в $.ajax data добавить параметр ajax=true. Насколько я помню, именно так контроллер понимает, что это был ajax-запрос. спасибо, действительно это я упустил, однако всеравно вернувшийся алерт - пуст(( Link to comment Share on other sites More sharing options...
Kerm Posted December 4, 2014 Share Posted December 4, 2014 (edited) Может потому что dataType: "json" забыл указать? var number = $number; var product_id = $product_id; $.ajax({ type: "POST", url: "/ajax-info.php", dataType: "json", data: { 'number': number, 'product_id': product_id }, cache: false, success: function(data) {} Edited December 4, 2014 by Kerm (see edit history) Link to comment Share on other sites More sharing options...
rewuxiin Posted December 4, 2014 Author Share Posted December 4, 2014 Может потому что dataType: "json" забыл указать? возможно. добавил, теперь возвращается null. массив, на всякий случай, в selectioncar-ajax.php , для проверки, заполнял die(Tools::jsonEncode(array('models'=>'test'))); Link to comment Share on other sites More sharing options...
Kerm Posted December 4, 2014 Share Posted December 4, 2014 Попробуй вот так результат возвращать: header('Content-type: application/json'); echo json_encode($result[0]); Link to comment Share on other sites More sharing options...
Kerm Posted December 4, 2014 Share Posted December 4, 2014 Где $result[0] для примера, вообщем там массив должен быть. Link to comment Share on other sites More sharing options...
rewuxiin Posted December 4, 2014 Author Share Posted December 4, 2014 все тот же null Link to comment Share on other sites More sharing options...
frozzen Posted December 4, 2014 Share Posted December 4, 2014 возможно. добавил, теперь возвращается null. массив, на всякий случай, в selectioncar-ajax.php , для проверки, заполнял die(Tools::jsonEncode(array('models'=>'test'))); А в отладке если пройти? Это уже вообще на какие сказки похоже. Вы вообще попадаете в selectioncar-ajax.php? И еще, Вы уверены, что Вам вообще контроллер нужен? Link to comment Share on other sites More sharing options...
rewuxiin Posted December 4, 2014 Author Share Posted December 4, 2014 А в отладке если пройти? Это уже вообще на какие сказки похоже. Вы вообще попадаете в selectioncar-ajax.php? И еще, Вы уверены, что Вам вообще контроллер нужен? в отладке ошибок нет. при открытии по прямому пути файла /modules/selectioncar/selectioncar-ajax.php - пусто попробовал отключить файл include_once(dirname(__FILE__).'/selectioncar.php'); заработало! но что это значит? дальнейшую логику писать в /selectioncar-ajax.php ? и почему считаете что контроллер мне не нужен? прошу прощения если что-то очевидное упускаю, привык делать все в MVC, а там получил в модель, обработал в контроллере, отдал во вью Link to comment Share on other sites More sharing options...
frozzen Posted December 4, 2014 Share Posted December 4, 2014 Ну если привыкли к правильному (а MVC - это несомненно правильное), то тогда 1. в папке модуля заводите папку /controllers/front 2. создаете там контроллер (ИмяКонтроллера.php) class ИмяКонтроллераModuleFrontController extends ModuleFrontController { public function postProcess() { die(Tools::jsonEncode(array( 'models'=>'test',))); } } 3. в java пишете ... url: {$link->getModuleLink('ИмяМодуля', 'ИмяФайлаКонтроллера', ['параметр1' => 'параметр1значение'])|addslashes} ... Это будет схематично как-то так, как Prestashop'овцы прописали. :-) 1 Link to comment Share on other sites More sharing options...
rewuxiin Posted December 4, 2014 Author Share Posted December 4, 2014 спасибо, попробую Link to comment Share on other sites More sharing options...
rewuxiin Posted December 9, 2014 Author Share Posted December 9, 2014 что-то у меня вашим Js непонятно как его использовать-то? я подобную запись нашел только в формах prestashop url: {$link->getModuleLink('ИмяМодуля', 'ИмяФайлаКонтроллера', ['параметр1' => 'параметр1значение'])|addslashes} Link to comment Share on other sites More sharing options...
frozzen Posted December 9, 2014 Share Posted December 9, 2014 что-то у меня вашим Js непонятно как его использовать-то? я подобную запись нашел только в формах prestashop url: {$link->getModuleLink('ИмяМодуля', 'ИмяФайлаКонтроллера', ['параметр1' => 'параметр1значение'])|addslashes} Этот url: - это параметр из $.ajax. Использовать через .tpl - либо полностью скрипт там писать, либо скрипт подключать отдельно (с переменной), а переменную определять в .tpl. Link to comment Share on other sites More sharing options...
Kerm Posted December 9, 2014 Share Posted December 9, 2014 print_r каждого шага в обработке ajax запроса в php файле поможет Вам решить проблему.. Link to comment Share on other sites More sharing options...
rewuxiin Posted December 9, 2014 Author Share Posted December 9, 2014 ушел чесать смарти-репу Link to comment Share on other sites More sharing options...
Kerm Posted December 9, 2014 Share Posted December 9, 2014 (edited) Причем здесь вообще смарти...открываешь php файл и распечатываешь вывод шагов в обработке ajax запроса в файл через "file_put_contents" и ищешь ошибку... Edited December 9, 2014 by Kerm (see edit history) Link to comment Share on other sites More sharing options...
rewuxiin Posted December 9, 2014 Author Share Posted December 9, 2014 я имел ввиду работу ajax в смарти. а вы видимо мне советуете как правильно поступить в самом первом случае который я пытался сделать? Link to comment Share on other sites More sharing options...
Kerm Posted December 11, 2014 Share Posted December 11, 2014 Как ajax вообще связан со smarty? каким образом? Link to comment Share on other sites More sharing options...
frozzen Posted December 11, 2014 Share Posted December 11, 2014 Как ajax вообще связан со smarty? каким образом? Это, как я понимаю, риторический вопрос?! Link to comment Share on other sites More sharing options...
rewuxiin Posted December 17, 2014 Author Share Posted December 17, 2014 а дело было так.при подключении в selectioncar-ajax.php контроллера selectioncar.php происходила проверка if (!defined('_PS_VERSION_')) exit; и происходил тот самый exit а нужно-то было в selectioncar-ajax.php добавить require_once(dirname(__FILE__).'/../../config/config.inc.php');require_once(dirname(__FILE__).'/../../init.php'); спасибо максиму (absent), подсказал куда копать! Link to comment Share on other sites More sharing options...
Recommended Posts