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

oc2101

Отправка копий вопроса с сайта всем админам магазина

18 января 2016 г. Ruslan Brest E-commerce » Howto » OpenCartОбсудить

Оказалось, в Opencart 2 на странице обратной связи (information/contact) письмо отсылается только на главный email (владельцу магазина). Если какие-то адреса для дополнительных оповещений в админке заполнены - здесь они всё равно игнорируются.

Это неудивительно, поскольку в опенкарт функционал дублируется. Тупо забыли.

Чтобы исправить, надо открыть файл catalog/controller/information/contact.php. В самой первой функции этого файла (public function index()) будет виден кусок кода отправки почты:

$mail = new Mail($this->config->get('config_mail'));
                        $mail->setTo($this->config->get('config_email'));
                        $mail->setFrom($this->request->post['email']);
                        $mail->setSender($this->request->post['name']);
                        $mail->setSubject(sprintf($this->language->get('email_subject'), $this->request->post['name']));
                        $mail->setText(strip_tags($this->request->post['enquiry']));
                        $mail->send();

Сразу после него надо добавить несколько строк:

// Send additional alert emails
                        $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();
                                }
                        }

Теперь копии письма будут получать все администраторы магазина, перечисленные в поле дополнительных email-адресов (см. настройки магазина).

Совместимость

Приведённый код - из oc2011.

В oc2101/oc2102 кода чуть больше, но суть остаётся та же: добавлять после $mail->send(); и перед $this->response->....

Соответственно все версии, что между ними (oc2020, oc2031), лечатся аналогично. ocStore тоже.

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