[msExtraFields] 0.2.12 снова в строю

Привет всем! Начиная с текущей версии (0.2.12-beta) компонент перенес много изменений, и все также остался плагином MS2. В отличие от других подобных компонентов, способен работать как в последних версиях miniShop2 (я называю ms2 «нового поколения» начиная с версии 2.4.0-beta1) так и во всех предыдущих версиях (назовем «старое поколение ms2»). На изменения также повлияло развитие компонентов PdoTools и mSearch2. Как и всегда упор делался на гибкость и взаимосвязь свойств товаров и их значений, добавилась возможность прописывать вес и размер и соответственно изменять их от предпочтений сделанных клиентом при выборе товара.


Ниже приведен пример отображения и фильтрации данных, чтобы было понятно как работает поиск, я отделил свойства фильтра, строящиеся этим компонентом, в отдельный блок, над ним расположены родные свойства (цена, категории, теги). У каждого товара выводятся динамические свойства и родные свойств: «цена, тег, категория». Соответственно чтобы видеть как идет фильтрация заполнено 2 товара с разными характеристиками.



В этом примере, представлено изменение цены, веса и размера от выбранного значения характеристики. В левой части — вид свойств в админке (я скрыл часть полей чтобы уместить данные), справа вид у клиента (отключил родную анимацию). Первоначальная цена, вес и размер — это значения заполненные в стандартных полях MS2. Поля цена и те что подчеркнуты красным меняются в зав-ти от значения свойств. По умолчанию, у каждого товара при добавлении его в корзину, формируется уникальный ключ, это позволяет создавать, один и тот же товар, с разными характеристиками, как несколько отдельных товаров.



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

  • например их можно разместить в выпадающие списки и менеджеру при заполении, нужно будет только выбрать значение, а не вводить его
  • связать эти значения так, что при увеличении веса будет автоматически увеличен размер посылки и наобарот
  • или выделить отдельное значение характеристики, которое изменит оба значения, к примеру свойство «дополнительно» со значением «добавить крепежный комплект» прибавит к товару 5 кг веса, что может ощутимо сказаться на стоимости доставке.
Какие есть нюансы:
  • Расчет ведется с учетом родных значений ms2, поэтому даже если в товаре не указать новые данные, за основу берутся те что есть.
  • Если есть несколько различных характеристик с изменением габаритов и веса, то в итоге выбираются наибольшие значения
  • Если значение веса привело к тому что он стал равен 0 или меньше 0, то его значение устанавливается на изначальное.
  • Значения устанавливаются в соответствии с правилами указанными в системных настройках компонента, учитываются разделители, единицы измерения и коэффициент перевода в м3. Поэтому общие настройки нужно устанавливать в соответствии с настройками компонентов доставки (или наобарот). Например, ошибочно будет в доставке учитывать объем в см3, а в компоненте в м3.
  • В админке при вводе значений корректирующих полей товара размера и веса, значения проходят валидацию на ввод данных соответствующих текущим настройкам и настрокам ms2. Например +100.00 или 10x100x200.
Технически: размер возвращается через класс обработчика корзины вычисляя новое значение total_volume, вес через событие msOnGetProductWeight, что дает правильный расчет доставки другими компонентами. По крайней мере компоненты последних версий от Володи Володина (vgrish) будут работать правильно, могу точно сказать, что старая версия «Деловых линий» расчет делала принципиально иначе, чем после ее обновления под новый ms2. Но все случаи индивидуальны и четких правил тут конечно нет.

Опять же отмечу: и в старых версиях ms2 и новых компонент прекрасно работает, комбинируется как с компонентами доставки, так и оплаты дополняя друг-друга. Но не забываем, что все случаи индивидуальны и возможно разработчик, того или иного дополнения, пошел не стандартным путем.

Ссылка на магазин: msExtraFields

Ссылка на демонстрационный сайт.
Степан Прищепенко
21 ноября 2016, 12:37
modx.pro
2
2 070
+17
Поблагодарить автора Отправить деньги

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

Сергей Малышев
01 января 2020, 20:57
0
Каким образом можно сделать экспорт/импорт товаров minishop2 с Вашим компонентом? Какие поля к товару добавляет Ваш компонент?
    Степан Прищепенко
    02 января 2020, 21:28
    0
    Из коробки такой возможности нет и не писалось ничего для других компонентов обеспечивающих такой функционал. К основной таблицу товаров добавляется одно поле для хранения общего массива свойств (нужно для ускорения работы и поиска через msearch) все остальные данные хранятся в отдельных таблицах компонента.
      Сергей Малышев
      03 января 2020, 09:50
      0
      Какое одно поле? msextrafields?
      Задача;
      1.Есть сайт на хостинге с компонентом. Сайт глючит.
      2.Нужно разобраться с проблемой. Нужно собрать сайт на локальном хостинге пошагово.
      3.Необходимо перенести компонент на локальный сайт с настройками. (полная копия сайта на локальном хостинге также глючит).
      4.Как это сделать?

      Как переносить компонент? Через экспорт импорт таблиц базы данных? Не нарушится ли при этом ссылочная целостность? Ведь при экспорте импорте товаров ID ресурсов и шаблонов будут другие.

      Вообщем, помогите направить ход мысли в нужное русло.
        Степан Прищепенко
        04 января 2020, 09:42
        0
        Доп поля у таблицы msProductData: msextrafields, msextrafields_index, custom_measure.

        1. Бывает. Тут разбираться надо, в чем выражается и тд.
        2. Что значит собрать? установить modx с нуля и натянуть все на него с исходного сайта — делается как обычно через установку пакетов. Пакеты берутся со старого сайта.
        3. Переносите таблицы, точные названия можно подглядеть в файле схемы компонента:
        core/components/minishop2/plugins/msextrafields/model/schema/msextrafields.mysql.schema.xml
        и накатываете его сверху копируя пакет. Но в таком случае нужно будет действительно сопоставить их с идентификаторами ресурсов. Можно написать миграцию, которая присвоит правильные идентификаторы на чем то основываясь, но это долго.

        Если на сайте бардак в кодеи БД и хочется все сделать заново, а ресурсов много, я бы перенес БД на новую установку modx и выпилил из нее руками все что не нужно, включая все пакеты, затем исправил шаблоны на нужные, либо создал новые и прописал их у требуемых ресурсов. Дальше частями оживлял сайт как обычно и подключал требуемые компоненты. Периодически поглядывая в лог не появляется ли там чего интересного с каждым компонентом.
          Сергей Малышев
          04 января 2020, 10:37
          0
          Спасибо. Попробую, воспользовавшись советом из последнего абзаца, хотя уже на 90% написал скрипт по переносу товаров minishop2.
            Сергей Малышев
            03 февраля 2020, 17:22
            0
            Выгрузка скриптом товара с полями msextrafields, msextrafields_index, custom_measure и последующая загрузка на новый сайт не записывает динамические свойства. Хотя в файле выгрузке в них присутствуют данные. Например в поле msextrafields_index есть такая запись:
            Свойства: Напряжение: 12В; Емкость: 33А*ч; Срок службы: 5лет
            После импорта в этих динамических свойствах пусто.
            Есть ли возможность с помощью MODX API записывать динамические свойства товара? И если есть, то как это можно сделать?
              Степан Прищепенко
              04 февраля 2020, 09:10
              0
              Ммм слишком много неизвестных в этой задаче, все можно делать через процессоры например core/components/minishop2/processors/mgr/msextrafields/product/create.class.php В админке при сохранении через консоль разработчика можно посмотреть какие данные передаются и какой процессор вызывается.
                Сергей Малышев
                04 февраля 2020, 10:27
                0
                Можно примерчик кода с указанным процессором для записи динамических свойств. Этот процессор где нибудь документирован?
                  Степан Прищепенко
                  05 февраля 2020, 09:44
                  0
                  Примерчик пока не дам, но вызов стандартный Нет документации и нет лучшей документации чем сам код, поэтому я дал полный путь к процессорам.
                    Сергей Малышев
                    05 февраля 2020, 10:51
                    0
                    Вызов-то стандартный, но что передавать в массиве параметров — непонятно.
                      Сергей Малышев
                      09 февраля 2020, 12:43
                      0
                      Пришлось писать код с непосредственной записью в таблицу ms2efs_product. Что не есть айс. Но в результате все товары с динамическими свойствами наконец-то симпортировал. Но хотелось бы все это делать через процессоры, но не разобрался.
                        Степан Прищепенко
                        10 февраля 2020, 11:49
                        0
                        Хорошо что получилось. На всякий один из вариантов поиска точто что передавать (любой компонент): открываем админку (manager) идем на нужную страницу, открываем консоль разработчика в браузере, делаем любые изменения (с таблицами если это ms2exf), в консоли проскакивает action.php тычем на него. Все исходящие параметры и есть то что отправляется в процессор.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        12