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($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(‘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 )

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

 

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

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

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

  2. Юлия

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

    1. nibbl (автор)

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

  3. Павел

    Странное решение, а самое главное что у меня не заработало.
    Зато заработало немного другое- в том месте 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: :???: :?: :!: