Opencart 3 – письмо админу о заказе со всей информацией

Расширенное письмо о заказе админу

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

  • имя
  • фамилия
  • телефон
  • адрес
  • город
  • способ оплаты
  • способ доставки

Итого, нужно все поля которые заполняет покупатель на сайте.

В итоге вот к чему пришел.

Когда клиент оформляет заказ, то ему при ходит письмо со всей информацией:

opencart письмо администратору

тогда как администратору приходит вот такое вот грустное письмо(((

Opencart 3 - письмо админу о заказе со всей информацией

 

НУ как вы понимаете, а точнее кто хоть раз держал свои интернет магазины, сразу скажет, что это никуда не годится, не позвонить, ни узнать какую то информацию и что бы получить более подробную информацию надо заходить в админку,а если вы в пути и не можете зайти в админку?

НУ в итоге я пошел другим путем и сделал просто подмену писем, т.е. админу будет приходить такое же письмо как и клиенту)

а теперь немного магии и дело в шляпе)

Opencart 3 письмо админу о заказе

Для того что бы в opencart письмо админу о заказе вся информация приходила в письме, нужно править два файла:

  1. /catalog/controller/mail/order.php
  2. /catalog/view/theme/yourtheme/template/mail/order_alert.twig

 

order.php

Открываем файл order.php и ищем строку 270 где есть такой текст:

$mail->setTo($order_info[’email’]);
$mail->setFrom($from);
$mail->setSender(html_entity_decode($order_info[‘store_name’], ENT_QUOTES, ‘UTF-8’));
$mail->setSubject(html_entity_decode(sprintf($language->get(‘text_subject’), $order_info[‘store_name’], $order_info[‘order_id’]), ENT_QUOTES, ‘UTF-8’));
$mail->setHtml($this->load->view(‘mail/order_add’, $data));
$mail->send();

Под ним вставляем этот код:

$mail->setTo($this->config->get(‘config_email’));
$mail->setFrom($this->config->get(‘config_email’));
$mail->setSender(html_entity_decode($order_info[‘store_name’], ENT_QUOTES, ‘UTF-8’));
$mail->setSubject(html_entity_decode(sprintf($this->language->get(‘text_subject’), $this->config->get(‘config_name’), $order_info[‘order_id’]), ENT_QUOTES, ‘UTF-8’));
$mail->setHtml($this->load->view(‘mail1/order_alert’, $data));
$mail->send();

Данная вставка кода была вставлена в раздел где формируется и отправляется письмо покупателю, и мы такое же письмо отправляем еще и администратору как видите мы подставили шаблон письма order_alert )))

 

order_alert.twig

То что мы сделали выше по факту ничего не изменит, нам будет приходить все то же убогое письмо, а все потому что мы еще не изменили шаблон письма который должен приходить администратору!

Смотрите, я делал все на стандартном шаблоне Opencart с темой default и поэтому я создавал специально для этого папку mail1 и в ней создаем файл order_alert.twig , если же у вас своя тема, то просто создаете папку mail если ее там нет

Данные для файла order_alert.twig полностью копируем из файла order_add.twig (который лежит по адресу /catalog/view/theme/default/template/mail )

После этого нам на почту придет вот такое письмо)

Opencart 3 - письмо админу о заказе со всей информацией

 

Скачать готовый модификатор

Либо можете скачать модификатор для изменения внешнего вида письма о заказе для opencart 3

скачать модификатор письма админу

 

Ну и как обычно видео ))

Виталий nibbl

Привет 👋 Меня зовут Виталий, в сети я известен как Виталий Nibbl. С 2009 года я в IT и люблю задачки, от которых у других опускаются руки. Если вам сказали, что - "это невозможно" — значит, вы просто ещё не обратились ко мне 😎 В моих блогах на YouTube и Telegram вы найдёте пошаговые инструкции и решения любых сложностей. А ещё я профессионально скачиваю видео с любых платформ и всегда на связи по IT-вопросам.

Оцените автора
NIBBL
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.

  1. Радомир

    Благодарю, решение рабочее, правда с нуля не заработало, выдавало ошибку. Начал разбираться, благодаря комментариям понял, что нужно изменить mail/order_edit – убрав еденицу из пути до файла. Потом опять пошли ошибки. Оказалось, что тупо ковычки, которые обрамляют конструкции ‘mail/order_edit’ были не рабочие, вероятно результат копирования, поменял на рабочие. Ну и пришлось менять $mail->setHtml что бы письма приходили не в тексте. Кому надо, вот мой исправленный код:

    $mail->setTo($this->config->get(‘config_email’));
    $mail->setFrom($this->config->get(‘config_email’));
    $mail->setSender(html_entity_decode($order_info[‘store_name’], ENT_QUOTES, ‘UTF-8’));
    $mail->setSubject(html_entity_decode(sprintf($this->language->get(‘text_subject’), $this->config->get(‘config_name’), $order_info[‘order_id’]), ENT_QUOTES, ‘UTF-8’));
    $mail->setHtml($this->load->view(‘mail/order_alert’, $data));
    $mail->send();

    Ответить
  2. Эдуард

    Здравствуйте. Я тоже получаю по три письма после заказа с регистрацией и по два письма, когда просто регистрируюсь. Как я вас понял, вывод письма в файле: catalog/controller/mail/order.php. Как понять удалить весь код, начиная с 339 public function alert(&$route, &$args) {

    Ответить
    1. Виталий nibbl автор

      https://yadi.sk/i/n7rLsximDnD5ag уберите тут галочку и не будут приходить

      Ответить
  3. Lobo

    Попробую и я.

    Ответить
  4. Максим

    Это все хорошо вот только коменты не приходят)) как исправить?

    Ответить
    1. Виталий nibbl автор

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

      Ответить
  5. Олександр

    Решение нормальное , только есть замечания.
    1. Убрать из кода mail1 , прописать mail
    2. Чтобы не приходило по 3 письма , а только такое же как покупателю , после 338 строчки в order.php
    начиная с 339 public function alert(&$route, &$args) {
    и до конца , кроме самой последней дужки }
    удалить весь код

    Ответить
    1. Виталий nibbl автор

      возможно, но мне три письма не приходит

      Ответить
    2. Эдуард

      Здравствуйте. Я тоже получаю по три письма после заказа с регистрацией и по два письма, когда просто регистрируюсь. Как я вас понял, вывод письма в файле: catalog/controller/mail/order.php. Как понять удалить весь код, начиная с 339 public function alert(&$route, &$args) {

      Ответить
  6. Валя

    Добрый день!
    В теме письма администратору приходит текст “text_subject”, как его поменть? Заранее спасибо!

    Ответить
    1. Виталий nibbl автор

      смотрите языковой файл либо прямо в коде письмо можно заменить на свой текст

      Ответить
  7. Виктор

    Сообщение для администратора формируется для 2-х адресов. Основного и дополнительного, переделанный заказ приходит только на основной. У меня основной адрес не был настроен. И переделанное сообщение не приходило. Настроил основной и сообщения стали приходить 😉

    Делал по видео и вставка во 2-ой строке там отличается от той, что в статье.

    $mail->setTo($this->config->get(‘config_email’));
    $mail->setFrom($from);
    $mail->setSender(html_entity_decode($order_info[‘store_name’], ENT_QUOTES, ‘UTF-8’));

    Спасибо автору 😎 !

    Ответить
  8. Bogdan

    Приходит два письма, одно нормальное с html таблицой, а в другом просто код весь 🙁

    Ответить
    1. Виталий nibbl автор

      вы делали по инструкции?
      я уже третий сайт делаю и все норм

      Ответить
      1. Bogdan

        Да, все по инструкции

        И еще исправьте в инструкции mail1/order_alert‘, $data) , потому что не срабатывает, нужно менять название папки, как писали в комментарии ниже

        Ответить
        1. Виталий nibbl автор

          сейчас проверю. Спасибо!

          Ответить
  9. Mari

    Нормальное решение. Но работать не будет из-за одной ошибки
    $mail->setHtml($this->load->view(‘mail1/order_alert‘, $data));
    Убираем единицу в mail1 и все заработает

    Ответить
  10. Юлия

    Добрый день. а как быть, если человек при оформлении заказа выбирает пункт выдачи, но мне в письме оно не высвечивается? в итоге мне приходится звонить и переспрашивать((

    Ответить
    1. Виталий nibbl автор

      не очень понял вопроса, пишите на почту, разберемся

      Ответить
  11. Павел

    Странное решение, а самое главное что у меня не заработало.
    Зато заработало немного другое- в том месте order.php где речь идёт про алерт админу поменял тип письма с txt на html, далее вставил после:
    $data[‘order_id’] = $order_info[‘order_id’]; (365 строка у меня, у других может быть где-то рядом но не точно эта) инфу из верхней части, а именно:
    $data[‘date_added’] = date($this->language->get(‘date_format_short’), strtotime($order_info[‘date_added’]));
    $data[‘payment_method’] = $order_info[‘payment_method’];
    $data[‘shipping_method’] = $order_info[‘shipping_method’];
    $data[’email’] = $order_info[’email’];
    $data[‘telephone’] = $order_info[‘telephone’];
    $data[‘ip’] = $order_info[‘ip’];

    $order_status_query = $this->db->query(“SELECT * FROM ” . DB_PREFIX . “order_status WHERE order_status_id = ‘” . (int)$order_status_id . “‘ AND language_id = ‘” . (int)$order_info[‘language_id’] . “‘”);

    if ($order_status_query->num_rows) {
    $data[‘order_status’] = $order_status_query->row[‘name’];
    } else {
    $data[‘order_status’] = ”;
    }

    if ($comment && $notify) {
    $data[‘comment’] = nl2br($comment);
    } else {
    $data[‘comment’] = ”;
    }

    if ($order_info[‘payment_address_format’]) {
    $format = $order_info[‘payment_address_format’];
    } else {
    $format = ‘{firstname} {lastname}’ . “n” . ‘{company}’ . “n” . ‘{address_1}’ . “n” . ‘{address_2}’ . “n” . ‘{city} {postcode}’ . “n” . ‘{zone}’ . “n” . ‘{country}’;
    }

    $find = array(
    ‘{firstname}’,
    ‘{lastname}’,
    ‘{company}’,
    ‘{address_1}’,
    ‘{address_2}’,
    ‘{city}’,
    ‘{postcode}’,
    ‘{zone}’,
    ‘{zone_code}’,
    ‘{country}’
    );

    $replace = array(
    ‘firstname’ => $order_info[‘payment_firstname’],
    ‘address_1’ => $order_info[‘payment_address_1’],
    ‘city’ => $order_info[‘payment_city’],
    ‘zone’ => $order_info[‘payment_zone’],
    ‘zone_code’ => $order_info[‘payment_zone_code’],
    ‘country’ => $order_info[‘payment_country’]
    );

    $data[‘payment_address’] = str_replace(array(“rn”, “r”, “n”), ”, preg_replace(array(“/ss+/”, “/rr+/”, “/nn+/”), ”, trim(str_replace($find, $replace, $format))));

    if ($order_info[‘shipping_address_format’]) {
    $format = $order_info[‘shipping_address_format’];
    } else {
    $format = ‘{firstname} {lastname}’ . “n” . ‘{company}’ . “n” . ‘{address_1}’ . “n” . ‘{address_2}’ . “n” . ‘{city} {postcode}’ . “n” . ‘{zone}’ . “n” . ‘{country}’;
    }

    $find = array(
    ‘{firstname}’,
    ‘{lastname}’,
    ‘{company}’,
    ‘{address_1}’,
    ‘{address_2}’,
    ‘{city}’,
    ‘{postcode}’,
    ‘{zone}’,
    ‘{zone_code}’,
    ‘{country}’
    );

    $replace = array(
    ‘firstname’ => $order_info[‘shipping_firstname’],
    ‘address_1’ => $order_info[‘shipping_address_1’],
    ‘city’ => $order_info[‘shipping_city’],
    ‘zone’ => $order_info[‘shipping_zone’],
    ‘zone_code’ => $order_info[‘shipping_zone_code’],
    ‘country’ => $order_info[‘shipping_country’]
    );

    $data[‘shipping_address’] = str_replace(array(“rn”, “r”, “n”), ”, preg_replace(array(“/ss+/”, “/rr+/”, “/nn+/”), ”, trim(str_replace($find, $replace, $format))));

    $this->load->model(‘tool/upload’);
    Далее скопировал все из order_add.twig и заменил им действующий order_alert- впрочем как вы и рекомендовали. И всё заработало как надо. А вот при вашем решение при нажатии “оформить заказ” клиенту выпадала ошибка.

    Ответить
    1. Виталий nibbl автор

      вполне возможно, Ваш вариант тоже опробую через некоторое время. Кстати почему мой способ не сработал у Вас потому как у меня был opencart 3 а не ocstore может из за этого.

      Ответить
      1. Павел

        У меня Opencart 3.0.2.0

        Ответить
        1. Наталья

          Павел. Опишите, что вы сделали точнее, пожалуйста, у меня так же, при нажатии «оформить заказ» клиенту выпадает ошибка.

          Ответить