Проблема со статусом заказа в письме клиенту

Тема в разделе "Ошибки и их решения", создана пользователем Marcello, 13 фев 2020.

  1. Marcello

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

    Сообщения:
    72
    Симпатии:
    1
    Здравствуйте. Подскажите пожалуйста, кто сталкивался...
    OcStore 2.3.0.2.3
    После заказа и при изменении статуса клиенту приходит письмо, в котором в названии (теме письма), вместо названия статуса - цифра. Пример на скрине...
    Это в Опенкарт так задумано? Можно ли это как то исправить и если да, то буду признателен за подсказки! Заранее спасибо за помощь!
     

    Вложения:

    • status.png
      status.png
      Размер файла:
      37,2 КБ
      Просмотров:
      10
  2. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    Я думаю, что у вас что-то изменено и подставляется order_status_id а не order_status
     
  3. Marcello

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

    Сообщения:
    72
    Симпатии:
    1
    а не подскажете, в какой файле это можно посмотреть?
     
  4. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    catalog/model/checkout/order.php
    PHP:
    $text .= $language->get('text_new_order_status') . ' ' $order_status "\n\n";
     
  5. Marcello

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

    Сообщения:
    72
    Симпатии:
    1
    Эта строка дважды встречается в файле order.php и выглядит так:
    Код:
                        $text .= $language->get('text_new_order_status') . ' ' . $order_status . "\n\n";
     
  6. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    смотрите выше, что помещается в $order_status
     
  7. Marcello

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

    Сообщения:
    72
    Симпатии:
    1
    там получается, в одном месте вот такие строки:

    Код:
    // Text Mail
    $text  = sprintf($language->get('text_new_greeting'), html_entity_decode($order_info['store_name'], ENT_QUOTES, 'UTF-8')) . "\n\n";
    $text .= $language->get('text_new_order_id') . ' ' . $order_id . "\n";
    $text .= $language->get('text_new_date_added') . ' ' . date($language->get('date_format_short'), strtotime($order_info['date_added'])) . "\n";
    $text .= $language->get('text_new_order_status') . ' ' . $order_status . "\n\n";
    а ниже вот такие:

    Код:
    // Text
    $text  = $language->get('text_new_received') . "\n\n";
    $text .= $language->get('text_new_order_id') . ' ' . $order_id . "\n";
    $text .= $language->get('text_new_date_added') . ' ' . date($language->get('date_format_short'), strtotime($order_info['date_added'])) . "\n";
    $text .= $language->get('text_new_order_status') . ' ' . $order_status . "\n\n";
    $text .= $language->get('text_new_products') . "\n";
     
  8. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    выше, есть такое
    PHP:
                    $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) {
                        
    $order_status $order_status_query->row['name'];
                    } else {
                        
    $order_status '';
                    }
    у вас так?
     
  9. Marcello

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

    Сообщения:
    72
    Симпатии:
    1
    Тоже в двух местах:

    Код:
    $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) {
                        $order_status = $order_status_query->row['name'];
                    } else {
                        $order_status = '';
                    }
    
                    $subject = sprintf($language->get('text_new_subject'), html_entity_decode($order_info['store_name'], ENT_QUOTES, 'UTF-8'), $order_id);
    
    и в самом низу:

    Код:
    $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) {
                        $message .= $language->get('text_update_order_status') . "\n\n";
                        $message .= $order_status_query->row['name'] . "\n\n";
                    }
    
                    if ($order_info['customer_id']) {
                        $message .= $language->get('text_update_link') . "\n";
                        $message .= $order_info['store_url'] . 'index.php?route=account/order/info&order_id=' . $order_id . "\n\n";
                    }
    
                    if ($comment) {
                        $message .= $language->get('text_update_comment') . "\n\n";
                        $message .= strip_tags($comment) . "\n\n";
                    }
     
  10. fanatic

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

    Сообщения:
    1.415
    Симпатии:
    239
    все правлильно, должно выводить текст. если только имена статусов не заданы числом.
    а есть файл system/storage/modification/catalog/model/checkout/order.php?
    если есть, посмотрите данные строки в нем такие же.
     
  11. Marcello

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

    Сообщения:
    72
    Симпатии:
    1
    Статусы все заданы текстами (в обработке, оплачен и т.д.)
    Да, тоже самое всё...
    Код:
    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) {
                        $order_status = $order_status_query->row['name'];
                    } else {
                        $order_status = '';
    }
    Код:
    $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) {
                        $message .= $language->get('text_update_order_status') . "\n\n";
                        $message .= $order_status_query->row['name'] . "\n\n";
                    }