Добавление своих полей в форму заказа

Добавление дополнительных полей в Minishop2 к оформлению заказа, без вмешательства в исходники и без потерь при обновлении.

Добавление своих полей в форму заказа Тут недавно в сообществе modx предложили универсальный вариант для добавления дополнительных полей в Minishop2 к оформлению заказа, без вмешательства в исходники и без потерь при обновлении.

Интересное решение, поэтому добавлю его себе в блог в заметки.

Решалось это следующим образом:

  1. Добавлялись необходимые поля, для примера взяты тип плательщика, название организации и инн.
  2. Добавлялся плагин срабатывающий при сохранении заказа и при подключении js минишопа в админке.
  3. Редактировались настройки и записи словарей.


1. В форму оформления заказа добавляем нужные поля:
<label><input type="radio" name="extfld_type" value="Юридическое лицо">Юридическое лицо</label>
<label><input type="radio" name="extfld_type" value="Физическое лицо">Физическое лицо</label>
<label><input type="text" name="extfld_org">Название организации</label>
<label><input type="text" name="extfld_inn">ИНН</label>
Все поля с префиксом extfld_ попадут в заказ.

2. Создаем плагин msExtraAddressFields и вешаем его на события msOnBeforeCreateOrder и msOnManagerCustomCssJs. Плагин сохраняет нужные поля при оформлении заказа в json в поле properties таблицы modx_ms2_order_addresses, а так же подключает нужный js в админке.
<?php
switch ($modx->event->name) {
    case 'msOnBeforeCreateOrder':
        $address = $msOrder->getOne('Address');
        $properties = array();
        foreach ($_POST as $key => $value){
            if (strpos($key,'extfld_') !== false){
                $properties[$key] = htmlentities($value,ENT_COMPAT | ENT_HTML401,'UTF-8');
            }
        }
        if (count($properties) > 0){
            $address->set('properties', json_encode($properties));    
        }
    break;
    
    case 'msOnManagerCustomCssJs':
        if ($page != 'orders') return;
	$modx->controller->addHtml("
            <script type='text/javascript'>
                Ext.ComponentMgr.onAvailable('minishop2-window-order-update', function(){
                	if (miniShop2.config['order_address_fields'].in_array('properties')){
                		if (this.record.addr_properties){
                		    var key;
                			for (key in this.record.addr_properties) {
                				this.fields.items[2].items.push(
                					{
                						xtype: 'displayfield',
                						name: 'addr_properties_'+key,
                						fieldLabel: _('ms2_properties_'+key),
                						anchor: '100%',
                						style: 'border:1px solid #efefef;width:95%;padding:5px;',
                						html: this.record.addr_properties[key]
                					}
                				);
                			}
                		}		
                	}
                });                
            </script>");
    break;
}
3. Добавляем вывод поля properties:
Заходим в системные настройки, там выбираем minishop2, блок Заказы.
Добавляем к значению «Поля адреса доставки» properties.



Добавляем записи словарей:
Заходим в Управление словарями, выбираем пространство имен minishop2, тема — manager, язык — ru.
Создаем новые записи с именами вида: ms2_properties_имя_вашего_поля (в данном случае ms2_properties_extfld_type, ms2_properties_extfld_org, ms2_properties_extfld_inn), значения — названия полей, которые будут отображаться в админке.

Поля не редактируемые, только выводят отправленные покупателем данные

Итоговый результат:

Источник: modx.pro

17 октября 2016, 16:59    Роман Воропаев Готовые решения для MODX 0    1310 0
    Загруженные файлы:
  • modx.jpg 30.56 kb

Похожие статьи:

Добавил возможность в mspPayMaster отправлять данные для ККТ в PayMaster
Выводим список всех товаров и их цен через Console в MODX Minishop2
Вывод превью в Tickets 09 сентября 2016, 15:41
Как вывести превью первого загруженного изображения к тикету
msDifferentPricesDelivery 09 сентября 2016, 14:23
Разные цены доставки или бесплатная доставка в зависимости от общей суммы заказа для minishop2 MODX
mspPayMaster 09 сентября 2016, 13:59
Метод приема платежей через PayMaster для miniShop2 MODX с виджетом способов оплаты.

Комментарии (1)

  1. Роман Воропаев 24 октября 2016, 12:28 # 0
    Так же, чтоб вывести данные этих полей в письме менеджеру или клиенту, нужно в чанк письма добавить поле вида:
    Используя fenom:
    {$address.properties.extfld_org}
    или используя стандартный шаблонизатор:
    [[+address.properties.extfld_org]]

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

    Комментарии через вконтакте: