Заказы
Заказы – модуль в составе модуля «Интернет-магазин». До версии 6.0.9.10 эта часть не была выделена в отдельный модуль. Он используется в административном интерфейсе и в виде набора функций (подключение) для работы с заказами магазина.
Подключение
Подключаемая часть – файл modules/order/order.inc.php. В нем описан класс
Order_inc. В модуле к объекту класса можно обратиться через переменную $this->diafan->_order
. Экземпляр класса создается при первом вызове
переменной.
Методы
array get (integer $order_id) – Получает все данные о товарах, дополнительных услугах, доставке и скидках в заказе.
- integer $order_id: номер заказа
Пример:
// запрашиваем данные для заказа номер 3
$order_id = 3;
$array = $this->diafan->_order->get($order_id);
print_r($array);
Результат:
Array
(
[id] => 3
[user_id] => 0
[created] => 1566717096
[status] => 1
[status_id] => 2
[lang_id] => 0
[summ] => 3330,50
[delivery_id] => 1
[delivery_summ] => 0
[delivery_info] =>
[discount_id] => 0
[discount_summ] => 0
[count_minus] => 0
[trash] => 0
[currency] => руб.
[count] => 2
[discount] =>
[summ_goods] => 12580
[rows] => Array
(
[0] => Array
(
[id] => 8
[count] => 2
[good_id] => 17
[price] => 6290
[discount_id] => 0
[name] => Палатка «Эксплорер 3 N»
[article] => 21041
[measure_unit] =>
[site_id] => 163
[cat_id] => 7
[param] => Array
(
[Цвет] => Синий
)
[img] => Array
(
[type] => link
[link] =>
[id] => 119
[width] => 180
[height] => 180
[alt] => Палатка «Эксплорер 3 N»
[title] => Палатка «Эксплорер 3 N»
[src] => /edu/userfls/shop/small/106_palatkaeksplorer4n.jpg
[vs] => Array
(
[medium] => /edu/userfls/shop/small/106_palatkaeksplorer4n.jpg
[large] => /edu/userfls/shop/large/106_palatkaeksplorer4n.jpg
[preview] => /edu/userfls/shop/preview/106_palatkaeksplorer4n.jpg
)
)
[cat] => Array
(
[link] => shop/palatki/dlya-slozhnykh-pokhodov/
[name] => Для сложных походов
)
[link] => shop/palatki/dlya-slozhnykh-pokhodov/palatka-eksplorer-3-n/
[additional_cost] => Array
(
)
[summ] => 12580
[discount] => 0
[old_price] => 0
)
)
[additional_cost] => Array
(
)
[delivery] => Array
(
[name] => Курьер
[summ] => 0
)
[tax] => 508,04
[tax_name] => НДС
)
array get_param (integer $order_id) – Получает все данные из формы оформления заказа.
- integer $order_id: номер заказа
Пример:
// запрашиваем данные для заказа номер 3
$order_id = 3;
$array = $this->diafan->_order->get_param($order_id);
print_r($array);
Результат:
Array
(
[0] => Array
(
[id] => 1
[name] => ФИО или название компании
[type] => text
[required] => 1
[text] =>
[config] =>
[info] => name
[value] => Спиридонов Антон
)
[1] => Array
(
[id] => 2
[name] => E-mail
[type] => email
[required] => 1
[text] =>
[config] =>
[info] => email
[value] => fetur@yandex.ru
)
[2] => Array
(
[id] => 3
[name] => Контактные телефоны (с кодом города)
[type] => phone
[required] => 1
[text] =>
[config] =>
[info] => phone
[value] => +79998881100
)
)
void pay (integer $order_id) – Оплата заказ (смена статуса на «В обработке»).
- integer $order_id: номер заказа
Пример:
// оплата заказа №12 (смена статуса, уменьшение количества товара на складе)
$this->diafan->_order->pay(12);
void set_status (array $order, array $status) – Установка статуса.
- array $order: информация о заказе
- array $status: информация о статусе заказа
Пример:
// запрашиваем массив данных о статусе заказа, который будем устанавливать
$status = DB::query_fetch_array("SELECT * FROM {shop_order_status} WHERE status='1' LIMIT 1");
// запрашиваем массив данных о заказе, которому будем менять статус
$order = DB::query_fetch_array("SELECT * FROM {shop_order} WHERE id=%d LIMIT 1", $order_id);
// изменяем статус для заказа
$this->diafan->_order->set_status($order, $status);
array details (integer $order_id) – Возврат информацию о плательщике.
- integer $order_id: ID заказа
Используется для детализации данных о платеже в модуле «Оплата».
Пример:
// запрашиваем данные для заказа номер 3
$order_id = 3;
$array = $this->diafan->_order->details($order_id);
print_r($array);
Результат:
Array
(
[name] => Спиридонов Антон
[email] => fetur@yandex.ru
[phone] => +79998881100
[city] => Москва
[street] => Энтузиастов
[building] => 90
[flat] => 31
[goods] => Array
(
[0] => Array
(
[name] => Палатка «Эксплорер 3 N» Цвет: Синий
[article] => 21041
[summ] => 12580.00
[price] => 6290.00
[count] => 2
)
)
[delivery] => Array
(
[name] => Курьер
[summ] => 0.00
)
[discount] => 9249.50
)
Подключение перенесено в отдельный модуль в версии 6.0.9.10. Предыдущий вариант обращения к функциям подключения $this->diafan->_shop->order_get()
. Текущий вариант $this->diafan->_order->get()
.
Структура бэкенда
К модулю можно подключить неограниченное количество бэкендов для расширения административного интерфейса заказов. Добавлено в версии 6.0.9.10.
Для этого нужно разработать несколько файлов стандартной структуры и разместить папку с этими файлами в папку order/backend. Далее создать расширение, в котором указать созданный бэкенд.
Расширение (или бэкенд) должен иметь уникальное название латинскими буквами (по примеру torg12, packing_list и др.). Для примера будем использовать название myfield.
В папке order/backend/myfield могут находиться следующий файлы:
- order.myfield.admin.php
- order.myfield.admin.js
- order.myfield.admin.order.php
Это не обязательная структура расширения. Нужно использовать только необходимые файлы. Кроме того, в бэкенд можно добавлять свои файлы любой другой структуры.
Рассмотрим структуру стандартных файлов
order.myfield.admin.php
Файл содержит настройки бэкенда, подгружаемые при добавлении расширения.
Структура файла:
Пример:
// ошибка 404 при прямом вызове файлов
if (! defined('DIAFAN'))
{
$path = __FILE__;
while(! file_exists($path.'/includes/404.php'))
{
$parent = dirname($path);
if($parent == $path) exit;
$path = $parent;
}
include $path.'/includes/404.php';
}
// наследуем класс Diafan, чтобы был доступен объект $this->diafan
class Order_myfield_admin extends Diafan
{
public $config = array(
"name" => 'Название бэкенда, выводимое администратору',
// настройки расширения
// ключи этого массива - название настроек латинскими буквами
"params" => array(
// можно указать просто текстовое описание настройки
// тогда она будет редактироваться как строка
'param1' => 'Название первой настройки',
// можно указать массив данных, тогда есть возможность
// задать тип данных и подсказку
'param2' => array(
// название второй настройки
'name' => 'Подпись к полю',
// доступны следующие типы:
// text - строка, по умолчанию
// checkbox - галочка
// select - список
// info - название выводиться текстом без редактирования
// none - не отображается, но сохраняется
'type' => 'text',
// значение списка, если указан тип select
'select' => array(
'ключ1' => 'значение1',
'ключ2' => 'значение2',
'ключ3' => 'значение3',
),
// подсказка
'help' => 'Подсказка как нужно задавать подпись.',
),
// можно определить свою функцию для вывода поля и его сохранения
'param3' => 'Название третьей настройки',
)
);
/**
* Своя функция на редактирования настройки param3
*
* @param string $value значение для param3
* @param array $values значение всех полей настроек, ключ - название поля
* @return void
*/
public function edit_variable_param3($value, $values)
{
echo '<div class="unit">
<div class="infofield">Название поля</div>
Значение поля
</div>';
}
/**
* Своя функция на сохранение настройки param3
* функция возвращает значение, которое нужно сохранить (не обязательно)
*
* @return mixed значение
*/
public function save_variable_param3()
{
// сохраняет данные
return $value;
}
}
order.myfield.admin.js
При наличии этот JS-файл автоматически подключается в интерфейс добавления расширения.
order.myfield.admin.order.php
Файл дополняет административный интерфейс «Заказы».
Пример:
// ошибка 404 при прямом вызове файлов
if (! defined('DIAFAN'))
{
$path = __FILE__;
while(! file_exists($path.'/includes/404.php'))
{
$parent = dirname($path);
if($parent == $path) exit;
$path = $parent;
}
include $path.'/includes/404.php';
}
// наследуем класс Diafan, чтобы был доступен объект $this->diafan
class Order_myfield_admin_order extends Diafan
{
/*
* Вставка в форму редактирования заказа
*
* @param array $params настройки бэкенда в формате ассоциативного массива
* @return void
*/
public function edit($params)
{
echo '
<div class="unit">
Новое поле
</div>';
// если бэкенд записывает данные в таблицу {shop_order_backend_element}
// то значения для текущего заказа будут доступны через переменную
// $this->diafan->value
}
/*
* Вставка в форму сохранения заказа
*
* @param array $values записи в таблице {shop_order_backend_element} для текущего заказа до сохранения
* @param array $params настройки бэкенда в формате ассоциативного массива
* @return array|void
*/
public function save($values, $params)
{
// если бэкенда будет записывать данные в таблицу {shop_order_backend_element},
// функция должна вернуть массив
$result = array(
'type1' => array('значение1', 'значение2', 'значение3'),
'type2' => array('значение для другого ключа', 'значение5'),
);
return $result;
}
/*
* Вставка в список заказов
*
* @param array $row информация о текущем элементе списка
* @param array $values записи в таблице {shop_order_backend_element}
* @param array $params настройки бэкенда в формате ассоциативного массива
* @return string
*/
public function list($row, $values, $params)
{
return '<div>значения для новой колонки</div>';
}
}
Если бэкенд использует таблицу {shop_order_backend_element}, то значения для текущего заказа доступны в формате ассоциативного массива, где ключ – любое предусмотренное строковое значение, а значение – массив значений.
Пример:
Array
(
[mytype] => Array
(
[0] => значение1
[1] => значение2
[2] => значение3
)
[mytype2] => Array
(
[0] => данные1
)
)
Готовые интеграции
В стандартную сборку DIAFAN.CMS включено расширение «Товарный чек». Можно установить бесплатное дополнение «Товарная накладная».
Дополнения
Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.