Оформление заказа без авторизации shopkeeper 2
Здравствуйте, уважаемые коллеги, подскажите, как можно сделать форму в корзине, без необходимости авторизироваться и регистрироваться на сайте, форма нормально работает, если я авторизирован, если нет, то форма не отдает редирект на нужную страницу, не могу понять в чем проблема.
[[!FormIt?
&hooks=`shk_fihook,email,FormItAutoResponder,redirect`
&emailTpl=`shopOrderReport`
&fiarTpl=`shopOrderReport`
&emailSubject=`В интернет-магазине "[[++site_name]]" сделан новый заказ`
&fiarSubject=`Вы сделали заказ в интернет-магазине "[[++site_name]]"`
&fiarFrom=`[[++emailsender]]`
&emailTo=`*******@yandex.ru`
&emailFrom=`[[++emailsender]]`
&successMessage=`Ваш заказ отправлен, спасибо!`
&redirectTo=`84`
&validate=`o_name:required,o_phone1:required,o_zip:required,o_street:required,o_last_name:required,o_phone2:required,o_town:required,o_home:required`
]]
[[!Profile]]
<form action="[[~[[*id]]]]" method="post">
<input name="email" type="hidden" value="[[+email]]" />
<div class="private-office-text-1">Адрес доставки:</div>
<table class="order_table">
<tr>
<td>
<div class="clearfix private-office-input-block">
<div class="private-office-text-2">Имя:<span>*</span></div>
<input type="text" name="o_name" value="[[!+fi.o_name]]" class="private-office-input [[!+fi.error.o_name:isnot=``:then=`private-office-input-a`]]" />
</div>
<div class="clearfix private-office-input-block">
<div class="private-office-text-2">Телефон для связи:<span>*</span></div>
<input type="text" name="o_phone1" value="[[!+fi.o_phone1]]" class="private-office-input phone [[!+fi.error.o_phone1:isnot=``:then=`private-office-input-a`]]" />
</div>
<div class="clearfix private-office-input-block">
<div class="private-office-text-2">Индекс:<span>*</span></div>
<input type="text" name="o_zip" value="[[!+fi.o_zip]]" class="private-office-input [[!+fi.error.o_zip:isnot=``:then=`private-office-input-a`]]" />
</div>
<div class="clearfix private-office-input-block">
<div class="private-office-text-2">Улица:<span>*</span></div>
<input type="text" name="o_street" value="[[!+fi.o_street]]" class="private-office-input [[!+fi.error.o_street:isnot=``:then=`private-office-input-a`]]" />
</div>
<div class="clearfix private-office-input-block">
<div class="private-office-text-2">Корп. Стр.:</div>
<input type="text" name="o_build" value="[[!+fi.o_build]]" class="private-office-input" />
</div>
<div class="clearfix private-office-input-block">
<div class="private-office-text-2">Примечание:</div>
<textarea name="o_note" value="[[!+fi.o_note]]"></textarea>
</div>
</td>
<td>
<div class="clearfix private-office-input-block">
<div class="private-office-text-2">Фамилия:<span>*</span></div>
<input type="text" name="o_last_name" value="[[!+fi.o_last_name]]" class="private-office-input [[!+fi.error.o_last_name:isnot=``:then=`private-office-input-a`]]" />
</div>
<div class="clearfix private-office-input-block">
<div class="private-office-text-2">Телефон, если не дозвонимся:<span>*</span></div>
<input type="text" name="o_phone2" value="[[!+fi.o_phone2]]" class="private-office-input phone [[!+fi.error.o_phone2:isnot=``:then=`private-office-input-a`]]" />
</div>
<div class="clearfix private-office-input-block">
<div class="private-office-text-2">Город:<span>*</span></div>
<input type="text" name="o_town" value="[[!+fi.o_town]]" class="private-office-input [[!+fi.error.o_town:isnot=``:then=`private-office-input-a`]]" />
</div>
<div class="clearfix private-office-input-block">
<div class="private-office-text-2">Дом:<span>*</span></div>
<input type="text" name="o_home" value="[[!+fi.o_home]]" class="private-office-input [[!+fi.error.o_home:isnot=``:then=`private-office-input-a`]]" />
</div>
<div class="clearfix private-office-input-block">
<div class="private-office-text-2">Офис/квартира:</div>
<input type="text" name="o_apt" value="[[!+fi.o_apt]]" class="private-office-input" />
</div>
</td>
</tr>
</table>
<div class="private-office-necessarily"><span>*</span> - поля, обязательные для заполнения</div>
<input class="a_button" type="submit" id="" name="private-office-btn" value="Заказать">
</form>
Комментарии: 9
Для начала, посмотрите лог ошибок MODX.
Потом уберите валидацию и проверьте (я делаю вот так):
Так же советую посмотреть стандартные чанки shopkeeper, и на них проверить.
Потом уберите валидацию и проверьте (я делаю вот так):
&validate2=`o_name:required,o_phone1:required,o_zip:required,o_street:required,o_last_name:required,o_phone2:required,o_town:required,o_home:required`
Ну и код сниппета «Profile» желательно приложить. А вообще, заказы без регистрации отправляются так же, как и у зарегистрированных, нету никаких условий, разве что у зарегистрированного поля подставляются.Так же советую посмотреть стандартные чанки shopkeeper, и на них проверить.
Спасибо, Кирилл! Я уже второй день думаю, что проблема в электронной почте, по логам, так и выходит, но я не смог найти, где ее убрать, чтобы e-mail был необязателен, то ли он ее из профиля пытается тащить, то ли откуда.
(ERROR @ P:\home\h-cs.modx\www\core\cache\includes\elements\modsnippet\51.include.cache.php: 47) [FormIt] Auto-responder could not find field `email` in form submission.
(ERROR @ P:\home\h-cs.modx\www\core\cache\includes\elements\modsnippet\51.include.cache.php: 47) [FormIt] Auto-responder could not find field `email` in form submission.
Да, теперь тоже вижу проблему, уберите из FormIt все, что начинается с «fiar», а так же хук «FormItAutoResponder», если вам не нужно отправлять письмо клиенту.
[[!FormIt?
&hooks=`shk_fihook,email,redirect`
&emailTpl=`shopOrderReport`
&emailSubject=`В интернет-магазине "[[++site_name]]" сделан новый заказ`
&emailTo=`*******@yandex.ru`
&emailFrom=`[[++emailsender]]`
&successMessage=`Ваш заказ отправлен, спасибо!`
&redirectTo=`84`
&validate=`o_name:required,o_phone1:required,o_zip:required,o_street:required,o_last_name:required,o_phone2:required,o_town:required,o_home:required`
]]
Проблема решается при удалении FormItAutoResponder, из хуков. Вопрос такой, как можно скормить этому автоответчику мыло введенное в форме, а не из профиля. Т.е. я так понимаю, что email он подгружает из профиля, и отправляет туда ответ, а если профиля нет, а в форме сделать email, то как его скормить туда?
Оно задается параметром (по умолчанию, используется поле с именем «email» формы):
&fiarToField=`fieldname`
Если я правильно понял, то мне нужно задать имя поля, потом его задать в &fiarToField=`fieldname' когда будет вводить еmail пользователем, то на него будет отправляться письмо, а если допустим оно не обязательно, я так понимаю, будет опять ошибка.
Как вариант, может в FormItAutoResponder использовать условие if, если задано email, то отправляем, если нет, то ничего не делаем идем дальше?
Как вариант, может в FormItAutoResponder использовать условие if, если задано email, то отправляем, если нет, то ничего не делаем идем дальше?
Начиная с какой то версии FormIt есть параметр, который делает это поле необязательным:
&fiarRequired=`false`
В снипете FormItAutoResponder нашел такую строку
$required = $modx->getOption('fiarRequired',$scriptProperties,true);
Может там поменять на false? Т.к. в параметрах такого пункта во второй версии не нашел.
Не надо, просто добавьте в вызов FormIt параметр, что я выше написал.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.