Автор Тема: Ошибка отправки contact-form  (Прочитано 4825 раз)

12 Март 2016, 08:36:31
  • Фрилансер
  • *
  • Сообщений: 160
  • Репутация: +5/-0
  • BSDA Certification
    • Просмотр профиля
Доброго времени.

Prestashop 1.6

Хочу спросить совета по настройке отправки текстового сообщения ч-з contact-form.

Отправка сообщений работает через раз. То есть после нажатия кнопки (кнопка единственная в форме) возвращается сообщение об ошибке, просто "Ошибка отправки сообщения".  После повторного нажатия сообщение отправляется успешно и приходит в клиентскую службу.
Логи чистые. Проверка условий заполнения формы выполняется.

Где искать проблему?
12 Март 2016, 11:31:25
Ответ #1
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Включите показ ошибок в prestashop.
Попробуйте протестировать отправку через удалённый SMTP.
13 Март 2016, 09:07:06
Ответ #2
  • Фрилансер
  • *
  • Сообщений: 160
  • Репутация: +5/-0
  • BSDA Certification
    • Просмотр профиля
Отображает ошибки, не имеющие отношения к отправке из формы

Цитировать
Warning: Function addCSS() is deprecated in modules/bakedcategories/bakedcategories.php on line 67
classes/Tools.php on line 2412

Больше ничего.

Выяснил, что для отправки достаточно обновить страницу после ошибки. Жму reload и всё ок...... странно.

Наверное, нужно заснифить процесс, HTTP заголовки посмотреть. Однако, лень этим заниматься, может у кого-то есть идеи получше?
13 Март 2016, 12:03:11
Ответ #3
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Возможно что страница не полностью загружается, ошибки в js, поля в форме не проходят проверку.
17 Март 2016, 19:05:01
Ответ #4
  • Фрилансер
  • *
  • Сообщений: 160
  • Репутация: +5/-0
  • BSDA Certification
    • Просмотр профиля
Изыскания результатов не дали.   
Повторная отправка формы обновлением страницы без ошибок, первая отправка - ошибка. По пути профиксил addCSS() is deprecated, других ошибок нет.
В консоли смотрелки тоже без ошибок...... Тупик.

Какие методы тестирования можно использовать для поиска причины?
17 Март 2016, 19:44:27
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
В контроллере ContactController.php определи показ сообщения "ок / ошибка" после каждого шага.
Возможно что у тебя до контроллера не доходит, тогда в firebug проверь событие клика на кнопку отправки.
18 Март 2016, 13:04:43
Ответ #6
  • Фрилансер
  • *
  • Сообщений: 160
  • Репутация: +5/-0
  • BSDA Certification
    • Просмотр профиля
Не проходит проверку условий  в этом операторе:

ContactController.php
.....................................
if (empty($contact->email))
                                                Mail::Send($this->context->language->id, 'contact_form', ((isset($ct) && Validate::isLoadedObject($ct)) ? sprintf(Mail::l('Your message has been correctly sent #ct%1$s #tc%2$s')
                                        else
                                        {
                                                if (!Mail::Send($this->context->language->id, 'contact', Mail::l('Message from contact form').' [no_sync]',
                                                        $var_list, $contact->email, $contact->name, $from, ($customer->id ? $customer->firstname.' '.$customer->lastname : ''),
                                                                        $file_attachment) ||
                                                                !Mail::Send($this->context->language->id, 'contact_form', ((isset($ct) && Validate::isLoadedObject($ct)) ? sprintf(Mail::l('Your message has been correctly sent
                                                                        $this->errors[] = Tools::displayError('An error occurred while sending the message3.');
                                                                                                                                   !!! Возвращает вот это !!!
                                        }

if (empty($contact->email)) Получается, ошибка в результате пустого поля контактного е-майл, но ведь отправка формы происходит после проверки условий, а они ошибок не возвратили. Почему здесь обрабатывается оператор if (empty($contact->email))? И почему всё ОК после повторной отправки?
 
18 Март 2016, 16:17:17
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Включи профилирование в престе. Можно будет увидеть значение $contact->email.
19 Март 2016, 11:59:33
Ответ #8
  • Фрилансер
  • *
  • Сообщений: 160
  • Репутация: +5/-0
  • BSDA Certification
    • Просмотр профиля
Миколас
Профилирование включил, но там только глобальные переменные отображаются.
19 Март 2016, 15:35:21
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 16667
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Поле для ввода email не меняли (класс, ид, название)?
Такой код?
<input type="text" value="pub@prestashop.com" data-validate="isEmail" name="from" id="email" class="form-control grey validate">
19 Март 2016, 16:25:59
Ответ #10
  • Фрилансер
  • *
  • Сообщений: 160
  • Репутация: +5/-0
  • BSDA Certification
    • Просмотр профиля
Ничего не менялось.
<input class="form-control grey validate" type="text" id="email" name="from" data-validate="isEmail" value="владимир_путин@mail.ru">
Релоуд отправляет успешно, это здесь не причём
25 Март 2016, 13:20:21
Ответ #11
  • Фрилансер
  • *
  • Сообщений: 160
  • Репутация: +5/-0
  • BSDA Certification
    • Просмотр профиля
До сих пор все темы удавалось решить совместно......
Не думаю, что проблема настолько ложная.
 Для начала, нужен метод тестирования отправки формы, вывести переменные в процессе обработки отправки скриптом.
Ну не PHP-шник я..... гуглил, пробовал реализовать, в итоге белый экран. 
Изучу PHP, будет ОК, но пока не получается самостоятельно.
25 Март 2016, 13:54:33
Ответ #12
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Для авторизированого клиента и для гостя одинаково работает?
25 Март 2016, 14:26:47
Ответ #13
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 105673
  • Репутация: +39553/-0
    • Просмотр профиля
    • Webstudio UwK
Не проходит проверку условий  в этом операторе:
ContactController.php
if (empty($contact->email))Получается, ошибка в результате пустого поля контактного е-майл, но ведь отправка формы происходит после проверки условий, а они ошибок не возвратили. Почему здесь обрабатывается оператор if (empty($contact->email))? И почему всё ОК после повторной отправки?

Сделайте проверку передаваемых данных.
$debug['contact->email'] = $contact->email;
$debug['contact->name'] = $contact->name;
// ... все переменные                   

echo '<xmp style="text-align: left;">';
print_r($debug);
echo '</xmp><br /><br /><br />';
return $debug;

if (empty($contact->email))
Cоздание интернет сайтов Webstudio UwK
25 Март 2016, 14:37:33
Ответ #14
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Отправка сообщений работает через раз. То есть после нажатия кнопки (кнопка единственная в форме) возвращается сообщение об ошибке, просто "Ошибка отправки сообщения".  После повторного нажатия сообщение отправляется успешно и приходит в клиентскую службу.
Это значит, что не работает отправка почты с сервера.

При первом обращении, prestashop пытается отправить письмо по адресу клиента/админа.
Отправка не работает.
Возвращается ошибка.

При повторном обращении, происходит сравнение сообщений, сбраывается contact->email
if ($old_message == $message) {
$this->context->smarty->assign('alreadySent', 1);
$contact->email = '';
$contact->customer_service = 0;
}
Сообщение регистрируется в админке в Клиенты / Клиентская служба.
Ошибки нет.
Но и письмо клиенту не отправлено.

100% проблема настройки почтового сервера.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!