Выполнение GetResources через AjaxForm
Здравствуйте!
Помогите, пожалуйста, понять, как вызывать через AjaxForm сниппет GetResources (да или любой другой, что не важно)?
Вот описанный Василием пример простейшего сниппета, который можно вызвать через AjaxForm. Он ничего не делает, говорит только, да или нет. А куда здесь написать вызов runSnippet, чтобы он заработал на странице? Ведь, я так понимаю, return $AjaxForm возвращает только уведомления?
Помогите, пожалуйста, понять, как вызывать через AjaxForm сниппет GetResources (да или любой другой, что не важно)?
Вот описанный Василием пример простейшего сниппета, который можно вызвать через AjaxForm. Он ничего не делает, говорит только, да или нет. А куда здесь написать вызов runSnippet, чтобы он заработал на странице? Ведь, я так понимаю, return $AjaxForm возвращает только уведомления?
<?php
if (empty($_POST['name'])) {
return $AjaxForm->error('Ошибки в форме', array(
'name' => 'Вы не заполнили имя'
));
}
else {
return $AjaxForm->success('Форма прошла проверку');
}
Поблагодарить автора
Отправить деньги
Комментарии: 8
Нужно внутри этого сниппета сделать то, для чего ты отправляешь форму и выдать ответ — хорошо всё прошло, или не очень.
Нужно вызывать getResources — вызывай. Нужно отправить письмо — отправляй. AjaxForm требует только JSON ответ установленном формате, как его выдать — я и показываю в примере.
Нужно вызывать getResources — вызывай. Нужно отправить письмо — отправляй. AjaxForm требует только JSON ответ установленном формате, как его выдать — я и показываю в примере.
В этом вся и проблема. Не могу понять, как и куда написать вызов сниппета? Делал уже по-всякому, перечитал кучу примеров по вызову других сниппетов, по вызову сниппетов через ajax, но вот на AjaxForm ничего такого нет (его по ходу только для FormIt используют, как не жаль).
Делаю примерно так:
Но если рядом запустить простой сниппет, в котором будет только
Делаю примерно так:
<?php
if (empty($_POST['W'])) {
return $AjaxForm->error('Ошибки в форме', array(
'name' => 'Вы не заполнили имя'
));
}
else {
$params['parents'] = '1';
$params['sortby'] = 'menuindex';
$params['tpl'] = 'tpl';
$res = $modx->runSnippet("getResources", $params);
return $AjaxForm->success('Отлично!');
echo $res;
}
Success приходит и все. Но если рядом запустить простой сниппет, в котором будет только
$params['parents'] = '1';
$params['sortby'] = 'menuindex';
$params['tpl'] = 'tpl';
$res = $modx->runSnippet("getResources", $params);
echo $res;
Все успешно вываливается. Что, что же я делаю не так?(
Ты бы почитал про PHP, что-нибудь.
Например то, что после return ничего не выполняется.
Например то, что после return ничего не выполняется.
Извиняюсь за приступ идиотизма. Действительно, сначала пихал после return'a, потом засунул в echo перед return'ом, потом все-таки додумался в ответ $AjaxForm отправить и default.js поправить.
Надеюсь, это хорошее решение?
Надеюсь, это хорошее решение?
Не знаю, зачем тебе пришлось править default.js, но ответ пихать в ответ (простите за тавтологию) — правильное решение.
иначе никак html не мог вывести.
В сниппете сделал вот так.
Подозреваю, что можно как-то иначе…
p.s. кодер из меня и правда хреновый, но я учусь
В сниппете сделал вот так.
$params['parents'] = '1';
$params['sortby'] = 'menuindex';
$params['tpl'] = 'cranes-tpl';
$res = $modx->runSnippet("getResources", $params);
return $AjaxForm->success('Отлично!', array(
"res" => $res));
Плюс в default.js просто по success вывел html в нужный слой. Подозреваю, что можно как-то иначе…
p.s. кодер из меня и правда хреновый, но я учусь
Если надо что-то в HTML выводить, то да, иначе никак.
Но советую для вывода ресурсов через Ajax использовать более подходящие решения, типа pdoPage.
Но советую для вывода ресурсов через Ajax использовать более подходящие решения, типа pdoPage.
Я мастерю что-то вроде онлайн калькулятора, где по заданным параметрам будет вывод нужной техники, поэтому pdoPage тут не поможет. Но о функционале pdoPage я знаю, как раз еще один проект делаю именно при помощи него в ajax режиме.
Спасибо за помощь!
Спасибо за помощь!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.