Ошибка отправки contact-form

Автор BSD-shnik, 12 марта 2016, 08:36:31

« назад - далее »

BSD-shnik

Доброго времени.

Prestashop 1.6

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

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

Где искать проблему?

DarinSr

Включите показ ошибок в prestashop.
Попробуйте протестировать отправку через удалённый SMTP.

BSD-shnik

#2
Отображает ошибки, не имеющие отношения к отправке из формы

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

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

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

Наверное, нужно заснифить процесс, HTTP заголовки посмотреть. Однако, лень этим заниматься, может у кого-то есть идеи получше?

DarinSr

Возможно что страница не полностью загружается, ошибки в js, поля в форме не проходят проверку.

BSD-shnik

Изыскания результатов не дали.   
Повторная отправка формы обновлением страницы без ошибок, первая отправка - ошибка. По пути профиксил addCSS() is deprecated, других ошибок нет.
В консоли смотрелки тоже без ошибок...... Тупик.

Какие методы тестирования можно использовать для поиска причины?

tigran

В контроллере ContactController.php определи показ сообщения "ок / ошибка" после каждого шага.
Возможно что у тебя до контроллера не доходит, тогда в firebug проверь событие клика на кнопку отправки.

BSD-shnik

#6
Не проходит проверку условий  в этом операторе:

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))? И почему всё ОК после повторной отправки?

Миколас

Включи профилирование в престе. Можно будет увидеть значение $contact->email.

BSD-shnik

Миколас
Профилирование включил, но там только глобальные переменные отображаются.

Adik

Поле для ввода email не меняли (класс, ид, название)?
Такой код?
<input type="text" value="pub@prestashop.com" data-validate="isEmail" name="from" id="email" class="form-control grey validate">

BSD-shnik

#10
Ничего не менялось.
<input class="form-control grey validate" type="text" id="email" name="from" data-validate="isEmail" value="владимир_путин@mail.ru">

Релоуд отправляет успешно, это здесь не причём

BSD-shnik

До сих пор все темы удавалось решить совместно......
Не думаю, что проблема настолько ложная.
Для начала, нужен метод тестирования отправки формы, вывести переменные в процессе обработки отправки скриптом.
Ну не PHP-шник я..... гуглил, пробовал реализовать, в итоге белый экран. 
Изучу PHP, будет ОК, но пока не получается самостоятельно.

coder

Для авторизированого клиента и для гостя одинаково работает?

Виталий

Цитата: BSD-shnik от 18 марта 2016, 13:04:43
Не проходит проверку условий  в этом операторе:
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

PrestaMan

Цитата: BSD-shnik от 12 марта 2016, 08:36:31
Отправка сообщений работает через раз. То есть после нажатия кнопки (кнопка единственная в форме) возвращается сообщение об ошибке, просто "Ошибка отправки сообщения".  После повторного нажатия сообщение отправляется успешно и приходит в клиентскую службу.
Это значит, что не работает отправка почты с сервера.

При первом обращении, 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.
Лучшие цены!!!