Оформление заказа без авторизации 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>
Кост
23 ноября 2016, 11:46
modx.pro
2 455
0

Комментарии: 9

Кирилл
23 ноября 2016, 20:40
+1
Для начала, посмотрите лог ошибок MODX.
Потом уберите валидацию и проверьте (я делаю вот так):
&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, и на них проверить.
    Кост
    24 ноября 2016, 10:18
    0
    Спасибо, Кирилл! Я уже второй день думаю, что проблема в электронной почте, по логам, так и выходит, но я не смог найти, где ее убрать, чтобы 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.
      Кирилл
      24 ноября 2016, 10:37
      +1
      Да, теперь тоже вижу проблему, уберите из 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`
      ]]
      Кост
      24 ноября 2016, 10:36
      0
      Проблема решается при удалении FormItAutoResponder, из хуков. Вопрос такой, как можно скормить этому автоответчику мыло введенное в форме, а не из профиля. Т.е. я так понимаю, что email он подгружает из профиля, и отправляет туда ответ, а если профиля нет, а в форме сделать email, то как его скормить туда?
        Кирилл
        24 ноября 2016, 10:38
        +1
        Оно задается параметром (по умолчанию, используется поле с именем «email» формы):

        &fiarToField=`fieldname`
          Кост
          24 ноября 2016, 10:52
          0
          Если я правильно понял, то мне нужно задать имя поля, потом его задать в &fiarToField=`fieldname' когда будет вводить еmail пользователем, то на него будет отправляться письмо, а если допустим оно не обязательно, я так понимаю, будет опять ошибка.
          Как вариант, может в FormItAutoResponder использовать условие if, если задано email, то отправляем, если нет, то ничего не делаем идем дальше?
            Кирилл
            24 ноября 2016, 11:07
            +1
            Начиная с какой то версии FormIt есть параметр, который делает это поле необязательным:

            &fiarRequired=`false`
              Кост
              24 ноября 2016, 11:21
              0
              В снипете FormItAutoResponder нашел такую строку
              $required = $modx->getOption('fiarRequired',$scriptProperties,true);
              Может там поменять на false? Т.к. в параметрах такого пункта во второй версии не нашел.
                Кирилл
                24 ноября 2016, 11:24
                0
                Не надо, просто добавьте в вызов FormIt параметр, что я выше написал.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      9