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

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

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

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

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

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

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

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

 

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

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

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

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 )

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

 

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

Рейтинг
( 4 оценки, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Блог ITишника и просто человека
Комментариев: 13
  1. Валя

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

    1. nibbl (автор)

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

  2. Виктор

    Сообщение для администратора формируется для 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’));

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

  3. Bogdan

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

    1. nibbl (автор)

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

      1. Bogdan

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

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

        1. nibbl (автор)

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

  4. Mari

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

  5. Юлия

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

    1. nibbl (автор)

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

  6. Павел

    Странное решение, а самое главное что у меня не заработало.
    Зато заработало немного другое- в том месте 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(«\r\n», «\r», «\n»), », preg_replace(array(«/\s\s+/», «/\r\r+/», «/\n\n+/»), », 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(«\r\n», «\r», «\n»), », preg_replace(array(«/\s\s+/», «/\r\r+/», «/\n\n+/»), », 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

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

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: