О web-разработке
и даже немного больше...

Как поменять статус заказа в OpenCart?

В базовом наборе в системе OpenCart есть некоторый набор статусов заказа. В зависимости от конкретного этапа выполнения заказа, он может принимать один из этих статусов. Просмотреть и настроить статусы заказов вы можете в администраторской части сайта.
Просмотреть статусы заказов можно по такому пути:
System > Localisation > Order Statuses
Система > Локализация > Статусы заказа

В моём примере используется OpenCart версии 2.3, в других версиях пути могут отличаться, поэтому это стоит так же учитывать. У самих товаров статусы так же выставляются в администраторской части сайта, при просмотре и редактировании полей заказа. Не всегда бывает удобно менять статусы заказов в ручном режиме. Часто бывает необходимость смены статуса заказа программно, по какому-либо событию.

В данной заметке мы рассмотрим простой пример смены статуса заказа из контроллера.

class ControllerCheckoutPayengine extends Controller {
	public function index() {
		
		// подключаем модель checkout/order
		$this->load->model('checkout/order');
		
		// меняем статус заказа на Processing (т.е. статус с ID == 2)
		$this->model_checkout_order->addOrderHistory($order_id, 2);
		
	}
}

Название метода, и самого класса контролера в вашем случае может отличаться, всё что нужно знать для смены статуса, это ID заказа, а также ID нужного статуса. Предварительно следует подключить класс модели checkout/order, после чего посредством метода класса addOrderHistory() задать новый статус заказа. Метод addOrderHistory() в нашем примере принимает два основных параметра $order_id – номер заказа и $order_status_id – ID статуса заказа.

Скрипт класса расположен по такому пути:
\catalog\model\checkout\order.php

Рассмотрев содержимое файла, можно заметить, что есть дополнительные параметры при обращении к методу addOrderHistory(). Полный список аргументов выглядит таким образом:

addOrderHistory($order_id, $order_status_id, $comment = '', $notify = false, $override = false)

Значение этих параметров:
$oder_id – ID заказа;
$order_status_id – ID статуса заказа;
$comment – текст почтового сообщения;
$notify – по умолчанию false, позволяет отправлять пользователю уведомления о смене статуса;
$override – по ум. false, флаг защиты от переопределения статуса (насколько я правильно понял).

Таким образом используя данный метод в контролерах и моделях можно задавать нужные статусы для заказов. Довольно часто это бывает необходимо при реализации интеграции с платёжными системами. В тот момент, когда клиент производит оплату заказа онлайн, и сервис возвращает данные об успешной транзакции.
Кстати в сети была найдена интересная особенность доработки параметра $comment метода addOrderHistory(). По умолчанию данные из этой переменной принимаются и отправляются в виде plain-text. Если мы захотим отправить письмо в виде HTML текст, то соответственно письмо уйдет как листинг HTML. Однако преобразовав спец символы в HTML-сущности, мы можем реализовать отправку письма в виде HTML. Для этого достаточно в самом начале метода добавить строку:

$comment = html_entity_decode($comment);

После этого в самом письме мы можем наблюдать отображение письма в HTML. Этот момент не совсем относится к теме данного поста, но всё же я решил его затронуть, т.к. речь идет об использовании параметров метода addOrderHistory().
На этом всё, всем всего доброго!

Опубликован: 25.10.2019 г.

См. также:

Обращение к модели в контроллере OpenCart
Платёжные системы в OpenCart
Переключение OpenCart с HTTP на HTTPS
Сброс пароля администратора в OpenCart
Как в OpenCart очистить кэш?
Как установить модуль в OpenCart 2.x?
Отправка писем в OpenCart
Сортировка товаров в OpenCart

Комментарии

  1. Александр пишет:

    "мы может реализовать отправку письма в виде HTML."

    Спасибо Вам и спасибо Гуглу!
    Именно то, что я искал!

  2. Александр пишет:

    Да это я что-то поторопился. У меня такая проблема, выставляю клиенту счёт на онлайн-оплату и отправляю ему ссылку через комментарий. В этой ссылке есть символ амперсанда и он приходит не корректно (вместо & получается &). Думал сделая так, что бы комментарий к заказу уходил как html решу это проблему. Сделал как у Вас написано (в самом начале метода добавить строку:
    $comment = html_entity_decode($comment);) , но чуда не произошло. У меня была строка public function addOrderHistory($order_id, $order_status_id, $comment = '', $notify = false, $override = false), переделал в public function addOrderHistory($order_id, $order_status_id, $comment = html_entity_decode($comment), $notify = false, $override = false) - комменты к заказу не уходили вообще (internal server error).
    Так же пробовал добавлять $comment = html_entity_decode($comment) как первый аргумент - internal server error.
    Или я что-то делаю не так, или хз...
    Может у Вас есть какой-то совет по поводу решения проблемы с амперсандом к комментариях к заказу? А именно, проблема того, что он в письме отображается не корректно.

    За статью спасибо!

  3. Александр пишет:

    (вместо & получается " & ").

  4. htmaker пишет:

    Попробуй так:
    ...
    $comment = html_entity_decode($comment);
    $this->model_checkout_order->addOrderHistory($order_id, 2, $comment, true);

  5. Александр пишет:

    Не совсем понял куда или вместо чего это надо вставить?
    Вместо public function addOrderHistory($order_id, $order_status_id, $comment = '', $notify = false, $override = false) в \catalog\model\checkout\order.php ?

  6. htmaker пишет:

    Перед тем как идёт обращение к addOrderHistory, ты передаёшь параметры этому методу.

  7. Александр пишет:

    нифига не понял. ну ладно.

Добавить комментарий для Александр Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарии
  • Загрузка...
Друзья сайта