msOrderFields

Дополнительные поля в заказе. Изменения стоимости доставки.
Автор дополнения
Boshnik
Пакетов
9
Закачек
6 948
Обычно отвечает в течение нескольких дней
Автор дополнения
Пакетов
9
Закачек
6 948
Обычно отвечает в течение нескольких дней
Версия 1.2.2-pl
Дата выпуска 13.09.2021
Загрузки 158
Просмотры 3 965
Внимание, этот компонент требует версию PHP 5.6 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.
Внимание, этот компонент требует версию MODX не ниже 2.6 !
Всем привет!

Компонент предназначен для управления полями заказа и вкладками. Можно управлять как стандартными полями так и создавать новые.

1. Меню компонента:




2. Поля


2.1. Стандартные поля.
Можно скрывать, менять местами, изменять лексикон, ширину поля, делать поля редактируемыми или наоборот, но эти поля нельзя удалить или переместить в другую вкладку.

2.2. Создание новых полей.
При создании нового поля создается соответствующий столбец в базе данных ms2_order_addresses и два лексикона(ms2_namefield, ms2_frontend_namefield), для админки и фронта. С ними работаем как с родными полями заказа.
Поддерживаются следующие типы полей:
  • Text (textfield)
  • Textarea (textarea)
  • Number (numberfield)
  • Checkbox (xcheckbox)
  • Boolean(msorderfields-combo-boolean)
  • Date (datefield)
  • Time (timefield)
  • DateTime (minishop2-xdatetime)
  • Display (displayfield)
  • Chunk (minishop2-combo-chunk)
  • File (minishop2-combo-browser)


3. Группы (вкладки заказа)


2.1. Стандартные вкладки.
Можно скрывать, менять заголовок, добавлять описание, но нельзя удалить.

2.2. Создание новых вкладок.


4. Системные настройки


4.1. msorderfields_delivery_cost
При включении данной настройки открывается возможность редактирования поля Стоимость доставки
Также при изменении способа доставки меняется стоимость доставки и сумма заказа, учитывая стоимость бесплатной доставки.


Если статус заказа финальный (по умолчанию: Отправлен, Отменён) то изменить сумму и способ доставки не получиться.


4.2. msorderfields_discount — возможность указывать скидку

Ну, и конечно же, если статус финальный то скидку мы не можем дать.

4.3. msorderfields_width — возможность редактирования поля Вес

5. Сниппеты


5.1 OrderGroups
Выводит список групп. Принимает след. параметры:
  • where — условие
  • tpl — имя чанка, @INLINE, @FILE
{*Выводим все группы, у которых есть описание*}
{set $groups = 'orderGroups' | snippet: [
    'where' =>  'description:!=' => ''],
]}
{$groups | print}


5.2 OrderFields
Выводит список полей. Принимает след. параметры:
  • where — условие
  • tpl — имя чанка, @INLINE, @FILE
{*Выводим все поля группы с id 3*}
{set $fields = 'orderGroups' | snippet: [
    'where' =>  ['group' => 3],
]}
{$fields | print}


6. Примеры


6.1. Выведем на странице заказа поля для плательщика.

На демо сайте добавьте товар в корзину и перейдите к оформлению заказа.
{*Получаем группы: юр. лицо и физ. лицо*}
{set $groups = 'orderGroups' | snippet: [
    'where' => ['id:IN' => [6,7], 'description:!=' => ''],
]}
<h4>Плательщик</h4>
<div class="form-group row">
{foreach $groups as $group}
    <div class="col-6">
        <div class="form-check card mb-3">
            <div class="card-body">
                <input class="form-check-input" type="radio" name="group" id="group_{$group.id}" value="{$group.id}">
                <label class="form-check-label" for="group_{$group.id}">
                    {if $group.description?}
                        <p class="small m-0">{$group.description}</p>
                    {/if}
                </label>

                {*Выводим поля группы*}
                {set $fields = 'orderFields' | snippet: [
                    'where' => ['group' => $group.id],
                ]}
                {foreach $fields as $field}
                    <div class="col-12">
                        <div class="form-floating mb-3">
                            <input type="{$field.xtype | replace: 'field': ''}" id="{$field.name}" 
                                   placeholder="{('ms2_frontend_' ~ $field.name) | lexicon}"
                                   name="{$field.name}" value="{$form[$field.name]}"
                                   class="form-control">
                            <label for="{$field.name}" class="form-label">{$field.lexicon_frontend}</label>
                            <span class="invalid-feedback">{'ms2_err_ns' | lexicon}</span>
                        </div>
                    </div>
                {/foreach}
            </div>
        </div>
    </div>
{/foreach}
</div>
И теперь новые поля соответствующих групп будут автоматически добавляться на страницу заказа.

6.2 После изменения суммы доставки нужно покупателю отправить письмо с измененными данными. Но, при этом мы не меняем статус заказа.
— Создаем вкладку Email
— Добавляем поля:
  • email_subject (тема письма)
  • email_body (дополнительный текст в письме)
  • email_chunk (чанк письма)
  • email_file (прикрепленный файл)
  • email_send (отправлять письмо или нет)
Результат:


Теперь создаем плагин и вешаем на событие msOnBeforeUpdateOrder
<?php
if($modx->event->name != 'msOnBeforeUpdateOrder') return;

// Проверяем стоит ли галочка, для отправки письма
if(!$data['addr_email_send']) return;

// Получаем чанк письма
if (!$chunk = $modx->getObject('modChunk', array('id' => $data['addr_email_chunk']))) return;

// Формируем чанк письма
$body = $modx->runSnippet('msGetOrder', array(
    'id' => $id, 
    'tpl' => $chunk->get('name'), 
    'content' => $data['addr_email_content']
));

// Отправляем с прикрепленным файлом
$msOrderFields = $modx->getService('msOrderFields', 'msOrderFields', MODX_CORE_PATH.'components/msorderfields/model/');
$msOrderFields->sendEmail($body, [
    'subject' => $data['addr_email_subject'],
    'files' => [
        $data['addr_email_file']
    ],
    'email' => $data['addr_email'] ?: $user->getOne('Profile')->get('email')
]);
Все, теперь при сохранении заказа отправляется письмо покупателю.

VERSION 1.2.0


Добавлено:
— изменение опций продукта
— тип поля richtext (TinyMCE Rich Text Editor)
— поддержка msPaidOptions
— поддержка msOptionsPrice2
— обновление заказа при добавлении, изменении или удаления продукта



При обновлении заказа учитывается доставка и скидка.

1.2.2-pl - 2021-09-13

Добавлено

  • поддержка miniShop 2.9.1-pl

1.2.1-pl - 2021-05-28

Добавлено

  • поддержка msPromoCode2

Исправлено

  • лексикон настроек

1.2.0-pl - 2021-05-13

Добавлено

  • изменение опций продукта
  • тип поля richtext (TinyMCE Rich Text Editor)
  • поддержка msPaidOptions
  • поддержка msOptionsPrice2
  • обновление заказа при добавлении, изменении или удаления продукта

1.1.0-pl - 2021-04-30

Добавлено

  • управление вкладками заказа
  • системная настройка msorderfields_discount (поле скидка)
  • системная настройка msorderfields_weight (поле вес)
  • сниппеты orderGroups и orderFields
  • фильтр полей по группе
  • чекбокс обязательное поле
  • изменения название поля
  • метод sendEmail
  • типы полей: chunk, file
  • en lexicon

1.0.0-pl - 2021-04-27

  • Первый релиз

Последние обсуждения в сообществе MODX.pro