msFieldsManager свои свойства в товаре miniShop2

Компонент msFieldsManager позволяет расширять свойства товара в miniShop2 путем добавления своих полей. В зависимости он выбранного типа данных для поля, будет создан соответствующий веб компонент для работы с ним.
Подробности в видео-обзоре
Prihod
27 ноября 2015, 13:26
6
11 043
+7
Поблагодарить автора Отправить деньги

Комментарии: 152

Степан Прищепенко
27 ноября 2015, 20:31
0
Привет, посмотрел видео, появился вопрос: компонент создает реальные поля в БД или используется например поле properies куда просто пихается JSON? И если это реальное поле в таблице, то при смене его типа он тоже меняется в БД или на все типы используется один и тот же тип?
    Prihod
    27 ноября 2015, 21:10
    0
    Да, создаются реальные поля с указанными типами данных и при их смене меняются их значение в БД
Павел Гвоздь
27 ноября 2015, 22:02
0
А в чём преимущество перед стандартными полями реализованными в версии 2.2 (помоему с неё они появились)? Ведь там есть возможность привязывать их к категориям, а тут, как я понял, эти поля будут отображаться для всех товаров без исключения?
    Prihod
    27 ноября 2015, 23:04
    +1
    Механизм дополнительных полей который появился в версии 2.2 конечно обладает некоторой гибкостью в плане привязки их к категориям но в тоже время имеет и недостаток т.к все данные хранятся в тестовом поле — это означает медленный поиск и сортировку + при выборке ресурсов необходимо отдельно делать дополнительные запросы.
      Павел Гвоздь
      27 ноября 2015, 23:41
      0
      Тогда другой вопрос. Планируется ли реализовать привязку к категориям товаров?
        Prihod
        28 ноября 2015, 00:00
        0
        ну это как бы функционально не возможно сделать т.к поля созданные через мое приложение как бы становятся основными полями продукта, я думаю если вы ознакомитесь с этим постом вам станем понятней о чем я говорю. В общим если вам не нужно делать никаких фильтров и выборок по своим полям то вам прекрасно подойдет вариант опций который появился в miniShop 2.2
          Дмитрий Аюпов
          Дмитрий Аюпов
          28 ноября 2015, 06:57
          0
          Так и не понял из видео, получится ли добавлять эти поля в панель управления заказом, если получится, то покажите как добавить.
          Ваше видео очень напомнило вот это :)
            Prihod
            28 ноября 2015, 12:59
            0
            Пока нет т.к в настройках самого miniShop в его опции «Поля таблицы заказов» нельзя указать свои поля для вывода, как только эта возможность появиться в новой версии miniShop она будет реализована и в msFieldsManager
      Волков Николай
      10 февраля 2016, 00:12
      0
      Не совсем так. Если правильно указать индексы для конкретного движка и конкретного сервера, то очень даже не медленный поиск будет… Но в общем случая вы правы..
Алексей
28 ноября 2015, 10:13
0
прикольная ммузычка) сами писали?
и по теме:
вот так я задаю валюту, в которой считать стоимость продукта:
price_currency: {
				xtype: 'minishop2-combo-vendor',
				minChars: 1,
				allowType: false,
				valueField: 'charcode',
				url: miniShop2.config.assets_url+'../currencyrate/connector.php',
				fields: ['name','id','charcode'],
				displayField: 'charcode',
				baseParams: {action: 'mgr/valute/getlist',limit: 100},
				tpl: '<tpl for="."><div class="x-combo-list-item" >{charcode} {name}</div></tpl>',
			},
При этом использую стандартный minishop2
xtype: 'minishop2-combo-vendor', заменив у него адрес обращения на
url: miniShop2.config.assets_url+'../currencyrate/connector.php' — стандартный коннектор расширения currensyrate,
ну и подправил чуть чуть tpl.

Еще иногда через плагины не требуется создавать новых полей в базе данных, а нужно изменить только extJS представление существующих полей в админке.

Было бы классно, если ваш компонент так умел.
    Prihod
    28 ноября 2015, 12:41
    0
    Правильно ли я понял про minishop2-combo-vendor, что вам нужна возможность указать свой xtype для создаваемого поля и + вы еще хотели бы менять xtype для родных полей minishop2?

      Алексей
      30 ноября 2015, 23:36
      0
      да, это было бы замечательно!
        Prihod
        30 ноября 2015, 23:48
        0
        А зачем может понадобиться менять xtype для родных полей minishop2?
          Алексей
          01 декабря 2015, 00:45
          0
          getColumns: function() {
          		return {
          			article: {width:50, sortable:false, renderer: this.renderFl},
          ...
          ,renderFl: function(value, cell, row){
          		if (row.data['article']) {
          			return '<img src="/svg/fl/' + row.data['article'] + '.svg" height="41" style="display:block;margin:auto;"/>';
          		}
          		else {
          			return '';
          		}
          	}
          вместо артикула в данном примере рендериться в списке товаров категории значок. На страничке товара артикул вбивается именем значка. (реальный пример с рабочего сайта)
          UPD: хотя для этих целей в легкую можно использовать дополнительное поле через плагин
Алексей
02 декабря 2015, 17:59
0
было бы классно иметь возможность через плагины добавлять поля к обычным ресурсам modResource а не только к msProduct. Это было бы очень круто.
    Prihod
    02 декабря 2015, 18:15
    0
    Ну добавить та поле в БД для modResource не проблема но вот работать с этими полями без правки скриптов modResource не получится т.к в modx не предусмотрено механизма типа плагинов для расширения modResource как в minishop2 для товара
      Алексей
      02 декабря 2015, 22:28
      0
      ну да, это получается придется делать Custom Resource Classes. Хотя можно и просто расширить таблицу налету, и добавить также через плагин дополнительный extjs код на страничку ресурса?
        Prihod
        02 декабря 2015, 23:07
        0
        С вариантам расширять на лету как по мне так много хлопот, может для простых вариантов такой подход и прокатит, если нужно без особой мороки добавить свои поля в modResource то можно заюзать https://modstore.pro/packages/utilities/cmpgeneratorpro с помощью данного плагина можно быстренькому расширить класс modResource
Алексей Андреев
10 декабря 2015, 13:51
0
А если у меня уже созданы дополнительные свойства через файлы (вручную плагинами), в базе они в таблице modx_ms2_products. Как msFieldsManager будет с этим взаимодействовать? Думаю прикупить, но хотелось при минимальных трудозатратах сохранить уже созданные свойства, значения в базе.

И еще вопрос: если делать импорт из эксельника, будут ли корректно записываться свойства, созданные при помощи msFieldsManager?
    Prihod
    10 декабря 2015, 14:02
    +1
    А если у меня уже созданы дополнительные свойства через файлы (вручную плагинами), в базе они в таблице modx_ms2_products. Как msFieldsManager будет с этим взаимодействовать?
    Пока вы не добавите свое новое поле через плагин он ваши старые поля не уведет, а после добавления поля ваши поля которые вы добавили в ручную появятся в плагине и если вы теперь сделаете правку своих старых полей через плагин то по идеи должны перемениться новые значения и вы можете удалить свои плагины если конечно вы для них не создавали свои extjs компоненты.

    И еще вопрос: если делать импорт из эксельника, будут ли корректно записываться свойства, созданные при помощи msFieldsManager
    Да, т.к поля созданные через msFieldsManager становятся как бы родными для продукта. С вашим полями которые вы создали вручную проблем же нет.
Серьёзный
22 января 2016, 18:48
0
А как создать доп поле checkbox?
    Prihod
    22 января 2016, 18:54
    0
    пока не как, скоро будет обновлении и там там помимо прочего будет эта возможность
ZEVeS
22 января 2016, 21:14
0
Вопрос: мне нужен выбор аля чекбокс (есть вариант только select ДА\НЕТ)
Но даже пусть будет селект. В олбщем пробелма: в карточке товара выводится поле дополнительное (tinyint -> php boolean) — так вот оно на сервер похоже отдает значения true\false текстом. И потому в базу сохраняется всегда значение 0. При этом если я (через другой компонент) вытсавляю этому полю значение 1 — то в карточке он нормально отображается как «ДА».

В общем похоже виджет надо поправить — чтобы возвращало значение.

p.s. кстати сейчас пришла идея использовать string заместо tinyint — но это все равно не решение имхо… поле нужно именно int.
    Prihod
    22 января 2016, 21:18
    0
    дело в другом, просто булевые значение в процессоре нужно обрабатывать через
    $this->setCheckbox('field_name')
    core/model/modx/modprocessor.class.php стр 209
      ZEVeS
      22 января 2016, 21:44
      0
      Да я не против ))) — только в данном случае это процессор minishop2 — и он сам автоматом отобраджет в карте товара в админке…
ZEVeS
22 января 2016, 21:47
0
Не хочется хардкодить в компоненте minishop'a… в частности по доп полям это плагин к нему… в общем — это некоторый баг минишопа получается… и писать надо автору? кстати — вы с ним общаетесь — может можно этот вопрос делегировать на Вас? :)
    Prihod
    22 января 2016, 21:48
    0
    )) не я с ним не общаюсь
      ZEVeS
      22 января 2016, 21:53
      0
      хм… может дадите прямую наводку :))) в каком процессоре ms2 это обрабатывается… чтобы я сам подправил?
        Prihod
        22 января 2016, 23:01
        0
        core/components/minishop2/processors/mgr/product/create.class.php
        core/components/minishop2/processors/mgr/product/update.class.php

        А вообще наверное лучше через плагин делать, прицепив его к соответствующему системному событию
Andrei
25 января 2016, 11:51
0
В не могли бы написать для не знатоков типов, какие типы и значения нужно вводить для того, чтобы в админке получить 1. select, 2. checkbox и 3. radiobutton. Если с селектом, с типом booleanm, я еще разобрался, то с остальными проблема.
    Prihod
    25 января 2016, 11:55
    0
    в данной версии такие компоненты как select, checkbox, radiobutton не поддерживаются но скоро будет новая версия где эти возможности появятся
      Andrei
      25 января 2016, 12:03
      0
      т.е. временно можно использовать комбобокс? или это не лучшая замена будет?
        Prihod
        25 января 2016, 12:04
        0
        комбобокс для булевых можно
          Andrei
          25 января 2016, 12:11
          0
          А комбобока это тип — varchar 255, php тип — json. Верно?
            Prihod
            25 января 2016, 12:14
            0
            нет int или TINYINT php — boolean
Серьёзный
09 февраля 2016, 23:09
0
А когда уже ожидается новая версия? =)
    Prihod
    09 февраля 2016, 23:10
    0
    думаю в конце месяца т.к куча другой работы )
      Сергей
      27 апреля 2016, 16:57
      0
      уж конец апреля)
      С нетерпением жду новую версию)
        Prihod
        27 апреля 2016, 17:04
        0
        как раз заканчиваю, завтра послезавтра будет доступна )
Prihod
29 апреля 2016, 16:57
+1
Доступна новая версия 1.1.0
Добавлено:
Элементы формы
1) флажок
2) группа радиокнопок
3) кастомный выпадающий список
4) текстовый редактор (должен быть установлен TypoMCE или подобный)
5) редактор кода (должен быть установлен Ace)

Для всего списка элементов доступна возможность кастоматизации.

Помимо всего прочего доступна возможность создавать свои процессоры и использовать их в кастомных элементах.

Больше инфы на странице компонента и в новом видео обзоре
    Николай
    21 сентября 2016, 10:55
    0
    С Minishop 2.4 работает?
      Prihod
      21 сентября 2016, 11:15
      0
      да
Дмитрий
15 июля 2016, 14:57
0
Добрый день.
Подскажите, использую «Кастомный выпадающий список» в свойствах товара с именем color.
Вывожу его через mFilters
[[!mFilter2?
&limit=`9`
&parents=`0`
&element=`msProducts`
&filters=`
parent:categories,
ms|pole1,
ms|master,
ms|color`
&tpls=`tpl.msProducts.row`
&class=`msProduct`
&tplOuter=`tpl.mFilter2.outer`
&tplFilter.outer.ms|price=`tpl.mFilter2.filter.slider`
&tplFilter.row.ms|price=`tpl.mFilter2.filter.number`
]]
Однако получаю не то, что хотелось бы видеть.
На выходе чекбокс [«petrov»,«ivanov»,"\u0431\u0435\u043b\u044b\u0439"] (русских букв он не понимает тоже почему-то)
А хотелось бы:
чекбокс petrov
чекбокс ivanov
чекбокс \u0431\u0435\u043b\u044b\u0439
Можно ли вывести каждое свойство отдельно и фильтровать по нему? Или может не тот тип использую?
Живой пример: у меня один товар делают два мастера, хотелось бы добавить каждого мастера к товару(для этого использую тип «Кастомный выпадающий список»), но иметь возможность фильтровать по каждому мастеру.
Купчинский Михаил
28 сентября 2016, 15:12
0
Добрый день! А можно ли поле с типом «Кастомный выпадающий список» заставить работать в таблице категории товара yadi.sk/i/LMZ3Hcw5vqhuQ
Александр
03 ноября 2016, 17:31
0
Приобрел компонент, создал новое свойство «чекбокс» по видео. Но в свойствах товара оно не добавилось. То же самое с остальными полями. В чем может быть проблема?

MODx — 2.5.1
MiniShop2 — 2.4.5
    Prihod
    03 ноября 2016, 17:56
    0
    почисти кэш браузера
      Александр
      03 ноября 2016, 18:19
      0
      Пробовал уже. И у браузера, и у админки.
      Причем в ms2_product_extra_fields поле добавляется, а в свойствах товара — нет
      Александр
      03 ноября 2016, 19:22
      0
      Таки получилось добавить поля, но заметил неприятную особенность: radio-кнопки добавляются без проблем, но если добавить хотя бы один checkbox, то в свойствах товара перестают отображаться все кастомные поля. Если удалить чекбокс — всё становится нормально.
      Пришлось пользоваться радио-кнопками, надеюсь в скором времени удастся пофиксить проблему. Без чекбоксов тяжко )
        Prihod
        05 ноября 2016, 16:59
        +1
        доступна новая версия с фиксам бага
Евгений Webinmd
09 декабря 2016, 18:22
0
Добрый день, очень удобный компонент, есть небольшой вопрос, не планируется ли добавление поля типа Изображение?
я поставил
{
    xtype: 'modx-combo-browser'
    ,fieldLabel: _('ms2_product_mytextfield')
    ,description: _('ms2_product_mytextfield_help')
    ,name: 'image'
    ,allowBlank:true
    ,anchor: '100%'
}
Как бы картинку выбрать можно, всё отлично, только вот renderer бы еще
Андрей
26 декабря 2016, 14:46
0
Правильно ли я понимаю — это по сути реализация плагинов для minishop2 но в административном интерфейсе? Чтобы не лазить в БД и по папкам, создавая нужные дополнительные поля?
    Prihod
    26 декабря 2016, 14:49
    0
    да
      Андрей
      26 декабря 2016, 14:50
      0
      Люкс, тогда забираю))
Dekr
31 января 2017, 11:30
0
Есть баг.
Добавленные поля появляются но название свойства и описание свойства нет.

P.S. «Название свойста: Так пишется в компоненте»
Dekr
01 февраля 2017, 14:57
0
Вопрос снят
Dekr
01 февраля 2017, 15:33
0
Запись topcontenticon
Тип ТЕХТ
Тип свойства: группа радиокнопок
{
    xtype: 'checkboxgroup'
    ,fieldLabel: _('ms2_product_topcontenticon')
    ,hideLabel: false
	,columns: 10
    ,value: ''
    ,items: [{
	xtype: 'checkbox'
        ,boxLabel: '<i class="icon_set_1_icon-1 myiconset"></i>'
        ,hideLabel: true
        ,name: 'topcontenticon'
        ,inputValue: 'icon_set_1_icon-1'
        },{
            xtype: 'checkbox'
	    ,boxLabel: '<i class="icon_set_1_icon-2 myiconset">'
            ,hideLabel: true
            ,name: 'topcontenticon'
            ,inputValue: 'icon_set_1_icon-2'
        },{
            xtype: 'checkbox'
	    ,boxLabel: '<i class="icon_set_1_icon-43 myiconset">'
            ,hideLabel: true
            ,name: 'topcontenticon'
            ,inputValue: 'icon_set_1_icon-43'
        },{
            xtype: 'checkbox'
	    ,boxLabel: '<i class="icon_set_1_icon-3 myiconset">'
            ,hideLabel: true
            ,name: 'topcontenticon'
            ,inputValue: 'icon_set_1_icon-3'
        }.. и.т.д.
]
Выводит только последнее значение. ([topcontenticon] => icon_set_1_icon-4)
А надо массивом [topcontenticon] => icon_set_1_icon-4,icon_set_1_icon-1,icon_set_1_icon-5
Как можно поправить или что прописать?
    Prihod
    01 февраля 2017, 15:42
    0
    если у тебя группа радио кнопок то все правильно вывело одно значение т.к у тебя же у все их одно и тоже name
Dekr
01 февраля 2017, 15:46
0
xtype: 'checkboxgroup' не оно?
    Prihod
    01 февраля 2017, 15:55
    0
    попробуй name указывать так
    ,name: 'topcontenticon[]'
Dekr
01 февраля 2017, 15:59
0
Попробовал и через checkbox и с переименованием name :(
значение одно.
,name: 'topcontenticon[]'
это ко всем именам?
    Prihod
    01 февраля 2017, 16:04
    0
    да
Dekr
01 февраля 2017, 16:12
0
[topcontenticon] => Array
и все…
При обновлении страницы чекбоксы сбрасываются
    Dekr
    01 февраля 2017, 16:15
    0
    что в радиокнопках что чекбоксе.
    Prihod
    01 февраля 2017, 16:24
    0
    у тебя value явно задано но это не решит твою проблему. Идея с topcontenticon[] не прокатит т.к ты пытаешся сохранить массив в текстовое поле. Я так навскидку вижу что с группой checkbox ничего не выйдет т.к должно быть 1 поле == 1 значение, поэтому я и не добавлял возможность генерировать код для группы checkbox
      Dekr
      01 февраля 2017, 16:29
      0
      extJS вроде так и советует как я сделал… печально.
        Prihod
        01 февраля 2017, 16:30
        0
        ну не знаю, это нужно раскуривать, я как то особо с checkbox не сталкивался
Prihod
01 февраля 2017, 16:27
0
а почему ты не сделаешь для каждого checkbox отдельное поле?
Dekr
01 февраля 2017, 16:31
0
Выглядит некрасиво. Хотелось акуратнее
    Dekr
    01 февраля 2017, 16:34
    0
    var myCheckboxGroup = new Ext.form.CheckboxGroup({
        id:'myGroup',
        xtype: 'checkboxgroup',
        fieldLabel: 'Single Column',
        // Arrange checkboxes into three columns, distributed vertically
        columns: 3,
        vertical: true,
        items: [
            {boxLabel: 'Item 1', name: 'cb-1'},
            {boxLabel: 'Item 2', name: 'cb-2', checked: true},
            {boxLabel: 'Item 3', name: 'cb-3'}
            {boxLabel: 'Item 4', name: 'cb-4'}
            {boxLabel: 'Item 5', name: 'cb-5'}
            {boxLabel: 'Item 6', name: 'cb-6'}
        ]
    });
    и смотрел вот это:
    Ext.onReady(function(){
        var checkboxGroup = new Ext.form.CheckboxGroup({
            columns: 1,
            fieldLabel: 'Овощи',
            name: 'veg',
            style: {
            padding: '5px 10px 5px 10px'
            },
            items: [{
                xtype: 'checkbox',
                boxLabel: 'Капуста',
                name: 'veg',
                inputValue: 'cabbage',
                checked:'true',
            }, {
                xtype: 'checkbox',
                boxLabel: 'Морковь',
                name: 'veg',
                inputValue: 'carrot'
            }, {
                xtype: 'checkbox',
                boxLabel: 'Свекла',
                name: 'veg',
                inputValue: 'beat'
            }, {
                xtype: 'checkbox',
                boxLabel: 'Лук',
                name: 'veg',
                inputValue: 'onion'
            }]
            });
            var panel = new Ext.Panel({
                renderTo: Ext.getBody(),
                title: 'Овощи',
                width:200,
                height:150,
                items: [checkboxGroup]
        });
    });
      Prihod
      01 февраля 2017, 16:39
      0
      Ext.onReady(function(){
          var checkboxGroup = new Ext.form.CheckboxGroup({
              columns: 1,
              fieldLabel: 'Овощи',
              name: 'veg',
              style: {
              padding: '5px 10px 5px 10px'
              },
              items: [{
                  xtype: 'checkbox',
                  boxLabel: 'Капуста',
                  name: 'veg',
                  inputValue: 'cabbage',
                  checked:'true',
              }, {
                  xtype: 'checkbox',
                  boxLabel: 'Морковь',
                  name: 'veg',
                  inputValue: 'carrot'
              }, {
                  xtype: 'checkbox',
                  boxLabel: 'Свекла',
                  name: 'veg',
                  inputValue: 'beat'
              }, {
                  xtype: 'checkbox',
                  boxLabel: 'Лук',
                  name: 'veg',
                  inputValue: 'onion'
              }]
              });
              var panel = new Ext.Panel({
                  renderTo: Ext.getBody(),
                  title: 'Овощи',
                  width:200,
                  height:150,
                  items: [checkboxGroup]
          });
      });
      это будет возвращать 1 значение

      это
      var myCheckboxGroup = new Ext.form.CheckboxGroup({
          id:'myGroup',
          xtype: 'checkboxgroup',
          fieldLabel: 'Single Column',
          // Arrange checkboxes into three columns, distributed vertically
          columns: 3,
          vertical: true,
          items: [
              {boxLabel: 'Item 1', name: 'cb-1'},
              {boxLabel: 'Item 2', name: 'cb-2', checked: true},
              {boxLabel: 'Item 3', name: 'cb-3'}
              {boxLabel: 'Item 4', name: 'cb-4'}
              {boxLabel: 'Item 5', name: 'cb-5'}
              {boxLabel: 'Item 6', name: 'cb-6'}
          ]
      });
      то что тебе нужно но у тебя 1 поле в БД а там откуда этот код 6 или phptype = json или array
        Dekr
        01 февраля 2017, 16:57
        0
        Нашел еще один вариант
        Ext.create('Ext.form.Panel', {
            bodyPadding: 10,
            width      : 300,
            title      : 'Pizza Order',
            items: [
                {
                    xtype      : 'fieldcontainer',
                    fieldLabel : 'Toppings',
                    defaultType: 'checkboxfield',
                    items: [
                        {
                            boxLabel  : 'Anchovies',
                            name      : 'topping',
                            inputValue: '1',
                            id        : 'checkbox1'
                        }, {
                            boxLabel  : 'Artichoke Hearts',
                            name      : 'topping',
                            inputValue: '2',
                            checked   : true,
                            id        : 'checkbox2'
                        }, {
                            boxLabel  : 'Bacon',
                            name      : 'topping',
                            inputValue: '3',
                            id        : 'checkbox3'
                        }
                    ]
                }
            ],
            bbar: [
                {
                    text: 'Select Bacon',
                    handler: function() {
                        var checkbox = Ext.getCmp('checkbox3');
                        checkbox.setValue(true);
                    }
                },
                '-',
                {
                    text: 'Select All',
                    handler: function() {
                        var checkbox1 = Ext.getCmp('checkbox1'),
                            checkbox2 = Ext.getCmp('checkbox2'),
                            checkbox3 = Ext.getCmp('checkbox3');
        
                        checkbox1.setValue(true);
                        checkbox2.setValue(true);
                        checkbox3.setValue(true);
                    }
                },
                {
                    text: 'Deselect All',
                    handler: function() {
                        var checkbox1 = Ext.getCmp('checkbox1'),
                            checkbox2 = Ext.getCmp('checkbox2'),
                            checkbox3 = Ext.getCmp('checkbox3');
        
                        checkbox1.setValue(false);
                        checkbox2.setValue(false);
                        checkbox3.setValue(false);
                    }
                }
            ],
            renderTo: Ext.getBody()
        });
        Здесь создание панели. Но видимо тоже в JSON
Dekr
03 февраля 2017, 17:11
0
Я наверно надоел уже… Но для чего нужно поле «Позиция»?
Так как у меня в панели товара оно ничего не сортирует.
    Prihod
    05 февраля 2017, 14:46
    0
    ну значит изменился способ добавления полей, т/к в файле плагина они отсартировываются согласно указанной позиции, а вот когда их добавляет minishop то порядок нарушается
Лазарев Роман
19 июня 2017, 17:49
0
Добрый день!

Поля созданные через msFieldsManager не показывают заголовок в фильтре mFilter2

— посмотреть: girostep.ru/giroskuteryi

Прошу помочь с вопросом! Спасибо
Prihod
27 июня 2017, 17:20
+3
UPD 1.1.6

-Добавлено: Свои вкладки ( можно создать свои вкладки которые располагаются сразу поле вкладки «Свойства товара» )
-Добавлено: Группировка полей (дает возможность вывести группу полей в определенной обвислости на своей вкладке)
Igor Ivanov
28 июня 2017, 12:14
0
Можно ли через MODX API создавать поля? Надо пару сотен TV переделать в свойства товара, руками неохота, может можно автоматизировать?
    Andrei D.
    28 июня 2017, 12:37
    0
    Поля, полагаю, имеют свой className, поэтому с ними можно работать как с обычными объектами

    Делаете query на tv, потом пересохраняете всё полученное в бд уже в новом формате
    Prihod
    28 июня 2017, 12:43
    0
    использовать такое количество Tv полей чревато медленной работой сайта т/к каждое tv поле это запрос к БД
      Igor Ivanov
      28 июня 2017, 13:55
      0
      Вот в этом и проблема, насоздавали 200 с лишним характеристик, и все в TV. Вроде как и все характеристики нужные, и из-за TV постоянные проблемы со скоростью, вплоть до того, что страница товара в админке открывается ну очень долго, потому что к ней привязано 200 тв-шек. А самое неприятное в том, что нельзя в одном запросе получить товары со всеми характеристиками, например для сравнения в компоненте Comparison, т.к. значения тв джойнятся в запросе, и получаем сообщение об ошибке о том, что MySQL может максимум 61 джойн за раз сделать. Поэтому встал вопрос попробовать перевести характеристики в свойства товара, для этого и купили ваш msFieldsManager. Теперь надо придумать как быстро создать 200 с лишним полей в msFieldsManager.
        Prihod
        28 июня 2017, 14:25
        0
        нужно просто создать или создать и перенести данные?
          Igor Ivanov
          28 июня 2017, 15:26
          0
          Просто создать хотя бы. Данные с помощью msImportExport переносить буду. Т.е. на старом сайте я сделаю выгрузку в csv названия tv и ее тип, а на новом хотелось бы на основе этого файла сгенерировать поля с теми же названиями и типами.
            Prihod
            28 июня 2017, 15:37
            0
            ну мне кажется ты быстрей их вручную набьешь чем создашь массив данных для программного решения задачи. Разве только если они у тебя одного типа
              Igor Ivanov
              28 июня 2017, 15:58
              0
              2 типа, текст и чекбокс.
Igor Ivanov
28 июня 2017, 16:00
1
0
Мне бы просто пример кода для создания нового поля…
    Prihod
    28 июня 2017, 16:14
    0
    $msfm =  $modx->getService('msfieldsmanager','Msfm');
     $processorsPath = $msfm->config['processorsPath'] . 'mgr/msfmfields/';
     $data = Array(); // данные для создания поля, сделай обычное  добавление через браузер и посмотри в запросе  какие параметры и значения для них нужны в зависимости от типа поля  
     $response = $modx->runProcessor('create',
                $data,
                array('processors_path' => $processorsPath)
            );
       if ($response->isError()) {
           $modx->log(modX::LOG_LEVEL_ERROR,print_r($response->getAllErrors(), 1));
       }
      Igor Ivanov
      28 июня 2017, 16:25
      0
      Отлично, спасибо!
      Igor Ivanov
      11 июля 2017, 10:47
      0
      1. Если свойство имеет несколько возможных значений, и товару может быть назначено несколько этих значений одновременно, то какой тип поля использовать? Типа аналог чекбока в TV со значениями Да==1||Нет==2||Иногда==3, что бы можно было выбрать сразу Да и Нет. Радио и кастомный список только одно же значение выбрать позволяют?

      2. Очень не хватает tooltip с именем ключа у полей, можно это как-то сделать?
Igor Ivanov
30 июня 2017, 17:02
0
Очень не хватает tooltip у полей, можно это как-то сделать?
Igor Ivanov
11 июля 2017, 12:58
0
Обнаружился косяк, делаем радиокнопку, строго по учебнику, если она добавлена в группу, которая вынесена на отдельную вкладку, то после сохранения товара при обновлении страницы не показывает выбранное значение. Само значение в базу записывается, но в интерфейсе редактирования товара все радио не отмеченные. Если же эту радио кнопку не назначать никакой группе, т.е. она остается на родной вкладке свойств товара, там, где цена, то показывает выбранное значение. И еще, если при создании задать значение по умолчанию, то в базу оно запишется, но в админке это значение не срабатывает. т.е. позиция, соответсвующая значению по умолчанию, остается не отмеченной.
Лазарев Роман
07 октября 2017, 20:21
0
Как сделать группу чекбоксов?
    Prihod
    07 октября 2017, 20:43
    0
    в текущей версии такой возможности нет
      Лазарев Роман
      07 октября 2017, 21:01
      0
      … а если мне в фильтре нужна группа чекбокосов? Фильтр mSearch2
        Prihod
        07 октября 2017, 21:16
        0
        можно использовать список с автодополнением это будет наподобие того который используется для цвета и размера
          Лазарев Роман
          07 октября 2017, 21:28
          0
          Каждый раз набирать слово, не совсем удобно. Не планируется ли это исправить в следующей версии?
            Prihod
            07 октября 2017, 21:30
            0
            планирую но когда она будет даже приблизительно сказать не могу
              Лазарев Роман
              07 октября 2017, 21:44
              0
              Было бы не плохо понимать, месяц, два (было бы)!

              Еще вопрос, если щас использовать список с автозаполнением, то когда появится группа чекбоксов будет ли совместимо (смогу поменять тип поля и жить дальше)?

              Что бы было понятнее, есть проект, нужно внедрять что то, если щас группы чекбоксов нет, то что можно использовать, что бы когда это появится тип поля (группа чекбокосов) можно беспроблемно переехать? Спасибо!
                Prihod
                07 октября 2017, 21:55
                0
                Было бы не плохо понимать, месяц, два (было бы)!
                2-3 недели

                Еще вопрос, если щас использовать список с автозаполнением, то когда появится группа чекбоксов будет ли совместимо (смогу поменять тип поля и жить дальше)?
                скорей всего да
                  Лазарев Роман
                  07 октября 2017, 21:59
                  0
                  2-3 недели было бы весьма неплохо! С радио кнопками, я так понимаю та же история !?

                  Ключевое слово «скорее всего» очень обнадеживает! Думаю придется ждать (((
                    Prihod
                    07 октября 2017, 22:29
                    0
                    С радио кнопками, я так понимаю та же история !?
                    радио кнопки есть
                    Думаю придется ждать
                    да лучше подождать
                      Лазарев Роман
                      07 октября 2017, 22:33
                      0
                      Про радио кнопки спросил, у них так же данные заносятся
                      Да==1||Нет==2||Не знаю==3
                      Подумал, может их использовать, а потом сменить тип поля, но если у них та же история, что нельзя объединить в группу, то идея под хвост…

                      — Просьба, как выпустите новую версию, напишите тут (на тему подписан, тут же узнаю о новой версии). Спасибо!
    Dekr
    12 октября 2017, 10:24
    0
    Атач файлов
    Хотел задать вопрос, но разобрался сам.
    Может кому еще поможет.

    fileinstruction — название поля в базе
    Тип свойства: Текстовое поле
    {
        xtype:'modx-combo-browser'
        ,name: 'fileinstruction'
        ,hiddenName: 'fileinstruction'
        ,fieldLabel: _('ms2_product_fileinstruction')
        ,description: '<b>[[*fileinstruction]]</b><br />'+ _('ms2_product_fileinstruction_help')
        ,value: msfmRecord['fileinstruction']
        ,allowBlank:true
        ,fileUpload: true
        ,store: new Ext.data.SimpleStore({
            fields: ['f']
            ,data:[
                ['f']
            ]
        })
        ,displayField: 'f'
        ,valueField: 'f'
        ,anchor: '50%'
        ,mode: 'local'
    }
    mfilin
    20 октября 2017, 22:31
    0
    подскажите каким образом можно обновлять программно значения полей в товаре?
    например, если бы я использовал опции минишопа, то делал бы так

    // проставка Опций
    function addOption($modx, $parent_id, $option, $value){
    $option = $modx->newObject('msProductOption', array(
    'product_id' => $parent_id,
    'key' => $option,
    'value' => $value
    ));
    $option->save();
    }

    а как в этом компоненте можно поступить?
      Prihod
      20 октября 2017, 22:43
      0
      $productData = $modx->getObject('msProductData',$product_id);
        $productData->set('my_var','my_val');
        $productData->save();
        mfilin
        21 октября 2017, 20:59
        0
        благодарю)
        mfilin
        26 октября 2017, 11:54
        0
        еще вопрос
        на данный момент я написал скрипт по наполнению базы msProduct со свойствами, используя Вашу подсказку. скрипт отрабатывает на небольшом количестве объектов и ~40 свойствах в консоль-менеджере modx (конечно пока есть оговорка, что это тестовый сервер), но как только объектов > 500, менеджер «отваливается», но объекты догружаются, то есть nginx видимо не дожидается ответа от apache.

        что я делаю дальше — дополняю скрипт и вешаю его на крон как php-cli… он снова грузит объекты, но почему то не проставляются свойства (

        я еще конечно посмотрю логи на тестовом, но корректно вообще ли вешать такого рода скрипт на крон /usr/bin/php?
    mfilin
    27 октября 2017, 21:14
    0
    решил вопрос с помощь плагина modx Console Manager
    Prihod
    04 декабря 2017, 17:11
    +1
    UPD 1.1.9
    -Добавлено: Поле «Группа флажков»
    -Добавлено: Поле «Файл»
    -Добавлено: Создание индекса для поля
      Igor Ivanov
      04 декабря 2017, 17:33
      0
      -Добавлено: Поле «Группа флажков»
      Это же для случая, когда одно поле может иметь одновременно несколько значений у одного товара? Спасибо! Очень не хватало именно такого поля. Позволь высказать еще одно пожелание/предложение по улучшению удобства работы с компонентом. Сейчас в таблице полей поиск возможен только по «Название поля в БД». Хорошо было бы иметь возможность искать также по Название свойства, Описание свойства, Группа.
    Александр
    24 января 2018, 14:10
    0
    А как быть с фильтрацией по списку с автодополнением?

    Создаю поле по видео-инструкции. Заполняю его у нескольких товаров подобными значениями:


    На странице каталога вывожу фильтр:

    [[!mFilter2?
    	&parents=`1`
    	&filters=`ms|capacity`
    ]]

    В итоге вот такой фильтр выходит:



    Как-то можно сделать, чтобы в итоге получился чекбокс для каждого значения, а не для всей строки полностью?
    Здесь можно глянуть: s12612.h9.modhost.pro/
      Александр
      24 января 2018, 17:38
      0
      Разобрался. Забыл, что надо вызывать в mFilter не ms, а msoption.
      Так работает:
      [[!mFilter2?
      	&parents=`1`
      	&filters=`msoption|capacity`
      ]]
    Александр
    27 марта 2018, 11:49
    0
    $tablesStmt= $this->manager->xpdo->prepare("SHOW TABLES FROM {$dbname}{$tableLike}");
    core/components/msfieldsmanager/model/msfieldsmanager/mysql/manager.class.php: 288

    $tablesStmt= $this->manager->xpdo->prepare("SHOW TABLES FROM `{$dbname}`{$tableLike}");
    Имя базы было с дефисом. из за этого список таблиц при создании кастом процессора не выпадал. добавив апострофы все заработало

    поля таблицы аналогично только с апострафами: в 307 строке
    $sql = 'SHOW FULL COLUMNS FROM `'.$this->manager->xpdo->config['dbname'].'`.'.$this->manager->xpdo->escape($table);
      Prihod
      27 марта 2018, 11:54
      0
      Спасибо за инфу, поправлю.
        Александр
        27 марта 2018, 12:26
        0
        похоже из за этого же не добавляются поля из таблицы ms2_products
    start.exe
    27 апреля 2018, 04:50
    0
    Пробую на тестовом сайте, обнаружил баг/фичу:
    — группа свойств отображается только если создать вкладку и прикрепить группу к ней.
    — отмеченные флажки в группы флажков записыпаются в бд, но сбрасываются при обновлении страницы. но если группу флажков добавить в группу свойств, а её к новой вкладке, то всё норм.

    подскажите, как вывести на странице товара и на странице со списком товаров:
    — список отмеченных значений в группе флажков
    — название добавленного свойства (есть ли вообще такая возможность?)
      Prihod
      27 апреля 2018, 11:02
      +1
      — группа свойств отображается только если создать вкладку и прикрепить группу к ней.
      — отмеченные флажки в группы флажков записыпаются в бд, но сбрасываются при обновлении страницы. но если группу флажков добавить в группу свойств, а её к новой вкладке, то всё норм.
      это не баг и об этом есть инфа в доках, minishop2 не умеет выводить группы и сложные пользовательские элементы

      подскажите, как вывести на странице товара и на странице со списком товаров:
      — список отмеченных значений в группе флажков
      — название добавленного свойства (есть ли вообще такая возможность?)
      Все поля созданные через msFieldsManager являются как бы родными полями minishop2 типа как price или color и соответственно с ними так же и нужно работать. Флажки это поле типа color или tags поэтому так же его значения и выводи

      Названия свойств добавляются в лексикон

      ms2_product_НазваниеПоля
      ms2_product_НазваниеПоля_help
    Prihod
    28 мая 2018, 11:57
    +1
    UPD 1.2.0

    -Добавлено: Хранилища данных для списков
    -Добавлено: Интеграция с msProductsComposerSelection
    — Изменено: Сортировка элементов с помощью drag and drop
    -Исправлено: мелкие баги

    Видео обзор работы с хранилищем данных и интеграции с msProductsComposerSelection


      Igor Ivanov
      20 июля 2018, 14:43
      0
      Можно чуть подробнее, что за хранилища, в чем фишка, чем лучше обычного способа? Как использовать, для чего?
        Prihod
        20 июля 2018, 14:56
        0
        что за хранилища, в чем фишка, чем лучше обычного способа?
        В обычном способе для списков тебе нужно данные вносить непосредственно в JS код списка, что может вызывать трудности у обычного менеджера, а так у него интуитивно понятный и привычный интерфейс + можно настроить права доступа только к хранилищу, а не к всему компоненту
    Лазарев Роман
    25 августа 2018, 00:31
    0
    Список с автозаполенеием — какое максимальное значение можно указать (кол-во)?
      Prihod
      26 августа 2018, 15:13
      0
      Любое
        Лазарев Роман
        26 августа 2018, 16:16
        0
        У меня после 5ти внесенных значений поле крошится, т.е. вношу 6е сохраняю, перезагружаю страницу и поле пустое, нет не одного значения!
          SEQUEL.ONE
          26 августа 2018, 16:34
          0
          Нужно каждый раз кэш очишать, а потом админку обновлять ctrl+f5 тогда всё отображаться должно.
            Лазарев Роман
            26 августа 2018, 16:39
            0
            Крошится не на сайте, а в админке.

            В админке:
            — заношу по очереди 5ть значений, сохраняю, перезагружаю страницу, все ок.
            — сюда же, заношу 6е значение, сохраняю, перезагружаю, в поле нет не одного значения
              Prihod
              26 августа 2018, 16:52
              0
              Тип поля в БД должно быть TEXT
                Лазарев Роман
                26 августа 2018, 17:02
                0
                Спасибо, заработало. В видео ошибка 2:30
                  Prihod
                  26 августа 2018, 17:07
                  0
                  Видео старое, в доках про подобные поля есть инфа, причем выделенная жирным
                    Лазарев Роман
                    26 августа 2018, 17:09
                    0
                    Я уже понял, что накосячил, делал поздно ночью ))) Спасибо за помощь!

                    п.с. под видео укажите, что устарело, специально для таких как я ))
    Лазарев Роман
    05 октября 2018, 19:10
    0
    Кастомный выпадающий список — можно как то кастомизировать/индефицировать, к примеру:

    // Список товаров, вызов:
    [[!msOptions? &product=`[[+id]] `&options=`svoistvo` &tpl=`tplSvoistvo`]]
    
    // Шаблон tplSvoistvo
    {foreach $options as $name => $values}
    	{foreach $values as $value}
    		<span>{$value}</span>
    	{/foreach}
    {/foreach}
    
    // Получаем на выходе
    <span>Да</span> // или
    <span>Нет</span>
    
    // Хотелось бы получать
    <span class="yes">Да</span> // или
    <span class="no">Нет</span>
    Viktor
    26 октября 2018, 23:36
    0
    При выбранном Type field: Numeric field float Ext JS все равно округляет числа
    Prihod
    30 октября 2018, 20:31
    0
    UPD 1.2.2
    Добавлено: Вывод поля в категории товара
    Добавлено: Сортировка в категории товара
    Алексей Андреев
    27 января 2019, 17:24
    +1
    Нет ли в планах добавить поле типа «размерность» для свойств?
      Prihod
      27 января 2019, 17:26
      0
      Что это ещё за тип поля?
        Алексей Андреев
        27 января 2019, 17:29
        0
        «Типа» в смысле «наподобие», в общем как во встроенных опциях минишопа.
          Prihod
          27 января 2019, 19:51
          0
          я что то в опциях не вижу поля типа «размерность» prntscr.com/mcvfpg
            Алексей Андреев
            28 января 2019, 13:42
            +1
            https://yadi.sk/i/1CP0--xo7sS2nA
            Размерность, т.е. единица измерения для каждой характеристики.
            Максим
            29 января 2019, 14:03
            0
            Имелось ввиду добавить в msFieldsManager возможность ввода «единицы измерения» для создаваемых полей. И получать их, например, через сниппет:
            {'field_name'|getUnit}
            Суть в том, чтобы, например, не вводить вручную в каждом чанке «единицы измерения».
            Например, в карточке товара, в блоке с фильтрами, на странице товара, в корзине могут быть использованы «единицы измерения» каких-то параметров.
              Prihod
              29 января 2019, 14:09
              +1
              Ну вот так то сразу и нужно было написать ) В новую версию которая скорей всего будет на следующей неделе добавлю
    Prihod
    06 февраля 2019, 14:11
    +1
    UPD 1.2.5
    Добавлено: Единицы измерения
    Добавлено: Сниппет msfmUnit
    Исправлено: Значение по умолчанию NULL

    Примеры вызова сниппета msfmUnit
    [[msfmUnit? &field=`my_field_name`]]
    
     // Для шаблонизатора Fenom
     {'my_field_name'|msfmUnit} // 1-й вариант
     {$_modx->runSnippet('msfmUnit', ['field' => 'my_field_name'])} // 2-й вариант
      Максим
      08 февраля 2019, 13:51
      0
      Исправлено: Значение по умолчанию NULL
      А что это за исправление? с чем связано? У нас просто сайт «полетел» (админка) после обновления msFieldManager. Может быть случайное совпадение, не знаю. Но теперь товары не отображаются в ресурсах с типом «Категория товара», а у созданных свойств не заполнены значения из базы, которые ранее точно были внесены и они точно есть в базе.
        Prihod
        08 февраля 2019, 14:00
        0
        я тебе ответил в поддержке
      Максим
      11 февраля 2019, 08:14
      0
      Сниппет называется сейчас по имени файла:
      snippet.msfmUnit
        Prihod
        11 февраля 2019, 12:35
        +1
        обновил пакет
    Максим
    12 февраля 2019, 07:12
    0
    Подскажи еще, пожалуйста.
    Возникла такая проблема.

    Пишу свой сниппет. В сниппете идет обращение к созданным через msFieldManager полям вот таким образом:
    $modx->resource->get('myFieldName')
    Но для некоторых полей значение выводится в виде вот такого массива:
    Array (
        [0] => field_name
        [1] => field_value
        [2] => default
        [3] => 
        [4] => field_type
    )
    Хотя в базе значение либо вообще отсутствует, либо в виде строки.
    Для каких-то полей нормально выводится значение, не понимаю по какой логике.
    Если предварительно получить объект через $modx->getObject(), то всё работает как надо, $object->get('myFieldName') выводит значение правильно.

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

    Из-за чего может такое происходить?

    П.С. Если обращаться через феном {$_modx->resource.manual}, то значение отображается корректно.
      Максим
      12 февраля 2019, 08:35
      0
      Разобрался.
      К шаблону (который стоял у товара) были еще подключены ТВ с такими же названиями.
      Хотя, по идеи, ТВ должны вызываться через getTVValue().
    Павел
    03 мая 2019, 08:42
    0
    Добрый день! Плагин даёт возможность вывода Input с датой в товаре для выбора даты покупателем?
      Prihod
      03 мая 2019, 10:06
      0
      hi, через плагин можно создавать поля для работы с датой. Протестировать можно используя бесплатный тариф на modhost.pro
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.