Заказы

Заказы – модуль в составе модуля «Интернет-магазин». До версии 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 включено расширение «Товарный чек». Можно установить бесплатное дополнение «Товарная накладная».

Дополнения

Ваши комментарии и дополнения
20 января 2021 г. , редакция: 20 января 2021 г.
Цитата

order.myfield.admin.php
Файл содержит настройки бэкенда, подгружаемые при добавлении расширения.


А если доступ к этим настройкам нужен не на стороне клиента а прямо в админке?
Смотрю бэкенд другого модуля consultant и вижу как получают параметр id
Код
$this->diafan->configmodules("jivosite_id", "consultant")

аналогично пытаюсь достать логин и пароль из конфигурации бекенда на странице
Цитата
http://dfnv6013/order/get/mybackend/1
ну тобиш в файле
Цитата
modules/order/backend/mybackend/order.mybackend.php

Код
$this->diafan->configmodules('mybackend_login','order');
не работает.

Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.