[msOptionsPrice2] - Модификации продукта.


[msOptionsPrice2] — Новая версия с модификациями продукта. Кардинально отличается от предыдущей, просто обновиться не получится.

В целом компонент так же работает с опциями продукта, но теперь опции привязаны к модификации продукта. Так же модификации можно задать свой артикул, вес, кол-во и конечно стоимость. Доступны все опции продукта.



Заранее приношу свои извинения за невозможность апгрейда со старой версии.


Модификации продукта
На странице продукта доступна одноименная вкладка (настройка msoptionsprice_working_templates, в ней перечислить id необходимых шаблонов). Можно создать/изменить модификации продукта.



Для модификации доступны все опции продукта.



Сниппет msOptionsPrice.initialize
Предназначен для подключения стилей и скриптов на фронте сайта.
Достаточно вызвать сниппет в шаблоне продукта.

[[!msOptionsPrice.initialize?]]
Дефолтный скрипт отслеживает изменение формы продукта и подгружает данные о модификации.
Для работы скрипта необходимо добавить необходимые классы, пример чанка продукта — gist.github.com/vgrish/b6998560c6a64c0f34109a9e632b9b56

форма продукта — msoptionsprice-product
стоимость продукта — msoptionsprice-cost msoptionsprice-[[*id]]
артикул продукта — msoptionsprice-article msoptionsprice-[[*id]]
вес продукта — msoptionsprice-weight msoptionsprice-[[*id]]

Сниппет msOptionsPrice.modification
Предназначен для вывода модификаций продукта. Часто требуется отдельно вывести информацию о различных модификациях продукта, теперь это достаточно просто сделать. Нужно вызвать сниппет

[[!msOptionsPrice.modification?]]


Картинка модификации
Можно добавить картинку модификации продукта. Доступны изображения из галереи продукта.

В чанк галереи необходимо добавить идентификаторы
data-rid="{$file['product_id']}" data-iid="{$file['id']}"
пример чанка gist.github.com/vgrish/e5c7e541b33eefc4b7c0cb68ec389096
дофолтный скрипт работает с галереей fotorama.

Обработка старой цены продукта
В случае с модификациями продукта, разница может быть очень значительна и практически всегда ее сумма выглядит нелогично. Поэтому была добавлена обработка старой цены продукта.
Логика расчета очень простая
цена продукта   старая цена продукта
----------------------------------------- =             -----------------------------------------
цена модификации продукта   старая цена модификации продукта

(цена продукта / старая цена продукта = цена модификации продукта / старая цена модификации продукта)
Достаточно проставить старую цену в основное поле продукта и старая стоимость модификации будет автоматически рассчитана.

Для смены на фронте нужно добавить необходимые классы. Пример чанка продукта тут gist.github.com/vgrish/b6998560c6a64c0f34109a9e632b9b56#file-gistfile1-txt-L22

В сниппете msOptionsPrice.modification поле так же доступно поле old_price.

Копия модификации
Добавлен процессор на копирование модификации.


превью в корзине
Для вывода превью модификации в корзине магазина можно использовать следующую конструкцию.
gist.github.com/vgrish/3748714377be39401799e3908efd8a59#file-mscart-tpl-L22-L35

опции продукта
Улучшена работа с опциями продукта. Нет необходимости как прежде сначала создавать опции, а затем переключаться на модификации. Доступно создание/ удаление опций продукта напрямую из модификации.

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

Не пытайтесь обновиться!!! Если не уверены что оно вам нужно.

ps. Всем спасибо за внимание. Новая версия совместима с пакетом скидок Discontrol

Пример работы: s6200.h3.modhost.pro/katalog/tovar1.html
03 september 2016, 13:18    Володя   G+  
6    1126 +8

Comments (116)

  1. Ilya Ev 05 september 2016, 15:07 # +1
    а картинку прикрепить к модификации есть возможность? Очень часто такое необходимо
    1. Володя 05 september 2016, 16:23 # +1
      да, думаю можно сделать… будет время посмотрю.
      1. Ilya Ev 05 september 2016, 17:04 # +1
        Было бы здорово, пойду куплю на вырост)
        1. Володя 06 september 2016, 11:42 # +1
          добавил картинку модификации.



          рабочий пример тут s6200.h3.modhost.pro/index.php?id=136
          1. Евгений Webinmd 06 september 2016, 14:34 # 0
            А можно как-то сделать чтобы создание данных для модификаций было не обязательным, чтобы можно было указать только Картинка + цена ??
            1. Володя 06 september 2016, 14:40 # 0
              и по какому признаку тогда будут отличаться модификации? Сейчас это уникальные для каждой модификации опции…
              1. Евгений Webinmd 06 september 2016, 14:45 # 0
                Логично, спасибо
            2. Евгений Webinmd 07 september 2016, 11:52 # +1
              в мозиле на демке не работает и в консоль выдает ошибку на строку 120
              var formData = new FormData($(form)[0]);
              TypeError: Argument 1 of FormData.constructor does not implement interface HTMLFormElement.

              если эту строку заменить на ту что ниже, то вроде как работает, но не знаю уже как будет с несколькими формами на странице
              var formData = new FormData(); 
              1. Володя 07 september 2016, 13:40 # 0
                спасибо, попрввил.
      2. Евгений Webinmd 05 september 2016, 17:30 # 0
        картинка было бы здорово
        1. Виктор Долгий 05 september 2016, 20:59 # 0
          В списке товаров использовать можно? Или только старую модификацию?
          1. Володя 05 september 2016, 23:39 # 0
            да, можно.
            1. Виктор Долгий 06 september 2016, 01:33 # 0
              как?
              1. Володя 06 september 2016, 09:10 # 0
                аналогично странице продукта.
                Спрашивайте конкретнее что неясно.
                1. Виктор Долгий 06 september 2016, 18:04 # 0
                  Есть список товаров, выводимый miniShop через mFilter, стандартно. Инициализирую до mFilter msOptionsPrice.initialize. В плитке товаров выставляю класс формы msoptionsprice-product, класс ценника msoptionsprice-cost msoptionsprice-[[+id]], в самом товаре создаю два цвета, каждому в «Модификациях» задаю цену (=) и выбираю цвет. И вот, плитка товаров, выбираю цвет, выводимый msOptions в товаре, и ничего не происходит)) Ни в логах браузера, ни в логах MODx ничего нет. Видно, что при выборе цвета в браузере в консоли, промаргивает поле с ценой, но она не меняется абсолютно. Где я не прав?
                  1. Володя 06 september 2016, 22:11 # 0
                    Я не говорю что ктото не прав, просто вы спрашиваете а деталей не сообщаете, вот оказывается там mFilter, естественно нужно как то обработать подгрузку товаров при смене фильтров.
                    Сейчас посмотрю…
                    1. Виктор Долгий 06 september 2016, 22:21 # +1
                      Всё, заработало. Я не особо лазил в код, но фишка оказалось в том, что в форме продукта в плитке с классами .ms2_form.msoptionsprice-product вызов сниппета [[!msOptions]] должен стоять после скрытого инпута с name=«options». Ну, в принципе логично, но иногда тупикуешь из-за таких мелочей. Вам спасибо, прикуплю еще на один сайт дополнение ;)
                      1. Володя 06 september 2016, 22:31 # +1
                        после скрытого инпута с name=«options»
                        это да, иначе вы массив опций затираете.
                        Вам спасибо
                        Пожалуйста, ну благодаря вам теперь доработал совместимость с mFilter. Теперь все работает из коробки, также автоматом выставляет опции в зависимости от фильтра.
                        пример живет до завтра тут — s6514.h5.modhost.pro/index.php?id=4&msoption|color=%D1%81%D0%B8%D0%BD%D0%B8%D0%B9
                        1. Виктор Долгий 06 september 2016, 22:38 # 0
                          Вот это круто!) Еще раз спасибо!
                  2. Виктор Долгий 06 september 2016, 22:06 # 0
                    На странице товара всё отлично работает.
            2. Евгений Webinmd 07 september 2016, 12:32 # 0
              Я понимаю что малость утомил, но есть небольшой вопрос. Этот плагин будет работать с другими плагинами влияющими на модификацию цены?
              я к тому, что я получаю в своём плагине цену так:
              $values = & $modx->event->returnedValues;
              и дальше уже работаю с
              $values['price']
              А вот у тебя в плагине как получает?
              можно ли будет сперва использовать один модификатор цены(твой плагин) и потом еще один поверх первого.
              У нас в проекте просто идет зависимость цены еще и от города. и надо чтобы бралась цена что в поле или та что в msOptionsPrice и потом еще умножалась на коофициент.
              1. Володя 12 september 2016, 11:10 # 0
                опции продукта
                Улучшена работа с опциями продукта. Нет необходимости как прежде сначала создавать опции, а затем переключаться на модификации. Доступно создание/ удаление опций продукта напрямую из модификации.
                1. Андрей 21 september 2016, 17:15 # 0
                  Как добавить модификацию через процессор?

                  У товара нет никаких модификаций.

                  Пишу так, выводит ошибку о том что поле price должно быть уникально
                  $modification_data = array(
                    'rid' => 45019,
                    'type' => 1,
                    'price' => $good_price,
                    'article' => $good_article,
                    'weight' => '',
                    'count' => 0,
                    'active' => 1
                  );
                  
                  $response = $modx->runProcessor('modification/create', $modification_data, array(
                    'processors_path' => MODX_CORE_PATH.'components/msoptionsprice/processors/mgr/'
                  ));
                  
                  if ($response->isError()) {
                    print_r($response->getResponse());
                  }
                  

                  Сама ошибка
                  Array
                  (
                      [success] => 
                      [message] => 
                      [total] => 1
                      [errors] => Array
                          (
                              [0] => Array
                                  (
                                      [id] => price
                                      [msg] => Это поле должно быть уникально
                                  )
                  
                          )
                  
                      [object] => Array
                          (
                          )
                  
                  )
                  
                  1. Володя 21 september 2016, 21:15 # 0
                    модификацию нельзя создать без опций. Ваш код верен, нужно только прежде создать опции.

                    $rid = 3;
                    $mid = 0;
                    $price = 100;
                    $article = '2312';
                    /* опции модификации */
                    $options = array(
                        'color' => 'белый',
                        'size' => '100'
                    );
                    
                    /* создаем опции продукта */
                    $options = $msoptionsprice->setProductOptions($rid, $options);
                    /* создаем опции модификации */
                    $modx->call('msopModificationOption', 'saveOptions',array(&$modx, $mid, $rid, $options));
                    
                    /* создаем модификацию */
                    $modification = array(
                      'rid' => $rid,
                      'type' => 1,
                      'price' => $price,
                      'article' => $article,
                      'weight' => '',
                      'count' => 0,
                      'active' => 1
                    );
                    
                    $response = $modx->runProcessor('modification/create', $modification, array(
                      'processors_path' => MODX_CORE_PATH.'components/msoptionsprice/processors/mgr/'
                    ));
                    
                    if ($response->isError()) {
                      print_r($response->getResponse());
                    }
                    
                    1. Андрей 21 september 2016, 21:38 # 0
                      Что-то не работает, выдает ошибку

                      Uncaught TypeError: Argument 4 passed to msopModificationOption::saveOptions() must be of the type array, null given
                      

                      Добавил
                      $corePath = $modx->getOption('msoptionsprice_core_path', null, $modx->getOption('core_path', null, MODX_CORE_PATH) . 'components/msoptionsprice/');
                      $msoptionsprice = $modx->getService('msoptionsprice', 'msoptionsprice', $corePath . 'model/msoptionsprice/', array('core_path' => $corePath));
                      


                      я так понимаю ругается на $options в строке
                      $modx->call('msopModificationOption', 'saveOptions', array(&$modx, $mid, $rid, $options));
                      
                      1. Володя 21 september 2016, 21:53 # 0
                        TypeError: Argument 4 passed to msopModificationOption::saveOptions() must be of the type array, null given
                        ну он пишет что вместо массива вы передали null.
                        Либо у вас options пустой или возможно ошиблись с id продукта и опции не установились.
                  2. Виктор Долгий 29 september 2016, 16:25 # 0
                    А есть ли способ заставить меняться картинки с опциями в списке (плитке) товаров?
                    1. Володя 29 september 2016, 16:51 # +1
                      дефолтный скрипт работает с галереей fotorama, если вы по аналогии добавите его на страницу категории, думаю все так же будет рабоотать.
                      Либо модифируйте скрипт под свой случай, в модификации указан идентификатор картинки.

                      ps. можно написать плагин на событие msopOnAfterGetModification и получить url изображения.
                      1. Виктор Долгий 29 september 2016, 17:02 # 0
                        Спасибо! Да, через плагин, думаю, быстрее будет.
                    2. Юрий Татаркин 07 october 2016, 17:16 # 0
                      Добрый день. Имеем 10 размеров и 2 варианта цвета.

                      Создаем модификации

                      1. Размер 6 цвет красный, размер 6 цвет синий. — все ок.
                      2. Размер 8 цвет красный. — Не создает, говорит, что картинку надо уникальную.

                      Я что то не так делаю или все же это лишняя проверка? Зачем 8 одинаковых фото для 8 размеров?

                      1. Володя 08 october 2016, 15:30 # 0
                        Добрый день.
                        Картинка в модификации должна быть уникальна, иначе как по картинке потом определить модификацию?
                        Поясните что в модификации влияет на стоиомсть…
                        Возможно вам просто создать модификации под цвет без учета размера, а только по цвету…
                        1. Юрий Татаркин 09 october 2016, 13:18 # 0
                          Сферический пример в вакууме:

                          Айфон память 64 — 128 — 256. Цвета белый, черный, со стразами. При прочих равных, телефон со стразами всегда дороже чем белый или черный. А черный дороже белого, но дешевле того что со стразами. Внешне телефоны с разным объемом памяти не отличаются. То есть фото 3, комбинаций 9. По 3 комбинации на каждое фото. Грузить в галерею 9 отдельных фото не имеет смысла.

                          у меня ситуация аналогична.
                          1. Володя 10 october 2016, 09:37 # 0
                            может я чтото не так понял, но вот смотри попробовал сделать по твоему примеру
                            s6200.h3.modhost.pro/index.php?id=138
                            1. Юрий Татаркин 10 october 2016, 10:58 # 0
                              Так получится одна и та же добавка к цене в зависимости от объема памяти.

                              А если черный с 64 памяти стоит 2100, черный с 128 стоит 2333 и черный 256 памяти стоит 2654

                              Белый: 64 — 2050, 128 — 1500, 256 — 1800

                              Такое уже не получится сделать.
                              1. Володя 10 october 2016, 11:05 # 0
                                ну чтото же должно быть у продукта уникальное, вот к этому уникальному привяжите картинку, а дальше уже другими модификациями задавайте стоимость.
                                Например можно взять артикул, ведь он уникален? Создайте его, задайте для него картинку и дальше…
                                1. Юрий Татаркин 10 october 2016, 11:07 # 0
                                  То есть у модификации должно быть минимум одно поле уникальное? и при этом картинки можно не уникальные?
                                  1. Володя 10 october 2016, 11:09 # 0
                                    нет, картинка уникальна для каждой модификации. Иначе не определить связь между ними.
                                    1. Володя 10 october 2016, 11:10 # 0
                                      не, я муть предложил какую то. вам же надо картинку к цвету цеплять.
                                      1. Юрий Татаркин 10 october 2016, 11:11 # 0
                                        Все это похоже на битриксовые оферы товара. Надо посмотреть как у них сделано.
                                        1. Володя 10 october 2016, 11:14 # 0
                                          в целом можно сделать уникальность картинки настраиваемой. Но в случае когда картинка не уникальна не будет работать переключение опций по смене изображения в галерее, а будет переключаться картинка при смене опций.
                                          1. Володя 10 october 2016, 11:21 # +1
                                            Хотя я так подумал… щас посмотрю, может и получится сделать.
                                            1. Александр 19 october 2016, 15:52 # 0
                                              получилось?
                                                1. Юрий Татаркин 23 october 2016, 06:11 # 0
                                                  Получилось. Спасибо!
                                        2. shzk 24 november 2016, 12:48 # 0
                                          А можно чанк такого товара посмотреть?
                                            1. shzk 24 november 2016, 13:50 # +1
                                              Спасибо!
                                              Это правда скорее на s6200.h3.modhost.pro/index.php?id=136 похоже, а меня интересовал именно s6200.h3.modhost.pro/index.php?id=138

                                              Или мне так кажется из-за названий опций просто?
                                              1. Володя 24 november 2016, 13:53 # 0
                                                Или мне так кажется из-за названий опций просто?
                                                кажется )
                                                чанк один и тот же
                                                1. shzk 24 november 2016, 13:55 # 0
                                                  Хорошо, сейчас на тестовом сайте разберусь обязательно с ними )
                                        3. Володя 10 october 2016, 13:46 # 0
                                          пробуй обновиться и создать модификации.
                                          пример рабочий тут s6200.h3.modhost.pro/index.php?id=139
                                          1. Александр 25 october 2016, 15:38 # 0
                                            теперь работает хорошо. но из за того, что фоторама не сразу подгружает все фотки слайдера (а только те, что входят) — не меняется фотография при изменении модификации.
                                            не в курсе как лечится?
                                            1. Володя 25 october 2016, 17:27 # 0
                                              попробуйте убрать превьюшки gist.github.com/vgrish/7da99c6d534cdfab18f1a0754a0d23bc
                                              тогда фоторама сам будет генерить превью и возможно это сработает
                                              1. Александр 25 october 2016, 17:39 # 0
                                                не помогло
                                                yadi.sk/i/HTKCeupsxbNWB
                                                различие фоток в слайдере. и соответственно при переключении модификации тега img еще нет
                                                1. Володя 25 october 2016, 17:41 # 0
                                                  напишите в ТП с указанием доступов к админ панели сайта, посмотрю как решить.
                                                  Спасибо!
                                                  1. Александр 25 october 2016, 17:53 # 0
                                                    Простите, куда написать? линк, если можно.
                                    2. Виктор Долгий 08 october 2016, 15:48 # 0
                                      Спасибо за обновления) В последнем обновлении не работает поиск по ключу при добавлении опции в модификацию.
                                      1. Володя 10 october 2016, 09:22 # 0
                                        уверен? joxi.ru/xAe8MExSYzKNx2
                                      2. Кирилл 10 october 2016, 08:21 # 0
                                        Подскажите пожалуйста где можно скачать первую версию?
                                        1. Володя 10 october 2016, 09:17 # 0
                                          активировал в репозитории, попробуйте установить.
                                          1. Кирилл 10 october 2016, 10:54 # 0
                                            не появился take.ms/MT8pX. В качестве поставщика установил modstore.pro
                                            1. Володя 10 october 2016, 10:57 # 0
                                              уточните насчет какой первой версии вы имели ввиду? насчет самой самой первой??? ее не будет. Я думал речь шла о пакете msOptionsPrice2 первой версии, ее я и активировал.
                                              1. Кирилл 10 october 2016, 11:06 # 0
                                                Да речь о самой первой версии. Где-то было написано, что она стала бесплатной. Почему её не будет?
                                                1. Володя 10 october 2016, 11:12 # 0
                                                  она и была в репозитории пока работала. Сейчас она не работает с новой версией магазина, смысл ее держать? Потому и убрал.
                                                  1. Кирилл 11 october 2016, 18:03 # 0
                                                    А какая минимальная версия магазина нужна (именно miniShop2, а не modx) для 2й версии?
                                                    1. Володя 11 october 2016, 21:54 # 0
                                                      2.4.0
                                                      1. Сергей Шлоков 11 october 2016, 21:57 # 0
                                                        Офтоп.
                                                        Володь, у вас там сегодня ВВП гостил. Город причесали наверно.
                                                        1. Володя 11 october 2016, 22:00 # 0
                                                          да ты че… Город такого марафета за последние 30 лет не видел.
                                                          Дороги, спорт площадки как грибы после дождя, за несколько дней выросли.
                                                          1. Сергей Шлоков 11 october 2016, 23:06 # 0
                                                            Всё, на ближайшие 30 лет забудьте, другим тоже нужны дороги и корты :)
                                                          2. Кирилл 13 october 2016, 07:59 # 0
                                                            У меня 2.2.0 и обновиться очень проблематично т.к. мой предшественник вносил правки в исходный код. Может всё-таки дадите доступ к старой версии для таких «везунчиков» как я? Буду вам очень благодарен, могу купить за какую-то умеренную плату. Если конечно она будет работать на моей версии магазина.
                                                            1. Володя 13 october 2016, 09:45 # 0
                                                              активировал в репозитории старую версию. Описание актуальное для старой версии тут modx.pro/components/4880-msoptionsprice2-different-prices-for-the-options-of-the-goods/
                                                              1. Кирилл 13 october 2016, 17:46 # 0
                                                                Спасибо, но всё равно не вижу дополнение в репозиторие
                                                                1. Володя 13 october 2016, 18:24 # 0
                                                                  Возможно у вас не куплен пакет?
                                                                  1. Кирилл 13 october 2016, 18:27 # 0
                                                                    В смысле мне нужно купить msOptionsPrice2 для того, чтобы получить доступ к msOptionsPrice?
                                                                    1. Володя 13 october 2016, 18:29 # 0
                                                                      нет, речь изначальна шла про msOptionsPrice2, есть старая версия, есть новая что описана тут.
                                                                      1. Кирилл 13 october 2016, 18:32 # 0
                                                                        msOptionsPrice2 может быть установлена на minishop2 версии 2.2.0?
                                                                        1. Володя 13 october 2016, 18:40 # 0
                                                                          msOptionsPrice2 (1.1.4-beta) — работает на любом minishop2
                                                                          msOptionsPrice2 (2.0.0-beta) — работает на minishop2 > 2.4.0
                                                                          1. Кирилл 13 october 2016, 18:42 # 0
                                                                            ок, спасибо. И после покупки я смогу выбрать любую из них, правильно?
                                                                            1. Володя 13 october 2016, 18:44 # 0
                                                                              да, должны быть доступны обе версии.
                                                                              Но я бы советовал вам обновить магазин и не держаться за старое.
                                                            2. Александр 12 october 2016, 17:07 # 0
                                                              Помогите плиз. На событие msOnGetProductPrice стоит 2 плагина. Первым отрабатывает плагин msoptionsprice вторым вызывается плагин для изменения цены от кол-ва товаров.
                                                              switch ($modx->event->name) {
                                                              
                                                              	case 'msOnGetProductPrice':
                                                              		if ($modx->context->key == 'mgr') {return;}
                                                              		// Плагин принимает:
                                                              		// $product - объект msProductData
                                                              		// $data - массив со свойствами товара, может отсутствовать
                                                              		// $price - текущая цена товара
                                                              
                                                              		// Подключаем массив значений по ссылке - так удобнее
                                                              		$values = &$modx->event->returnedValues;
                                                              
                                                              		// Цена может меняться несколькими плагинами сразу, поэтому проверяем:
                                                              		if (isset($values['price'])) {
                                                              			$price = $values['price'];
                                                              		}
                                                              		$modx->log(MODX::LOG_LEVEL_ERROR,'Плагин price_currency '.print_r($values,true));
                                                              
                                                              $values
                                                              приходит пустое. То есть изменение цены от первого плагины не приходит.
                                                              Почему это происходит и как вылечить?
                                                              1. Володя 12 october 2016, 17:10 # +1
                                                                это не работает с версии php > 5.3
                                                                фикс можно вот такой сделать github.com/modxcms/revolution/pull/13116
                                                                1. Александр 12 october 2016, 18:04 # 0
                                                                  Спасибо посмотрю. еще один вопрос можно?
                                                                  Есть плагин который в корзине меняет цену в зависимости от кол-ва. (блин плагин выше валюту переводит. поторопился когда писал.)
                                                                  <?php
                                                                  switch ($modx->event->name) {
                                                                  	case 'msOnAddToCart': case 'msOnChangeInCart': case 'msOnRemoveFromCart':
                                                                  
                                                                  		$cartArray = $cart->get();
                                                                  		$cartStatus = $cart->status();
                                                                  		$totalCount = $cartStatus['total_count'];
                                                                          //получаем курс валюты
                                                                  ....
                                                                          		$price = $product->get('price')*$course;
                                                                          		$old_price = round($product->get('old_price')*$course, 0);
                                                                          		//получаем скидку товара
                                                                  ....
                                                                  		$cart->set($cartArray);
                                                                  		break;
                                                                  
                                                                  }
                                                                  
                                                                  Как в этой строке
                                                                  $price = $product->get('price')*$course;
                                                                  можно получить цену модифицированную msOptionsPrice2?
                                                                  1. Володя 12 october 2016, 21:06 # 0
                                                                    расчет цены идет на событие msOnGetProductPrice достаточно вызвать метод
                                                                    $product->getPrice(array('msoptionsprice_options' => $options));
                                                                    
                                                                    где msoptionsprice_options опции продукта
                                                                    1. Александр 13 october 2016, 22:16 # 0
                                                                      Заработало. Я пытался править modx.class.php из админки. Как подсказал Володя его надо было залить по ftp.
                                                                      И в плагине правки:
                                                                      <?php
                                                                      switch ($modx->event->name) {
                                                                      
                                                                      	case 'msOnGetProductPrice':
                                                                      		if ($modx->context->key == 'mgr') {return;}
                                                                      		// Плагин принимает:
                                                                      		// $product - объект msProductData
                                                                      		// $data - массив со свойствами товара, может отсутствовать
                                                                      		// $price - текущая цена товара
                                                                      
                                                                      		// Подключаем массив значений по ссылке - так удобнее
                                                                      		$values = & $modx->Event->returnedValues;
                                                                              $values2 = & $modx->event->returnedValues;
                                                                      ...
                                                                      		
                                                                      		$price = $price*$course;
                                                                      		$values['price'] = round($price, 0);
                                                                      		$values2['price'] = $values['price'];
                                                                      ...
                                                                      		break;
                                                                      }
                                                                      
                                                                  2. Александр 12 october 2016, 18:26 # 0
                                                                    фикс можно вот такой сделать github.com/modxcms/revolution/pull/13116
                                                                    Не работает
                                                                    // Подключаем массив значений по ссылке - так удобнее
                                                                    		$values = $modx->event->returnedValues;
                                                                    
                                                                    		// Цена может меняться несколькими плагинами сразу, поэтому проверяем:
                                                                    		if (isset($values['price'])) {
                                                                    			$price = $values['price'];
                                                                    		}
                                                                    		$modx->log(MODX::LOG_LEVEL_ERROR,'Плагин price_currency '.print_r($values,true));
                                                                    
                                                                    print_r($values,true) все равно пустое :(
                                                                    1. Володя 12 october 2016, 18:41 # -1
                                                                      вы невнимательны…
                                                                      1. Александр 12 october 2016, 18:47 # 0
                                                                        Поясните пожалуйста.
                                                                        поставили php5.3 та же проблема :(
                                                                2. Константин Ильин 22 october 2016, 14:34 # 0
                                                                  Володя, скажи пожалуйста смогу ли я такое реализовать при помощи msOptionsPrice2:
                                                                  Есть Опция(общая) размеры sizes (тоже множественный выбор, но не стандартная size), сделал так чтобы были уже готовые значения и можно было просто выбирать.

                                                                  так вот:
                                                                  Есть несколько размеров, допустим 10, 30, 50. Они общие, т.е. эта опция для групп ресурсов одинаковая. Соответственно на каждую группу ресурсов своя цена на размеры. Допустим так:
                                                                  - Категория 1
                                                                  	10 цена 1000р
                                                                  	30 цена 1200р
                                                                  	50 цена 1400р
                                                                  - Категория 2
                                                                  	10 цена 1100р
                                                                  	30 цена 1300р
                                                                  	50 цена 1500р
                                                                  
                                                                  В каждом товаре выбираю только размер товара, из предложенных. К примеру:
                                                                  Товар 1 - размеры 10, 30
                                                                  Товар 2 - размеры 50
                                                                  Товар 3 - размеры 10,50
                                                                  
                                                                  Соответственно нужно выводить опции-цены только которые выбраны для товара.

                                                                  Можно ли чтобы не вбивать в каждый товар размер и его цену(создавать модификации), а назначить глобально как-то, т.е. для Категории как в коде выше?

                                                                  Вопрос не к компоненту, лучше наверно использовать существующее поле size, но как там связать это все и чтоб были значения(т.е. размеры 10, 30, 50 уже вбиты и можно было только выбирать)?
                                                                  1. Володя 22 october 2016, 18:13 # +1
                                                                    можно не создавать опции, не создавать модификации, а написать плагин на msopOnAfterGetModification
                                                                    должен отдавать модификацию по опциям продукта.
                                                                    Так вот в него поместить всю логику по вычислению стоимости модификации в зависисмости от ваших категорий и тд.
                                                                    Отдаете объект модификация с нужной стоимостью и все. Должно работать.
                                                                  2. Володя 22 october 2016, 18:14 # +1
                                                                    Вопрос не к компоненту, лучше наверно использовать существующее поле size, но как там связать это все и чтоб были значения(т.е. размеры 10, 30, 50 уже вбиты и можно было только выбирать)?
                                                                    Это наверно проще создать опцию как раньше с помощью плагина и в сторе комбика поместить те значения что вам нужны
                                                                    1. Кирилл 23 october 2016, 15:19 # 0
                                                                      Кто-нибудь знает как отписаться от получения новых комментариев отсюда на почту?
                                                                      1. Jurij 26 october 2016, 12:29 # 0
                                                                        После установки дополнения не отображается список опций на карточке товара. Если обновить страницу, то появляется.
                                                                        Разработчик приложения рекомендовал повысить версию php. Пробовал 5.4 и 7.0. Проблема осталась.

                                                                        Пробовал удалять приложения (SeoPro, Summary, Collections и другие). Ничего не меняется.

                                                                        Может кто сталкивался с данной проблемой и может поделиться решением. Не хочется полностью переделывать проект на shopkeepere из-за этой проблемы…

                                                                        P.S. Установлена последняя версия minishop 2.4.4-pl и mSearch 1.6.4-pl
                                                                        1. Володя 26 october 2016, 12:40 # 0
                                                                          После установки дополнения не отображается список опций на карточке товара. Если обновить страницу, то появляется
                                                                          не вводите людей в смуту, у вас опции выводятся стандартным сниппетом minishop и компонент тут не причем.

                                                                        2. Ольга 02 november 2016, 11:46 # 0
                                                                          Добрый день, подскажите, возможно ли у каждой модификации создавать свои цвета? Т.е. у меня товар — стул есть экокожа, есть ткань, есть натуральная кожа. И у каждой модификации есть не несколько видов своих цветов. Возможна ли такая реализация?
                                                                          1. Дмитрий 04 december 2016, 20:54 # 0
                                                                            добрый день!
                                                                            Купил msOptionsPrice2, возникли некоторые вопросы по работе:
                                                                            1. При смене опции меняется артикул и цена, все ок. Как можно передать в корзину артикул модификации? Цена передается, артикул нет.
                                                                            2. Если у товара нет модификации, артикул товара не отображается
                                                                            3. Возможно ли использовать radio вместо select в списке опции?
                                                                            miniShop2 2.4.6-pl1, пришлось обновить так как с 2.2 не работал
                                                                            msOptionsPrice2 2.1.20-beta
                                                                            1. Володя 05 december 2016, 11:31 # 0
                                                                              Добрый день.

                                                                              1. На данный момент никакого механизма по передаче артикула нет. Можно передавать артикул как опцию продукта.
                                                                              2. Поправил, обновитесь.
                                                                              3. Да, конечно. Пример чанка gist.github.com/vgrish/46de7e0c9eb453a4ccb77064b3b78916
                                                                              1. Дмитрий 06 december 2016, 09:50 # 0
                                                                                Спасибо за ответ.
                                                                                Возможно вопрос не к совсем к Вам, но может подскажете:
                                                                                Опции к товару добавляются через «Множественный выбор» в таком порядке joxi.ru/KAxbe4nF4WROKm от дешевого в дорогому, соответственно выбран самый дешевый, на при сохранении порядок меняется joxi.ru/zANa0gdclbKGy2. Получается что сортировка сама меняется. Можно ли как-то выводить нужную сортировку?
                                                                                >>>1. На данный момент никакого механизма по передаче артикула нет. Можно передавать артикул как опцию продукта.
                                                                                Жаль, один из факторов покупки данного компонента, что есть возможность передать уникальный артикул. По факту получается это просо js манипуляция на фронтенде карточки товара.
                                                                                1. Володя 06 december 2016, 10:42 # 0
                                                                                  Опции к товару добавляются через «Множественный выбор» в таком порядке joxi.ru/KAxbe4nF4WROKm от дешевого в дорогому, соответственно выбран самый дешевый, на при сохранении порядок меняется joxi.ru/zANa0gdclbKGy2. Получается что сортировка сама меняется. Можно ли как-то выводить нужную сортировку?
                                                                                  попробуйте выставить настройку msoptionsprice_sort_modification_option_values в нет
                                                                                  Жаль, один из факторов покупки данного компонента, что есть возможность передать уникальный артикул. По факту получается это просо js манипуляция на фронтенде карточки товара.
                                                                                  артикула как такового нет в продукте корзины github.com/bezumkin/miniShop2/blob/53f541cb4fabe3ad32f9e0608a5abf5d25cd9a4d/core/components/minishop2/model/schema/minishop2.mysql.schema.xml#L362-L370
                                                                                  есть только опции, потому если вы передадите артикул как опцию он нигде не потеряется. Других вариантов я пока не вижу.
                                                                                  1. Дмитрий 08 december 2016, 12:09 # 0
                                                                                    Спасибо за ответ.
                                                                                    >>>попробуйте выставить настройку msoptionsprice_sort_modification_option_values в нет
                                                                                    поставил работает, но после обновления до 2.1.22 beta перестало работать, значение в настройках стоит нет, проверил.
                                                                            2. Александр 07 december 2016, 18:10 # 0
                                                                              в ms2 есть параметр размер. можно ли как то сделать так, чтобы к этому параметру был привязан аналогичный другой параметр мощность. т.е. один размер — одна мощность. второй размер — соответствующая мощность?
                                                                              и во фронте при изменении модификации завязанной на размер автоматом обновлялся инпут ридонли мощности?

                                                                              если этот вопрос не связан с Вашим дополнением, можете направить куда рыть, чтобы направление было правильным? :)
                                                                              1. Володя 07 december 2016, 21:44 # 0
                                                                                Если я вас правильно понял то можно попробовать так.
                                                                                Плагин на событие msopOnGetModificationById примерно так
                                                                                if ($modx->event->name = 'msopOnGetModificationById') {
                                                                                    
                                                                                    $m = null;
                                                                                    $msoptionsprice = $modx->getService('msoptionsprice');
                                                                                   
                                                                                    // пробуем получить модификацию по свойству
                                                                                    foreach ($options as $k => $v) {
                                                                                        $m = $msoptionsprice->getModificationByOptions($rid, array($k => $v));
                                                                                        if ($m) {
                                                                                            break;
                                                                                        }
                                                                                    }
                                                                                    
                                                                                    if ($m) {
                                                                                	// получаем все свойства модификации
                                                                                        $options = $modx->call('msopModificationOption', 'getOptions', array(&$modx, $m['id'], $rid));
                                                                                        $modification->set('options', $options);
                                                                                        $modification->set('rid', $rid);
                                                                                        // сигнализируем что модификация найдена и не нужно выводить пустую модификацию по дефолту
                                                                                        $modx->event->returnedValues['found'] = true;
                                                                                }
                                                                                

                                                                                далее событие msoptionsprice_product_action
                                                                                $(document).on('msoptionsprice_product_action', function (e, action, form, r) {
                                                                                	if (action == 'modification/get') {
                                                                                	    var m = r.data.modification || {};
                                                                                	    var o = r.data.options || {};
                                                                                	    
                                                                                	    if (m.rid) {
                                                                                	        if (!msOptionsPrice.Tools.empty(o)) {
                                                                                				for (key in o) {
                                                                                				    if (!o.hasOwnProperty(key)) {
                                                                                						continue;
                                                                                					}
                                                                                					var value = o[key];
                                                                                					value = msOptionsPrice.Tools.formatOptionValue(key, value);
                                                                                					// выставляем свойства модификации
                                                                                					msOptionsPrice.Tools.setInputValue(key, value, m.rid);
                                                                                				}
                                                                                			}
                                                                                	    }
                                                                                	}
                                                                                });
                                                                                
                                                                                1. Александр 08 december 2016, 09:27 # 0
                                                                                  А где мы привязываем конкретный размер к конкретной мощности?
                                                                                  Или это делается когда в модификацию добавляются ключи? т.е. надо внимательно следить за тем, чтобы на 1 размер 2 мощности не привязать?
                                                                                  1. Володя 08 december 2016, 10:00 # 0
                                                                                    Или это делается когда в модификацию добавляются ключи?
                                                                                    да, все верно.
                                                                                    т.е. надо внимательно следить за тем, чтобы на 1 размер 2 мощности не привязать?
                                                                                    Да наверно нужно как то следить.
                                                                                    1. Александр 08 december 2016, 10:22 # 0
                                                                                      плагин modx, или ms2? что-то не совсем понял куда его.
                                                                                      1. Володя 08 december 2016, 10:46 # 0
                                                                                        плагин modx, или ms2? что-то не совсем понял куда его.
                                                                                        плагин modx конечно на событие msopOnGetModificationById
                                                                                        1. Александр 08 december 2016, 12:24 # 0
                                                                                          но при создании плагина нет такого события… =(
                                                                                          1. Володя 08 december 2016, 14:45 # 0
                                                                                            скорее всего вам нужно обновить пакет до последней версии
                                                                                            1. Александр 08 december 2016, 15:33 # 0
                                                                                              да, действительно. обновил, все появилось. в итоге при изменении размера на странице товара мощность не меняется на привязанную.
                                                                                              при этом цена изменяется только в том случае, если вручную выставлена правильная модификация.
                                                                                              И можно ли как то избавится от вывода опций через снипет [[msOptions]] и заменить его на простой input?
                                                                                              1. Володя 08 december 2016, 15:50 # 0
                                                                                                либо смоделируйте ситуацию на тестовом сайте, либо скиньте доступ в ТП.
                                                                                                Не видя тяжело чтото советовать.

                                                                                                И можно ли как то избавится от вывода опций через снипет [[msOptions]] и заменить его на простой input?
                                                                                                можно а зачем?
                                                                              2. colmer 05 february 2017, 21:59 # 0
                                                                                MODX 2.5.4. Поставил последний minishop2, накатил msOptionsPrice2. Создал товар, но новой вкладки не увидел. Необходимы еще какие то манипуляции? В гайде об этом ни слова.
                                                                                1. Володя 05 february 2017, 22:19 # 0
                                                                                  Скорее всего
                                                                                  На странице продукта доступна одноименная вкладка (настройка msoptionsprice_working_templates, в ней перечислить id необходимых шаблонов)
                                                                                2. Дмитрий 06 february 2017, 13:29 # 0
                                                                                  Добрый день хочу приобрести Ваш плагин, совместим ли он с minishop2.2?
                                                                                  1. Володя 06 february 2017, 13:40 # 0
                                                                                    Добрый день.
                                                                                    совместим ли он с minishop2.2?
                                                                                    нет, работает с версии 2.4.0
                                                                                  2. Евгений Webinmd 24 february 2017, 13:18 # 0
                                                                                    Заметил такую штуку.
                                                                                    Если у товара есть доп поле (TV) и в его Возможные значения вписано что-то типа такого:

                                                                                    @EVAL return $modx->runSnippet('msProducts', array('parents'=>'0', 'depth'=>'2', 'limit' => '300', 'tpl' => '@INLINE [[+pagetitle]]==[[+id]]||','tplLast' => '@INLINE [[+pagetitle]]==[[+id]]' ));
                                                                                    то карточка в админке не открывается.
                                                                                    Если убрать @EVAL, то всё нормально.
                                                                                    1. Володя 24 february 2017, 14:47 # +1
                                                                                      Привет. Поправил, обновись!
                                                                                      1. Евгений Webinmd 24 february 2017, 14:48 # 0
                                                                                        ! спс
                                                                                    You need to login to create comments.