Как в сниппете получить значения полей из AjaxForm?
Здравствуйте!
Необходимо работать со сторонней базой данных через форму. Например, по никнейму и паролю, введенным в форму, вывести ID строки таблицы с этим никнеймом и паролем.
Возможно, ответ на такой вопрос уже есть, однако, я не нашел ничего подходящего… Заранее извиняюсь. Готов ловить тапки.
Вызов формы на странице выглядит так:
Это первый вопрос. А второй — как вывести результат работы сниппета (полученный из запроса ID) на страницу? Где-нибудь под формой. Через событие af_complete?
Необходимо работать со сторонней базой данных через форму. Например, по никнейму и паролю, введенным в форму, вывести ID строки таблицы с этим никнеймом и паролем.
Возможно, ответ на такой вопрос уже есть, однако, я не нашел ничего подходящего… Заранее извиняюсь. Готов ловить тапки.
[[!AjaxForm?
&form=`get_id_form`
&snippet=`getId`
]]
Чанк c формой:<form class="form-horizontal">
<div class="form-group">
<label for="name" class="col-md-1 control-label">Ник:</label>
<div class="col-md-5">
<input type="text" class="form-control" id="name" name="name" value="[[+fi.name]]" placeholder="">
</div>
</div>
<div class="form-group">
<label for="pass" class="col-md-1 control-label">Пароль:</label>
<div class="col-md-5">
<input type="password" class="form-control" id="pass" name="pass" value="[[+fi.pass]]" placeholder="">
</div>
</div>
<div class="form-group">
<div class="col-md-offset-1 col-md-5">
<button type="submit" class="btn btn-default" name="submit">Получить ID</button>
</div>
</div>
</form>
Сниппет пока стандартный:<?php
if (empty($_POST['name'])) {
return $AjaxForm->error('Ошибки в форме', array(
'name' => 'Вы не заполнили имя'
));
}
else {
return $AjaxForm->success('Форма прошла проверку');
}
Он вроде работает, на пустое поле name ругается, с заполненным — показывает сообщение, что форма в порядке. Но я не могу получить значение $_POST['name']. Если перед return добавляю строку типа print $_POST['name'];
, то при нажатии на кнопку «Получить ID» последняя становится неактивной, а курсор поверх формы приобретает вид перечеркнутого красного круга. Форма как бы зависает. В консоль при этом ничего не выводится.Это первый вопрос. А второй — как вывести результат работы сниппета (полученный из запроса ID) на страницу? Где-нибудь под формой. Через событие af_complete?
Комментарии: 3
Более того, форма «зависает», если вызывать print или echo с любыми параметрами. Например, если перед return вписать echo 'blablabla', зависнет. Да и вообще зависает при добавлении любой строки…
В таких скриптах не нужно писать никаких echo и print. Это ж аякс.
Для начала если хотите проверить поступление данных или что то залогировать используйте $modx->log();
Примеры
Для начала если хотите проверить поступление данных или что то залогировать используйте $modx->log();
Примеры
$modx->log(1, print_r($_POST, 1));
$modx->log(1, $_POST['name']);
AjaxForm не особо то предназначен для возврата значений. Его основная цель захватить данные формы и куда то отправить. Чтобы манипулировать возвращенными данными нужно переписывать скрипт js ajaxForm, добавляя свою логику
Николай, спасибо!
По Вашему совету прологировал всё, что можно) В итоге конкретно эта задача решилась. ID из сниппета возвращал вместо success:
Может быть, натолкнете на правильный путь, как поступить? Писать форму и обработчик целиком в сниппете? Или есть какие-то готовые решения? Цель — получить из формы значения полей, создать из них запрос в БД, ответ вывести на странице.
Заранее спасибо!
По Вашему совету прологировал всё, что можно) В итоге конкретно эта задача решилась. ID из сниппета возвращал вместо success:
return $row['ID'];
А потом ловил событие af_complete и выводил response на страничку. Но это работает, только когда response — число, со строками так не прокатывает… А надо бы…Может быть, натолкнете на правильный путь, как поступить? Писать форму и обработчик целиком в сниппете? Или есть какие-то готовые решения? Цель — получить из формы значения полей, создать из них запрос в БД, ответ вывести на странице.
Заранее спасибо!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.