Александр Мельник · 03 ноября 2017, 17:56 Я делаю так <div class="sort-title">Сортировать по:</div> <div class="sort-item"> <a href="{$_modx->resource.id | url}?sortby=price&sortdir=DESC">убыванию </a> <i class="zmdi zmdi-long-arrow-down"></i> </div> <div class="sort-item"> <a href="{$_modx->resource.id | url}?sortby=price&sortdir=ASC">возрастанию</a> <i class="zmdi zmdi-long-arrow-up"></i> </div>В вызове сниппета, который будет выводить товары 'sortby' => $_modx->runSnippet('sortItName.php'), 'sortdir' => $_modx->runSnippet('sortItDir.php'),Ну и собственно содержание этих сниппетов sortItDir.php' <?php $request=$_GET['sortby']; switch($request) { case "price": return ("Data.price"); break; case "rating": return("rating"); break; default: return("{\"menuindex\":\"DESC\"}"); break; }sortItName.php <?php $request=$_GET['sortdir']; switch($request) { case "ASC": return("ASC"); break; case "DESC": return("DESC"); break; default: return("DESC"); break; }Таким образом к ссылкам можно прикреплять любые поля и направления в GET параметрах. Работает с перезагрузкой страницы, что можно считать минусом. А можно и плюсом, потому что сортировка без перезагрузки приводит к тому, что пагинация перестает работать. Если по умолчанию на странице 20 товаров, отсортировали и скажем товаров стало 10, то изменение пагинации требует сложной (уточню — для меня сложной работы с хешем), а так все ок. Вопросы / Как сделать сортировку товаров по цене, названию? 20 0 3
Dolce · 16 октября 2017, 10:33 Точно, не удалил лишений код — как следствие и скопировал не то. Вот для селектов: $(document).ready(function() { $(document).on('change', '#mse2_sort', function() { var selected = $(this).find('option:selected'); var sort = selected.data('sort'); sort += mse2Config.method_delimeter + selected.val(); mse2Config.sort = sort; mSearch2.submit(); }); }); Вопросы / Шаблон сортировки для mFilter2 21 +2 5
Futuris · 14 июля 2017, 18:48 В чанке tpl.msProducts.row присутствует такая строчка {'!AddComparison' | snippet : ['list_id' => 18, 'id' => $id, 'minItems' => 1]}. Но это дефолтный код MS2 и я не пользуюсь AddComparison. К тому же на предыдущем поддомене все работало. Странно! Вопросы / Не загружаются некоторые страницы MODx + MS2 4 0 1
Klike · 12 июля 2017, 11:44 Код сниппета: <?php if (empty($options) || $options == 0) return; $price = preg_replace('/\s+/', '' , $input); $old_price = preg_replace('/\s+/', '' , $options); $discount = round(100 - ($price * 100 / $old_price) , 2); return $discount; Вызывать либо с помощью Fenom: {$price|discount:$old_price} Либо стандартным синтаксисом: [[+old_price:gt=`0`:then=`[[+price:discount=`[[+old_price]]`]]`]] Вопросы / Какой компонент лучше подходит? 6 +2 1
Алексей П · 09 июля 2017, 16:07 Проблема была в том, что сессии были разные для поддомена и домена. Решение В системной настройке session_cookie_domain указал .site.com Новые дополнения и их версии / [localizator] Мультиязычность, СЕО, автоперевод... 353 0 1
but1head · 23 мая 2017, 18:29 Локализатор грузит свои словари вот так: $modx->lexicon->load($cultureKey . ':localizator:site');Следовательно вам надо (возможно синтаксис не правильный) {$_modx->lexicon->load(('cultureKey' | option) ~ ':minishop2:default')}или в плагине\сниппете $modx->lexicon->load($modx->cultureKey . ':minishop2:default');А вообще должно было «само», но видимо минишоп грузит словари раньше чем локализатор подменит язык. Новые дополнения и их версии / [localizator] Мультиязычность, СЕО, автоперевод... 353 +1 1
Володя · 11 мая 2017, 13:29 Спасибо за оперативные исправления!пожалуйста! Подскажите, можно ли назначить в модификациях цену по-умолчанию, чтобы она выводилась в списке продукции (в категории магазина) через сниппет msProduct? можно попробовать плагином gist.github.com/vgrish/85b5d8e9e3a159975b330cc90d63f3ca Новые дополнения и их версии / [msOptionsPrice2] - Модификации продукта. 375 0 1
Володя · 11 апреля 2017, 07:26 примерно так можно s6200.h3.modhost.pro/katalog/11999.html joxi.ru/E2pMqLGS9YgaRA {foreach $options as $name => $values} <div class="form-group"> <label class="col-md-2 control-label" for="option_{$name}">{('ms2_product_' ~ $name) | lexicon}:</label> <div class="col-md-10"> <select name="options[{$name}]" class="input-sm form-control" id="option_{$name}"> {foreach $values as $value} <option value="{$value}">{$value}</option> {/foreach} </select> </div> </div> <div class="form-group form-inline embroidery_parent" style="display:none;"> <label class="col-md-2 control-label" for="option_{$name}"></label> <div class="col-md-10"> <input type="text" name="options[embroidery_text]" placeholder="Текст вышивки" class="input-sm form-control" value=""> </div> </div> {/foreach} <script> $(document).on('change', '.ms2_form', function (e) { var embroidery = $(this).find('select[name="options[embroidery]"]'); var embroidery_text = $(this).find('input[name="options[embroidery_text]"]'); if (embroidery.val() == 'да') { embroidery_text.closest('.embroidery_parent').show(); } else { embroidery_text.closest('.embroidery_parent').hide(); embroidery_text.val(''); } }); </script> Вопросы / Опция товара minishop2 с дополнительным полем 7 +2 5
Володя · 07 декабря 2016, 21:44 Если я вас правильно понял то можно попробовать так. Плагин на событие 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); } } } } }); Новые дополнения и их версии / [msOptionsPrice2] - Модификации продукта. 375 0 1
Сергей Росоловский · 10 ноября 2016, 20:56 Ага, велосипед я тот сделал так. Для категории товара создал tv переменную optCount — в которой количество товара после которого уже идет оптовая цена. Теперь для каждой категории я могу проставить количество которое уже считается оптовым. Оптовую цену решил прописать в old_price. Далее в core/components/minishop2/model/minishop2/mscarthandler.class.php в функциях add() и change() приделал маленький самокатик (например в функции add): $product1 = $modx->getObject('modResource',$id); $optcount = $product1->getTVValue('optCount'); $price = $product->getPrice(); $old_price = $product1->get('old_price'); $weight = $product->getWeight(); $count = $response['data']['count']; $options = $response['data']['options']; if ($count >= $optcount && $old_price > 0) { $price = $old_price; } Вероятно оно все неправильно, надо все не так, если покопаться в исходниках минишопа можно сделать все правильно. Но у меня работает и заказчик не жаловался. Вот и все, дальше копаться не хотелось. Вопросы / 2 цены для товара miniShop2 29 0 1
UiCMPGenerator дополнение для создания пакетов Ближе к сентябрю, основная загвоздка это создание нормальной документации и видео обзора, а так пакет как бы уже готов
Checkbox для модального окна Они не отключены, они платные, чтобы писали только те, кому действительно очень надо. Когда бесплатно люди начинают думать, что я им должен.
[SendIt 2.6.0] Анализ поведения пользователя для защиты от спама (невидимая капча)... Здравствуйте. Делаю личный кабинет на Sendit и со сбросом пароля возникли проблемы. Можете подсказать, в чем ошибка? Список вопросов в одноименном разделе на modx.pro пока пуст, и,...
Minishop + честный знак (продажа маркированной продукции) В нашем случае мы решили убрать всю логику по маркировке сайта.
MiniShop3 - Не выводятся товары дополнительных категорий @SYAN ваша указанная проблема исправлена еще до версии 1.2.3 @Павлик Мышкин завел: github.com/modx-pro/MiniShop3/issues/480 github.com/modx-pro/MiniShop3/issues/481Исправим в б...
MobileDetect 2.0.0-pl функция "планшеты как стандартные браузеры не работает" в 2.1.0-pl баг исправлен
msImportExport не сохраняет родителя по умолчанию Компонент не понимает кирилические домены при загрузку фото. пример: Error download. Url : https://антаресдвери.рф/upload/iblock/a50/a50b2ef45305a3c18f6e298f1e134880.jpg. Message...
В вызове сниппета, который будет выводить товары
Ну и собственно содержание этих сниппетов
sortItDir.php'
sortItName.php
Таким образом к ссылкам можно прикреплять любые поля и направления в GET параметрах.
Работает с перезагрузкой страницы, что можно считать минусом. А можно и плюсом, потому что сортировка без перезагрузки приводит к тому, что пагинация перестает работать. Если по умолчанию на странице 20 товаров, отсортировали и скажем товаров стало 10, то изменение пагинации требует сложной (уточню — для меня сложной работы с хешем), а так все ок.
Вызывать либо с помощью Fenom:
Либо стандартным синтаксисом:
Решение
В системной настройке session_cookie_domain указал .site.com
Следовательно вам надо (возможно синтаксис не правильный)
или в плагине\сниппете
А вообще должно было «само», но видимо минишоп грузит словари раньше чем локализатор подменит язык.
можно попробовать плагином
gist.github.com/vgrish/85b5d8e9e3a159975b330cc90d63f3ca
s6200.h3.modhost.pro/katalog/11999.html
joxi.ru/E2pMqLGS9YgaRA
Плагин на событие msopOnGetModificationById примерно так
далее событие msoptionsprice_product_action
Для категории товара создал tv переменную optCount — в которой количество товара после которого уже идет оптовая цена. Теперь для каждой категории я могу проставить количество которое уже считается оптовым.
Оптовую цену решил прописать в old_price.
Далее в core/components/minishop2/model/minishop2/mscarthandler.class.php в функциях add() и change() приделал маленький самокатик (например в функции add):
Вероятно оно все неправильно, надо все не так, если покопаться в исходниках минишопа можно сделать все правильно. Но у меня работает и заказчик не жаловался. Вот и все, дальше копаться не хотелось.