20 июля 2018, 11:00 К сожалению, пример уже не смогу дать, исходников не осталось. Могу сказать, что код выше будет рабочим при небольшой допилке (переработать запрос к базе и добавить условие на параметр). {if $.request['msoption|size']} {var $m = '!msOptionsPrice.modification'|snippet:[ 'product' => $id, 'limit' => 1, 'return' => 'data', 'where' => ["msopModification.price >= "~$tmp[0]~" AND msopModification.price <= "~$tmp[1]~" AND msop_modification_options.value <= "~$.request['msoption|size']~" AND msop_modification_options.key =='size' "]], ] /*Это условие чуть исправить, оставить только присутствующие запросе поля*/ } {/if} Новые дополнения и их версии / msOptionsPrice - разные цены для опций товара 89 0 1
20 июля 2018, 10:33 Требовалась работа только с 2-я параметрами. Делал по указаниям выше, только там сначала пришлось учитывать активные параметры и для конкретного набора параметров править запрос к базе. Не самое гибкое решение. Новые дополнения и их версии / msOptionsPrice - разные цены для опций товара 89 0
05 декабря 2017, 12:32 Я правильно понимаю, что, для учета других свойств модификации требуется дописать в вызове сниппета следующее {if $.request['msoption|size']} {var $m = '!msOptionsPrice.modification'|snippet:[ 'product' => $id, 'limit' => 1, 'return' => 'data', 'where' => ["msopModification.price >= "~$tmp[0]~" AND msopModification.price <= "~$tmp[1]~" AND msop_modification_options.value <= "~$.request['msoption|size']~" AND msop_modification_options.key =='size' "]], ]} {/if} Новые дополнения и их версии / msOptionsPrice - разные цены для опций товара 89 0
21 ноября 2017, 10:21 Только попробовал, выводит с учетом фильтра по ценам и потом сразу затирает, т.к. цены зависят не от одно параметра. Выше просто изменили цену на ближайшую подходящую, но при этом остальные параметры не изменили и не учитывали. Новые дополнения и их версии / msOptionsPrice - разные цены для опций товара 89 0
16 ноября 2017, 12:40 Спасибо, все хорошо работает. Но все же остался один недостаток, с которым, наверное, придется смириться или очень долго исправлять. Теперь при выборе цены в верхнем диапазоне, товары фильтруются правильно, но отображаются с базовыми ценами, цены меняются только при выборе какой-либо из опций… Новые дополнения и их версии / msOptionsPrice - разные цены для опций товара 89 0
16 ноября 2017, 12:20 Спасибо, это дало какое-то направление размышлений, но до конца, ясности так и не появилось. По идее, если я правильно понял, нужен стандартный метод для фильтрации по цене, но только он должен обращаться к другой таблице и выбирать другое поле. Новые дополнения и их версии / msOptionsPrice - разные цены для опций товара 89 0
16 ноября 2017, 10:26 Уже не актуально, нашел что искал… &sortOptions=`size:SORT_ASC:SORT_NUMERIC` Новые дополнения и их версии / [msOptionsPrice2] - Модификации продукта. 375 0 1
16 ноября 2017, 09:46 Добрый день! Возможно ли как-то отсортировать вывод опций в другом порядке? Новые дополнения и их версии / [msOptionsPrice2] - Модификации продукта. 375 0 2
16 ноября 2017, 07:48 С данным моментом разобрался, все отлично. Но, появился другой момент, как фильтровать по ценам модификаций, а не товаров? Получается что у товара цена указана 30к, в модификации цена 35к, а в фильтре максимальное 30к и получается дикая несуразица при взгляде на фильт с выведенными данными… Новые дополнения и их версии / msOptionsPrice - разные цены для опций товара 89 0
15 ноября 2017, 12:57 Может кто сталкивался с изменением цен у товаров в каталоге при фильтрации? Фильтруешь товары с опциями, а в каталоге у товаров даже цена не изменяется. Это как-то решено? Новые дополнения и их версии / msOptionsPrice - разные цены для опций товара 89 0 1
25 сентября 2017, 09:23 -Да, завязан жестко, т.к. не предполагалось унифицированного решения для всех, хотя такое имеет место быть. Связка упомянутых выше компонентов показалась наиболее удачным решением проблемы импорта и торговых предложений. А поделиться решил на тот случай, если будут такие же как я, нуждающиеся в импорте и примерах, хоть и кривых, но рабочих. -В транслит перегоняю дабы оставить кириллические названия переменных от 1-с там где они есть и не плодить их дальше(хотя по всем данным, можно и кириллицу юзать без проблем, но не будем холиварить). -По поводу того, что цены в это время где-то в сессии лежат в душе не чаял, если буду оптимизировать сей продукт учту. -Тут есть грешок, исправил) Вопросы / [mSync+MsOptionprice] Импорт торговых предложений 3 0 1
19 сентября 2017, 07:45 Я правильно понял, что для создания модификации достаточно сформировать входной массив $modification = array( 'price' => $price, 'old_price' => $old_price, 'article' => $article, 'weight' => '', 'count' => $count, 'options' => array( 'color' => $color, 'size' => $size ) );А затем вызвать событие $modification = $modx->call('msopModification', 'saveProductModification', array(&$modx, $rid, $modification));Окей, все сделал, но почему-то модификации не создались. Вот что попадает во входные переменные [mSyncOnProductOffers]int(162)/*это $rid*/ array(5) {/*а это $modification*/ ["price"]=> string(6) "675.00" ["article"]=> int(2200000076250) ["weight"]=> string(0) "" ["count"]=> int(2) ["options"]=> array(2) { ["color"]=> string(12) "черный" ["size"]=> string(1) "M" } } Вопросы / Импорт торговых предложений из 1С? 23 0 1
19 сентября 2017, 06:59 Только что попробовал, к сожалению без этого куска совсем не запустилось, не заполнились необходимые свойства и модификации было не из чего создавать… Вопросы / Импорт торговых предложений из 1С? 23 0 1
18 сентября 2017, 05:11 Плагин вешаем на событие «mSyncOnProductOffers». Вопросы / Импорт торговых предложений из 1С? 23 0 1
18 сентября 2017, 04:59 Все верно, пока есть не совсем аккуратная, но все же рабочая версия плагина. Из необходимого, чтобы в системе не было переменных на русском при обработке их переводим, дабы создаем из необходимых данных массив с которым в последствии работаем. В конкретном случае обрабатываем торговые предложения, у которых есть несколько типов цен и пара характеристик, торговые предложения складываем как модификации из компонента msOptionPrise2. <?php if ($modx->event->name == 'mSyncOnProductOffers') { $object=$xml->ХарактеристикиТовара; $array = array(); $trans = array( "а"=>"a", "б"=>"b", "в"=>"v", "г"=>"g", "д"=>"d", "е"=>"e", "ё"=>"yo", "ж"=>"j", "з"=>"z", "и"=>"i", "й"=>"i", "к"=>"k", "л"=>"l", "м"=>"m", "н"=>"n", "о"=>"o", "п"=>"p", "р"=>"r", "с"=>"s", "т"=>"t", "у"=>"y", "ф"=>"f", "х"=>"h", "ц"=>"c", "ч"=>"ch", "ш"=>"sh", "щ"=>"sh", "ы"=>"i", "э"=>"e", "ю"=>"u", "я"=>"ya", "А"=>"A", "Б"=>"B", "В"=>"V", "Г"=>"G", "Д"=>"D", "Е"=>"E", "Ё"=>"Yo", "Ж"=>"J", "З"=>"Z", "И"=>"I", "Й"=>"I", "К"=>"K", "Л"=>"L", "М"=>"M", "Н"=>"N", "О"=>"O", "П"=>"P", "Р"=>"R", "С"=>"S", "Т"=>"T", "У"=>"Y", "Ф"=>"F", "Х"=>"H", "Ц"=>"C", "Ч"=>"Ch", "Ш"=>"Sh", "Щ"=>"Sh", "Ы"=>"I", "Э"=>"E", "Ю"=>"U", "Я"=>"Ya", "ь"=>"", "Ь"=>"", "ъ"=>"", "Ъ"=>"" ); foreach( $object as $element) { foreach($element as $item){ $name=strtr(addslashes((string)$item->Наименование), $trans); $value=addslashes((string)$item->Значение); $array[$name] = $value; } } $prices=$xml->Цены; foreach( $prices as $prices_element) { foreach($prices_element as $price_item){ $price_type=addslashes((string)$price_item->ИдТипаЦены); $price_value=addslashes((string)$price_item->ЦенаЗаЕдиницу); $array[prices][$price_type] = $price_value; } } $id=addslashes((int)$resource->id); $array[id]=intval($id); $modx->log(4,var_dump($array)); if(isset($array['Obhvat'])){ $size=$array['Razmer']."/".$array['Obhvat']; } else{ $size=$array['Razmer']; } if(isset($array['Cvet'])){ $color=$array['Cvet']; } /*Тут сохраняется необходимая цена,т.к. присутствуют 3 типа цен(розница,акция и закупочная), используем только розницу и акцию, далее в зависимости от наличия цены по акции, если она есть, то отправляем ее в текущую цену, а розницу в старую цену.*/ if(isset($array[prices]["f282d7ca-2726-11e3-a84f-0002a54e8623"])){ $price = $array[prices]["f282d7ca-2726-11e3-a84f-0002a54e8623"]; $old_price = $array[prices]["f282d7c9-2726-11e3-a84f-0002a54e8623"]; } else{ $price = $array[prices]["f282d7c9-2726-11e3-a84f-0002a54e8623"]; } $rid = $array[id]; $mid=intval(addslashes((string)$xml->Штрихкод)); $count=intval(addslashes((string)$xml->Количество)); $article = $mid; /* опции модификации, тут вручную собираем нужные характеристики товара(опции) */ $options = array( 'color' => $color, 'size' => $size ); $msoptionsprice = $modx->getService('msoptionsprice'); $msoptionsprice->initialize('web'); /* создаем опции продукта */ $options = $msoptionsprice->setProductOptions($rid, $options); /* создаем модификацию */ if((isset($old_price))&&($old_price!=NULL)){ $modification = array( 'price' => $price, 'old_price' => $old_price, 'article' => $article, 'weight' => '', 'count' => $count, 'options' => array( 'color' => $color, 'size' => $size ) ); } else{ $modification = array( 'price' => $price, 'article' => $article, 'weight' => '', 'count' => $count, 'options' => array( 'color' => $color, 'size' => $size ) ); } /* создаем опции модификации */ $modification = $modx->call('msopModification', 'saveProductModification', array(&$modx, $rid, $modification)); } return; Вопросы / Импорт торговых предложений из 1С? 23 0
15 сентября 2017, 10:36 Уже не актуально. Сделал сам. Вопросы / Импорт торговых предложений из 1С? 23 0 1
15 сентября 2017, 09:36 Сделал аналогично, не сработало. И ничего не написало. if(isset($array['Obhvat'])){ $size=$array['Razmer']."/".$array['Obhvat']; } else{ $size=$array['Razmer']; } if(isset($array['Cvet'])){ $color=$array['Cvet']; } if(isset($array[prices]["f282d7ca-2726-11e3-a84f-0002a54e8623"])){ $price = $array[prices]["f282d7ca-2726-11e3-a84f-0002a54e8623"]; $old_price = $array[prices]["f282d7c9-2726-11e3-a84f-0002a54e8623"]; } else{ $price = $array[prices]["f282d7c9-2726-11e3-a84f-0002a54e8623"]; } $rid = $array[id]; $mid=intval(addslashes((string)$xml->Штрихкод)); $count=intval(addslashes((string)$xml->Количество)); $article = $mid; /* опции модификации */ $options = array( 'color' => $color, 'size' => $size ); $msoptionsprice = $modx->getService('msoptionsprice'); $msoptionsprice->initialize('web'); /* создаем опции продукта */ //$options = $msoptionsprice->setProductOptions($rid, $options); /* создаем модификацию */ if((isset($old_price))&&($old_price!=NULL)){ $modification = array( 'price' => $price, 'old_price' => $old_price, 'article' => $article, 'weight' => '', 'count' => $count, 'options' => array( 'color' => $color, 'size' => $size ) ); } else{ $modification = array( 'price' => $price, 'article' => $article, 'weight' => '', 'count' => $count, 'options' => array( 'color' => $color, 'size' => $size ) ); } /* создаем опции модификации */ $modification = $modx->call('msopModification', 'saveProductModification', array(&$modx, $rid, $modification)); Новые дополнения и их версии / [msOptionsPrice2] - Модификации продукта. 375 0 1
15 сентября 2017, 08:38 Добрый день, попытался добавить опции товара по инструкции выше и что-то пошло не так. Создается модификация, но у нее нет свойств. Пытаюсь добавить еще одну вручную, а у нее уже есть 2 опции и другие выбрать не могу, удаляю одну из модификации и на ее месте появляется новое(такое же свойство) но с другим значением… $rid = $array[id]; $mid=intval(addslashes((string)$xml->Штрихкод)); $count=intval(addslashes((string)$xml->Количество)); $article = $mid; /* опции модификации */ $options = array( 'color' => $color, 'size' => $size ); $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 = $msoptionsprice->setProductOptions($rid, $options); /* создаем опции модификации */ $modx->call('msopModificationOption', 'saveOptions',array(&$modx, $mid, $rid, $options)); /* создаем модификацию */ if((isset($old_price))&&($old_price!=NULL)){ $modification = array( 'rid' => $rid, 'type' => 1, 'price' => $price, 'old_price' => $old_price, 'article' => $article, 'weight' => '', 'count' => $count, 'active' => 1 ); } else{ $modification = array( 'rid' => $rid, 'type' => 1, 'price' => $price, 'article' => $article, 'weight' => '', 'count' => $count, 'active' => 1 ); } $response = $modx->runProcessor('modification/create', $modification, array( 'processors_path' => MODX_CORE_PATH.'components/msoptionsprice/processors/mgr/' )); if ($response->isError()) {В итоге в консоле пишет что цена должна быть уникальной… Array ( [success] => [message] => [total] => 1 [errors] => Array ( [0] => Array ( [id] => price [msg] => Это поле должно быть уникально ) ) [object] => Array ( ) )Да вообще все сломалось и не получается создать модификацию) Новые дополнения и их версии / [msOptionsPrice2] - Модификации продукта. 375 0 1
15 сентября 2017, 06:17 А не подскажите, вот почти со всем разобрался, единственное, не могу обновить цвета и размеры у товаров, на сколько я понял, они хранятся не так как все остальные(вес, цена)? На данный момент имею вот это. <?php if ($modx->event->name == 'mSyncOnProductOffers') { $object=$xml->ХарактеристикиТовара; $array = array(); foreach( $object as $element) { foreach($element as $item){ $name=addslashes((string)$item->Наименование); $value=addslashes((string)$item->Значение); $array[$name] = $value; } } $id=addslashes((int)$resource->id); $array[id]=intval($id); $modx->log(4,var_dump($array)); $data = $modx->getObject('msProduct', $array[id]); if(isset($array[Обхват])){ $size=$array[Размер]."/".$array[Обхват]; $data->set('size',$size); } else{ $size=$array[Размер]; $data->set('size',$size); } if(isset($array[Цвет])){ $data->set('color',$array[Цвет]); } $data->set('weight', 500); $data->save(); $vendor = $data->get('Vendor'); } return; Как сохранять и получать свойства типа цветов, размеров и подобных? Вопросы / Импорт торговых предложений из 1С? 23 0 1
14 сентября 2017, 13:46 Вот теперь чувствую себя контент менеджером… Спасибо! Вопросы / Импорт торговых предложений из 1С? 23 0 1
Где можно править тексты и заголовки писем? «Управление словарями» находится в панели администратора по пути: меню Система (иконка в виде шестеренки) -> Управление словарями.
mxBoard: канбан-доска для команд, людей и ИИ-агентов в MODX 3 Токены для ИИ-агентов, чтобы они могли работать с доской. Подробнее написал тут Баг проверю и постараюсь исправить.
Плагин EnvBadge: визуальный индикатор окружения в админке MODX3 Лучше автоматический ci/cd настроить и не править прод напрямую. Это самый безопасный вариант. Другое дело, что далеко не каждый владелец сайта и далеко не каждый сайт готовы в авт...
[videoGallery] Видео галерея YouTube, Vimeo Невозможно установить пакет с подписью: videogallery-1.4.0-beta Ошибка установки Error в /core/packages/videogallery-1.4.0-beta/modCategory/7fc931a7772edc9752c16e9c41eb5e52.reso...
Релиз miniShop2 ver. 4.4.1 & 4.4.2 Подскажите пожалуйста, может я что-то не знаю или упустил. Но есть ли решение по глюку с radio? Указываешь свое radio c одинаковым name и в результате при переключении получаешь вс...
MaxNotify Обновление компонента 1.3.0-pl (22.07.2026) — добавлено автоматическое получение полей через msOrder->toArray(); — массивы и объекты безопасно пропускаются; — стандартные...
MyFavorites MyFavorites — 3.0.0-beta Первая версия для MODX Revolution 3.x — компонент полностью переписан с нуля (PHP >= 8.4, namespaced-ядро MODX 3, PSR-4, сервис-ориентированная архит...
-В транслит перегоняю дабы оставить кириллические названия переменных от 1-с там где они есть и не плодить их дальше(хотя по всем данным, можно и кириллицу юзать без проблем, но не будем холиварить).
-По поводу того, что цены в это время где-то в сессии лежат в душе не чаял, если буду оптимизировать сей продукт учту.
-Тут есть грешок, исправил)
А затем вызвать событие
Окей, все сделал, но почему-то модификации не создались.
Вот что попадает во входные переменные
Из необходимого, чтобы в системе не было переменных на русском при обработке их переводим, дабы создаем из необходимых данных массив с которым в последствии работаем. В конкретном случае обрабатываем торговые предложения, у которых есть несколько типов цен и пара характеристик, торговые предложения складываем как модификации из компонента msOptionPrise2.
В итоге в консоле пишет что цена должна быть уникальной…
Да вообще все сломалось и не получается создать модификацию)
На данный момент имею вот это.
Как сохранять и получать свойства типа цветов, размеров и подобных?