Opencart как изменить статус товара

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

В базовом наборе в системе 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().
На этом всё, всем всего доброго!


  1. tank

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

    Сообщения:
    36
    Симпатии:
    0

    Добрый день.
    Установил в товары-даные-
    Отсутствие на складе-нет на складе
    Только при изменении этой опици меняется в карточке сообщение(как будто фиксированное сообщение выбираешь какое показать) но оно ни как не меняется при нехватке товара.
    Как сделать так чтобы при наличии был статус в наличии а после 0 чтобы показывал нет в наличии?
    opencart 2/0/1/1


  2. Romans

    Romans
    Administrator
    Команда форума

    Сообщения:
    1.396
    Симпатии:
    743

    По умолчанию так и работает. Т.е если в наличии то и показывает.
    А если товара 0, то показывает статус который указан в Товары — Данные -> Отсутствие на складе
    Может у вас какая то другая логика. У вас же не сборка?? Т.е Оригинал измененный + перевод..


  3. tank

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

    Сообщения:
    36
    Симпатии:
    0

    Вы говорите если А если товара 0, то показывает статус который указан в Товары — Данные -> Отсутствие на складе
    только оно не меняется. Когда выбираеш этот пункт он ставится в карточке даже если товар в наличии или закончился. ПРоверял сделал 1 шт, сделал вычитание ,оформил заказ. А в карточке так и стоит есть в наличии.Единственное просто нельзя в корзине оформить говорит нет в наличии. Но как сделать чтобы и в самой карточке статус менялся а не только в самой корзине?


  4. tank

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

    Сообщения:
    36
    Симпатии:
    0

    Товары — Данные -> Отсутствие на складе это ведь выбираеш какой статус показывать если нет в наличии?
    Только почему тогда если его выбираешь, то оно ставится по умолчанию смысле если товар есть в наличии,хотя этот статус должен появляться когда товар закончился?


  5. Romans

    Romans
    Administrator
    Команда форума

    Сообщения:
    1.396
    Симпатии:
    743

    Напомните, это у вас карточку товара исправлял кто то?? В этом и причина. Может вам просто вывели статус напрямую?
    Вы можете установить на локалку сборку и проверить как должно работать.


  6. tank

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

    Сообщения:
    36
    Симпатии:
    0

    походу это настряпал он мне не так. Как это можно изменить? Какой файл просмотреть,сравнить?

    Последнее редактирование: 20 янв 2015


  7. Romans

    Romans
    Administrator
    Команда форума

    Сообщения:
    1.396
    Симпатии:
    743

    как минимум посмотреть catalog/conroller/product/product.php и в шаблоне catalog/product.tpl


  8. tank

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

    Сообщения:
    36
    Симпатии:
    0

    темный лес :(. Вы можете сказать точно что исправить?


  9. Romans

    Romans
    Administrator
    Команда форума

    Сообщения:
    1.396
    Симпатии:
    743

    Как я могу сказать если я не знаю что у вас изменили?


  10. supo

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

    Сообщения:
    48
    Симпатии:
    1

    Здравствуйте. Подскажите. Товар идет только под заказ, но статус поменяется только если в админке поставить количество товара 0, но в этом случае у меня стоит модуль и кнопка добавления товара в корзину не активная. Как можно вывести любой статус товара при наличии его на складе? Спасибо.

  11. если только использовать свободное поле в админке типа SKU и там указывать статус текстом.


OpenCart Russia Форум

В базовом наборе в системе 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.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Opencart как изменить баннер
  • Opencart seo url internal server error
  • Opencart notice getimagesize read error in
  • Opencart mcrypt off как исправить
  • Opencart install 500 error

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии