Ruslan Brest, rb.labtodo.com
Backend web-developer: CodeIgniter, PHP, MySQL, OpenCart, PrestaShop, MaxSite CMS

Opencart 2.0.1.1 bugfix: отправление отзывов к товару

Просмотров: 4716 RSS 9
Howto » Web development » E-commerce » OpenCart
,

Починил ошибку при отправлении email-уведомлений админу, когда покупатель оставляет отзыв к товару. Из-за неё скорей всего форма отзыва вела себя невнятно, не показывая покупателю, что всё уже случилось и жизнь прекрасна.

В результате было непонятно, что вообще произошло, пользователи отправляли по несколько отзывов (самые прилежные), а лог ошибок опенкарта заполнялся строчками, причину и место возникновения которых хрен угадаешь:

2014-12-30 18:44:07 - PHP Warning:  html_entity_decode() expects parameter 1 to be
string, array given in /..../system/library/mail.php on line 30
2014-12-30 18:44:07 - PHP Notice:  Error: E-Mail to required!
in /..../system/library/mail.php on line 63

Админ также не получал уведомлений о непроверенных отзывах, что тоже печально и грустно и не способствует повышению доверия между покупателем и магазином.

Лечится так

Простыми словами:

  • открываем catalog/model/catalog/review.php,
  • ищем строку $mail->setTo(array($this->config->get('config_email')));
  • и убираем `array(` с одной стороны и лишний `)` с другой.

Вторая добавка там же рядом, чуть ниже (см. diff) - чтобы избежать ошибок при отправке уведомлений по списку email-ов другим админам магазина. Уведомления отправляются на email владельца магазна (указывается в настройках магазина) и по списку дополнительных адресов в настройках, разделённому запятыми. Если у вас вокруг запятых затешутся пробелы - будут ошибки.

Цветными словами:

commit 870bb1469173e9ec28346408bc19838838c6fd17
Author: Ruslan Brest <rb@labtodo.com>
Date:   Sat Jan 10 20:47:00 2015 -0500
    [!] fix admin email notification sending when customer posts product review
diff --git a/catalog/model/catalog/review.php b/catalog/model/catalog/review.php
index 2eeab26..ae23828 100644
--- a/catalog/model/catalog/review.php
+++ b/catalog/model/catalog/review.php
@@ -22,7 +22,7 @@ class ModelCatalogReview extends Model {
                        $message .= $this->db->escape(strip_tags($data['text'])) . "\n\n";
 
                        $mail = new Mail($this->config->get('config_mail'));
-                       $mail->setTo(array($this->config->get('config_email')));
+                       $mail->setTo($this->config->get('config_email'));
                        $mail->setFrom($this->config->get('config_email'));
                        $mail->setSender($this->config->get('config_name'));
                        $mail->setSubject($subject);
@@ -33,6 +33,7 @@ class ModelCatalogReview extends Model {
                        $emails = explode(',', $this->config->get('config_mail_alert'));
 
                        foreach ($emails as $email) {
+                               $email = trim($email);
                                if ($email && preg_match('/^[^\@]+@.*.[a-z]{2,15}$/i', $email)) {
                                        $mail->setTo($email);
                                        $mail->send();
twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru digg.com friendfeed.com liveinternet.ru livejournal.ru yandex.ru del.icio.us
Комментариев: 9
  1. человек умный.сразу видно, тогда подскажите пошагово как в подвале разместить форму обратеой связи вместо ссылки.хочу минимизировать переходы по сайту.буду рад помощи,так как готового решения не нашел а в программировании нуль,версия опена 2.0.1.1. заранее спасибо ))))

  2. 2015-02-20 в 22:22:05 | Ruslan Brest

    Спасибо. Вы просите отложить все мои задачи и заняться переносом формы в футер, проверить, а потом описать всё это и ответить на вопросы?

    Это же не 5-минутное дело. И даже не 20-минутное. У меня несколько другие приоритеты и большой список задач.

    24-го у меня день ещё не полностью занят. Если хотите сделать это сравнительно быстро - можете нанять меня, я сделаю и выложу описание. Примерная стоимость 20-30 WMZ.

  3. 2015-04-06 в 18:05:34 | Евгений

    Ruslan Brest, Спасибо за пост! и сэкономленное время))

  4. 2015-07-24 в 19:45:58 | Алексей

    Помогло, спасибо!

  5. 2015-10-18 в 04:22:08 | Андрей

    Спасибо большое, ваш блог настоящий кладезь знаний для начинающего разоаботчика!

  6. 2016-03-26 в 11:38:27 | Сергей

    Редко пишу отзывы, но здесь просто "От души!".

    Потратил на решение проблемы два часа, и еще неизвестно бы сколько потратил, если бы не полез в поиск!

  7. Здравствуйте. Подскажите пожалуйста. Делаю всё согласно вашей инструкции, но вылазит ошибка: Parse error: syntax error, unexpected 'config_email' (T_STRING) in /home//www/catalog/model/catalog/review.php on line 25

    Подскажите пожалуйста, что не так(

    У меня не приходят уведомления о новом отзыве, а так же когда клиент заполняет форму, то ничего не показывает о завершении отзыва, остается просто заполненная форма.

    Заранее спасибо!

  8. 2016-04-17 в 20:38:34 | Ruslan Brest

    Ну если написано, что синтаксическая ошибка - значит в вашем коде синтаксическая ошибка. Какие ещё могут быть варианты?

    Проверьте правильность написания кода. Скобочки например лишние или недостающие. Или код покажите, чтобы телепатией не гадать.

  9. 2017-05-23 в 23:19:32 | Сергей

    Руслан, Супер-пост!

    Мне не понятно только почему у меня на одном сайте Opencart 2.0.1.1 отзывы к товару отправлялись без проблем, а на другом - вот такая катавасия началась. Я был рядом с решением, не понравилась строка new Mail($this->config->get('config_mail')), но на следующую не обратил внимание.

    РЕСПЕКТ, коллега!

    Дальнейших успехов тебе!

Оставьте комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

Авторизация  Facebook. MaxSiteAuth. Loginza

(обязательно)