В базовом наборе в системе 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 статуса заказа.
Скрипт класса расположен по такому пути:
catalogmodelcheckoutorder.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().
На этом всё, всем всего доброго!
-
tank
Пользователь- Сообщения:
- 36
- Симпатии:
- 0
Добрый день.
Установил в товары-даные-
Отсутствие на складе-нет на складе
Только при изменении этой опици меняется в карточке сообщение(как будто фиксированное сообщение выбираешь какое показать) но оно ни как не меняется при нехватке товара.
Как сделать так чтобы при наличии был статус в наличии а после 0 чтобы показывал нет в наличии?
opencart 2/0/1/1 -
Romans
Administrator
Команда форума- Сообщения:
- 1.396
- Симпатии:
- 743
По умолчанию так и работает. Т.е если в наличии то и показывает.
А если товара 0, то показывает статус который указан в Товары — Данные -> Отсутствие на складе
Может у вас какая то другая логика. У вас же не сборка?? Т.е Оригинал измененный + перевод.. -
tank
Пользователь- Сообщения:
- 36
- Симпатии:
- 0
Вы говорите если А если товара 0, то показывает статус который указан в Товары — Данные -> Отсутствие на складе
только оно не меняется. Когда выбираеш этот пункт он ставится в карточке даже если товар в наличии или закончился. ПРоверял сделал 1 шт, сделал вычитание ,оформил заказ. А в карточке так и стоит есть в наличии.Единственное просто нельзя в корзине оформить говорит нет в наличии. Но как сделать чтобы и в самой карточке статус менялся а не только в самой корзине? -
tank
Пользователь- Сообщения:
- 36
- Симпатии:
- 0
Товары — Данные -> Отсутствие на складе это ведь выбираеш какой статус показывать если нет в наличии?
Только почему тогда если его выбираешь, то оно ставится по умолчанию смысле если товар есть в наличии,хотя этот статус должен появляться когда товар закончился? -
Romans
Administrator
Команда форума- Сообщения:
- 1.396
- Симпатии:
- 743
Напомните, это у вас карточку товара исправлял кто то?? В этом и причина. Может вам просто вывели статус напрямую?
Вы можете установить на локалку сборку и проверить как должно работать. -
tank
Пользователь- Сообщения:
- 36
- Симпатии:
- 0
походу это настряпал он мне не так. Как это можно изменить? Какой файл просмотреть,сравнить?
Последнее редактирование: 20 янв 2015
-
Romans
Administrator
Команда форума- Сообщения:
- 1.396
- Симпатии:
- 743
как минимум посмотреть catalog/conroller/product/product.php и в шаблоне catalog/product.tpl
-
tank
Пользователь- Сообщения:
- 36
- Симпатии:
- 0
темный лес
. Вы можете сказать точно что исправить?
-
Romans
Administrator
Команда форума- Сообщения:
- 1.396
- Симпатии:
- 743
Как я могу сказать если я не знаю что у вас изменили?
-
supo
Пользователь- Сообщения:
- 48
- Симпатии:
- 1
Здравствуйте. Подскажите. Товар идет только под заказ, но статус поменяется только если в админке поставить количество товара 0, но в этом случае у меня стоит модуль и кнопка добавления товара в корзину не активная. Как можно вывести любой статус товара при наличии его на складе? Спасибо.
-
если только использовать свободное поле в админке типа SKU и там указывать статус текстом.
В базовом наборе в системе 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 статуса заказа.
Скрипт класса расположен по такому пути:
catalogmodelcheckoutorder.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().
Модуль для смены статуса товара прямо со списка товаров в Opencart 2.x с помощью AJAX, то есть без перезагрузки страницы.
OCMOD-модификация, простая установка через админку Opencart 2
Оцените этот модуль
Рейтинг:
2.8 из
5 —
4 голосов
1. Скачайте и установите фикс Localcopy
2. Обновите модификации в админке
3. Загрузите модуль наново
Ошибка 500 после установки модуля означает, что случилась какая-то критическая ошибка в php.
Для определение проблемы можно:
1. Открыть файл logs/error.log на вашем сервере. В конце этого файла будут все последние критические ошибки.
2. Открыть в админке Инструменты > Логи ошибок — в этом месте отображаются ошибки, но не всегда.
3. Включить вывод ошибок php на экран — добавить следующий код в конец файла .htaccess:
php_value display_errors 1
php_value display_startup_errors 1
php_value error_reporting E_ALL
Возможные причины:
1. Если вы раньше не загружали модули в архиве через админку — вам нужно установить бесплатную модификацию localcopy.ocmod.xml согласно инструкции и после этого переустановить модуль
2. Возможно в устанавливаемого модуля нет собственной страницы настроек и соответственно его не будет в списке Модулей
Два варианта решения:
1. Если при установке модуля из админки вылетает эта ошибка — вам нужно установить бесплатную FTP QuickFix модификацию localcopy.ocmod.xml. Она установиться без проблем через тот же установщик дополнений, только после установки не забудьте обновить модификации и затем можете приступать к установке любых модулей на Opencart 2.
2. Также решить эту ошибку можно по другому: прописать доступы к FTP в админке Система > Настройки > Магазин > вкладка FTP.
Если вы видите сообщение «Доступ запрещен! У Вас нет прав для доступа к этой странице. Если она Вам нужна, обратитесь к администратору.» — нужно дать права администраторам на управление модулем или страницей.
Решение: в админке Opencart 2 переходим в Система > Пользователи > Группы пользователей > Администраторы и здесь нажимаем «Выделить все» ниже обоих блоков, затем Сохранить.
Еще одной причиной появления этой ошибки может быть не правильная установка модуля — файлы не загрузились на свои места. Загрузите файлы модуля вручную на сервер или установите фикс localcopy и переустановите модуль.
Если модуль — это один XML файл, то его расширение должно быть .ocmod.xml
Если модуль — это ocmod.zip архив, то его не нужно распаковывать, а устанавливать как есть. В таком архиве обязательно должна быть папка upload (может быть пустой), а также могут быть файлы модификаций: install.xml, install.php, install.sql. Никаких других файлов в корне архива быть не должно.
Читайте подробнее как устанавливать модули в Opencart 2
Решение: в админке Opencart 2 переходим в Система > Пользователи > Группы пользователей > Администраторы и здесь нажимаем «Выделить все» ниже обоих блоков, затем Сохранить.
Эта ошибка означает, что в загружаемом архиве отсутсвует папка upload. Даже если у модуля нет файлов, кроме модификаций — эта папка должна присутствовать в архиве модуля .ocmod.zip, тогда она должна оставаться пустой.
Эта ошибка означает, что вы пытаетесь установить модификатор, который уже установлен или, возможно, у какого-то вашего модуля такой же ID.
Для решения этой ошибки вам нужно перед установкой удалить старую версию модификации в разделе Модули > Модификации.
Если такого модуля у вас нет, но совпадает ID, тогда нужно поменять значение параметра <code> в устанавливаемом модификаторе XML, сделать этот параметр уникальным дописав несколько символов.
Эта ошибка означает, что вы пытаетесь установить слишком объемный xml-модификатор.
Количество символов в ocmod.xml файле не должно превышать 65535.
Для решения ошибки нужно разбить xml-файл модификации на несколько частей, главное — не забыть задавать каждой уникальное значение в <code>, можно добавлять к текущему значению цифры 1,2,3… как идентификаторы части.
Еще одним способом решения есть изменения типа в поля, где храняться модификации, в таблице ‘oc_modification’ базы данных. Нужно выполнить следующий SQL-запрос:
ALTER TABLE oc_modification
CHANGE xml
xml
MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ;
Похоже, вы установили на Opencart 2.3.x.x модуль для более старых версий этой системы, то есть не совместимый модуль. Нужно удалить все файлы этого модуля, иначе ошибка не исчезнет.
Для удаления файлов модулей из админкм в один клик можно использовать модуль
Также данная ошибка может возникать, если скрипт обращается к несуществующей таблице в базе данных. То есть, таблица модуля не создалась при установке. Читайте инструкцию по установке и переустановите модуль.
Если модуль не реагирует на ваши действия, будь-то нажатие на кнопку или загрузка карты или выбор даты или на любое другое действие которое есть в функционале модуля — скорее всего произошел конфликт в JS-скриптах.
Нажмите F12 на проблемной странице в браузере — откроется панель вебмастера, где на вкладке Console можно увидеть конфликты в скриптах, если они есть. Данное действие доступно в браузерах Chrome, Opera, Firefox.