Шаблон письма админу Opencart 3.0

Тема в разделе "Общие вопросы", создана пользователем vyalkonik, 30 янв 2018.

  1. vyalkonik

    vyalkonik Новичок

    Сообщения:
    7
    Симпатии:
    2
    Здравствуйте.

    В уведомлении о заказе админу приходит совсем мало информации :(
    Приходится постоянно заходить в админку, чтобы обработать заказ.

    По умолчанию приходит письмо:

    Вы получили заказ.

    № заказа: 14
    Дата заказа: 29.01.2018
    Состояние заказа: В обработке

    Товары

    1x "название товара" 100.00 грн.

    Итого

    Сумма: 100.00 грн.

    В редакторе шаблона mail/order_alert.twig пробовал добавить

    {{ text_payment_method }} {{ payment_method }}
    {% if shipping_method %} {{ text_shipping_method }} {{ shipping_method }}
    {% endif %}
    {{ text_email }} {{ email }}
    {{ text_telephone }} {{ telephone }}

    Но результата 0.

    Полистал форум - нашёл, что нужно менять/дополнять файл order.php

    Нашёл у себя такой в catalog/controller/mail/order.php

    Но что в нём делать не имею понятия.

    Задача - добавить в уведомление админу поля:
    Фамилия Имя, Телефон, Е-маил, Способ доставки, Способ оплаты

    Помогите пожалуйста.
     
  2. Ravilr

    Ravilr Специалист

    Сообщения:
    3.877
    Симпатии:
    1.064
    Вам нужен \catalog\model\checkout\order.php

    И прочитайте документацию тут на форуме. Наверняка вы не знаете про кеш, кеширование, ошибки и модификаторы. Без этих знаний ни как м ы не сможем продолжить.
     
  3. vyalkonik

    vyalkonik Новичок

    Сообщения:
    7
    Симпатии:
    2
    Файл нашёл, а вот что в нем изменить?

    Кеш знаю где чистить :)
    Где обновить кеш модификаторов тоже знаю.
    Где лог ошибок посмотреть знаю, но в PHP практически не разбираюсь, поэтому спрашиваю у знающих людей. Чтобы этих ошибок не сделать :)
     
  4. karpov

    karpov Продвинутый пользователь

    Сообщения:
    1.519
    Симпатии:
    241
    А посмотреть то что 3х :p Сам же мне показывал :D

    Все правильно, нужен вам \catalog\controller\mail\order.php
    Код:
    // Admin Alert Mail
    вот тут все начинается.

    Вам нужно формировать переменные по отдельности, как это сделано в том же файле но выше.
    Пример берем строку
    PHP:
    $data['payment_method'] = $order_info['payment_method'];
    Ее же и вставим например после или до
    PHP:
    $data['order_id'] = $order_info['order_id'];
    в общем 374 строка. И вот только после этого будет в шаблоне вывод этого
    Код:
    {{ payment_method }}
    Дальше сами.
     
    Ravilr и vyalkonik нравится это.
  5. vyalkonik

    vyalkonik Новичок

    Сообщения:
    7
    Симпатии:
    2
    Спасибо!!!
    Всё получилось так как мне нужно!

    Вы получили заказ.

    № заказа: 55
    Дата заказа: 30.01.2018


    Отправка службой "Новая почта"
    Киев Киевская область Отделение №1: ул. Пироговский путь, 135 Пупкин Вася 011-111-11-11 Наложенный платёж (в отделении Новой Почты) 100.00 грн.
    vasya@gmail.com

    Грелка для пальцев ног - полустелька (10 пар) 100.00 грн. x 1

    Сумма: 100.00 грн.


    Правда программировать в PHP методом тыка сложно :)
    Возможно добавил в код немного лишних данных, но всё работает без ошибок.

    Может кому понадобится, распишу по шагам.

    1.В файле \catalog\controller\mail\order.php

    После строчки
    Код:
    $data['order_id'] = $order_info['order_id'];
    374я строка

    Вставил:

    Код:
            $data['date_added'] = date($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'],
                'lastname'  => $order_info['payment_lastname'],
                'company'   => $order_info['payment_company'],
                'address_1' => $order_info['payment_address_1'],
                'address_2' => $order_info['payment_address_2'],
                'city'      => $order_info['payment_city'],
                'postcode'  => $order_info['payment_postcode'],
                '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"), '<br />', preg_replace(array("/\s\s+/", "/\r\r+/", "/\n\n+/"), '<br />', 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'],
                'lastname'  => $order_info['shipping_lastname'],
                'company'   => $order_info['shipping_company'],
                'address_1' => $order_info['shipping_address_1'],
                'address_2' => $order_info['shipping_address_2'],
                'city'      => $order_info['shipping_city'],
                'postcode'  => $order_info['shipping_postcode'],
                '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"), '<br />', preg_replace(array("/\s\s+/", "/\r\r+/", "/\n\n+/"), '<br />', trim(str_replace($find, $replace, $format))));
    
            $this->load->model('tool/upload');
    2. Потом в админке:
    Дизайн - Редактор шаблона - mail - order_alert.twig

    Настроил те данные, которые мне нужны. Получилось так:

    Код:
    {{ text_received }}
    
    {{ text_order_id }} {{ order_id }}
    {{ text_date_added }} {{ date_added }}
    
    
    {% if shipping_method %}{{ shipping_method }} {% endif %}
    
    {{ payment_address }} {{ telephone }}{% for total in totals %} {{ payment_method }} {{ total.value }}{% endfor %}
    
    {{ text_email }} {{ email }}
    
    {% for product in products %}
    {{ product.name }} {{ product.total }} x {{ product.quantity }}
    {% if option %}
    {% for option in product.option %}
        - {{ option.name }} {{ option.value }}
    {% endfor %}
    {% endif %}
    {% endfor %}
    {% if vouchers %}
    
    {% for voucher in vouchers %}
    1x {{ voucher.description }} {{ voucher.amount }}
    {% endfor %}
    {% endif %}
    
    {% for total in totals %}
    {{ total.title }}: {{ total.value }}
    {% endfor %}
     
    {% if comment %}
    {{ text_comment }}
    
    {{ comment }}
    {% endif %}

    Кто разбирается в PHP подскажите что лишнее мне убрать из того куска кода, который я вставил в файл \catalog\controller\mail\order.php

    Потому что мне кажется, что впихнул я туда много не нужного...
     
    Ravilr нравится это.
  6. Ravilr

    Ravilr Специалист

    Сообщения:
    3.877
    Симпатии:
    1.064
    Лучше файл физически редактировать. Редактирование из админки конфликтное. Потом может вылезти боком, а ошибку будем искать неделю.

    Ничего лишнего, то что прямо мешает ))
     
  7. vyalkonik

    vyalkonik Новичок

    Сообщения:
    7
    Симпатии:
    2
    Спасибо за помощь!
     
  8. Kest

    Kest Пользователь

    Сообщения:
    13
    Симпатии:
    0
    Понадобилось.

    Сделал: Тоталом скачал на комп эти два файла, отредактировал в notepad++, закинул назад. Не заработало. Приходит лишь письмо клиенту. А мне - вообще перестало приходить. И в базе новый заказ не появляется.

    Пришлось бакапы залить назад - всё восстановилось.

    Жаль, вопрос остался открытым, т.к. вправду неудобно, что в письме мне - ничего толком не написано.
     
  9. Kest

    Kest Пользователь

    Сообщения:
    13
    Симпатии:
    0
    Можно ли пойти слегка другим путём?
    В какой файл в какой строке что именно надо добавить, чтобы письмо, сформированное для клиента, высылалось и на него email, и на Kest@mail.ru? Куда это вписать? Пусть летит родное уведомление, скудное, ладно. Но чтобы дубль письма клиента летел мне тоже. Может, добавочный email - это проще, чем неск. строк вписывать, расширяя то, что летит в родном уведомлении магазину?
     
  10. Ravilr

    Ravilr Специалист

    Сообщения:
    3.877
    Симпатии:
    1.064
    \catalog\controller\mail\order.php
    находим
    PHP:
           $mail->setHtml($this->load->view('mail/order_add'$data));
           
    $mail->send();
    и ниже добавим
    PHP:
    $mail->setTo('kest@mail.ru');
    $mail->send();
    Это как вариант.
     
    Andrey_msk и Kest нравится это.
  11. Kest

    Kest Пользователь

    Сообщения:
    13
    Симпатии:
    0
    Отлично, спасибо!
     
  12. Kest

    Kest Пользователь

    Сообщения:
    13
    Симпатии:
    0
    Для полного счастья - какую строчку или фрагмент на что поменять, чтобы второе уведомление, родное, скудное, не летело вообще?
     
  13. Ravilr

    Ravilr Специалист

    Сообщения:
    3.877
    Симпатии:
    1.064
    Для полного счастья необходимо еще быть и самостоятельным ;) Ниже по коду написано
    PHP:
        // Admin Alert Mail
    Как думаете как переводится? А что является последней точкой-строчкой отправки уже знаете.
     
  14. Luxors

    Luxors Новичок

    Сообщения:
    14
    Симпатии:
    2
    Здравствуйте!
    Подскажите, пожалуйста, как получить ссылку на товар для вывода в письме?
     
  15. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    пишите

    HTTP_CATALOG . 'index.php?route=product/product&product_id=
     
  16. dima81

    dima81 Пользователь

    Сообщения:
    32
    Симпатии:
    1
    Есть достаточно простой способ изменить стандартное письмо админу на то которое приходит пользователю
    (https://www.nibbl.ru/opencart/opencart-3-pismo-adminu-o-zakaze-so-vsej-informaciej.html)

    Но почему то работает только заказов от неавторизованных пользователей, если пользователь авторизовался, то пиьсмо не приходит. Может кто подсказать в чём причина?
     
  17. Ravilr

    Ravilr Специалист

    Сообщения:
    3.877
    Симпатии:
    1.064
    Угадывать сложно.Проверяйте, а отправляется оно или нет. В теории проблем быть не должно.
     
  18. dima81

    dima81 Пользователь

    Сообщения:
    32
    Симпатии:
    1
    Если не сложно подскажите пожалуйста что и где проверить?
     
  19. dima81

    dima81 Пользователь

    Сообщения:
    32
    Симпатии:
    1
    Добавлю: пользователю письмо приходит, а вот админу нет.
     
  20. karpov

    karpov Продвинутый пользователь

    Сообщения:
    1.519
    Симпатии:
    241
    Странная причина. Как связана авторизация и письмо админу, непонятно. Я думаю у вас какой то модификатор просто ломает отправку админну так как по умолчанию неважно авторизирован пользователь или нет, отправка админу будет.

    До внесенных изменений, админу письмо приходило?