В базовом наборе в системе 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().
На этом всё, всем всего доброго!
"мы может реализовать отправку письма в виде HTML."
Спасибо Вам и спасибо Гуглу!
Именно то, что я искал!
Да это я что-то поторопился. У меня такая проблема, выставляю клиенту счёт на онлайн-оплату и отправляю ему ссылку через комментарий. В этой ссылке есть символ амперсанда и он приходит не корректно (вместо & получается &). Думал сделая так, что бы комментарий к заказу уходил как 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.
Или я что-то делаю не так, или хз...
Может у Вас есть какой-то совет по поводу решения проблемы с амперсандом к комментариях к заказу? А именно, проблема того, что он в письме отображается не корректно.
За статью спасибо!
(вместо & получается " & ").
Попробуй так:
...
$comment = html_entity_decode($comment);
$this->model_checkout_order->addOrderHistory($order_id, 2, $comment, true);
Не совсем понял куда или вместо чего это надо вставить?
Вместо public function addOrderHistory($order_id, $order_status_id, $comment = '', $notify = false, $override = false) в \catalog\model\checkout\order.php ?
Перед тем как идёт обращение к addOrderHistory, ты передаёшь параметры этому методу.
нифига не понял. ну ладно.