13 июля 2019, 13:41 Если связи с разработчиком нет, то единственный вариант — самостоятельно искать эту карту в чанках, если у вас нет опыта, то в любом случае вам требуется разработчик. Можете связаться со мной по контактам в профиле — помогу. Вопросы / Редактирование карты Яндекс 1 0
13 ноября 2018, 00:31 Решил данную проблему путем плагина cityFields, в заголовках и метатегах использую плейсхолдер от плагина, вида «Купить товар в регионе [[!+cf.region]] по доступной цене». Вопросы / Выбор города и поддомены 2 0
24 октября 2018, 13:37 Если решение кому пригодится: Создаем сниппет msProductOptionsEx <?php /** @var modX $modx */ /** @var array $scriptProperties */ $tpl = $modx->getOption('tpl', $scriptProperties, 'tpl.msProductOptions'); if (!empty($input) && empty($product)) { $product = $input; } $emptyGroupName = $modx->getOption('emptyGroupName', $scriptProperties, 'Empty'); $groupSortBy = $modx->getOption('groupSortBy', $scriptProperties, 'rank'); $product = !empty($product) && $product != $modx->resource->id ? $modx->getObject('msProduct', $product) : $modx->resource; if (!($product instanceof msProduct)) { return "[msProductOptions] The resource with id = {$product->id} is not instance of msProduct."; } $ignoreOptions = array_map('trim', explode(',', $modx->getOption('ignoreOptions', $scriptProperties, ''))); $onlyOptions = array_map('trim', explode(',', $modx->getOption('onlyOptions', $scriptProperties, ''))); $groups = !empty($groups) ? array_map('trim', explode(',', $groups)) : array(); /** @var msProductData $data */ if ($data = $product->getOne('Data')) { $optionKeys = $data->getOptionKeys(); } if (empty($optionKeys)) { return ''; } $productData = $product->loadOptions(); $optionCategories = array(); $categoryIds = array(); foreach ($optionKeys as $key) { // Filter by key if (!empty($onlyOptions) && $onlyOptions[0] != '' && !in_array($key, $onlyOptions)) { continue; } elseif (in_array($key, $ignoreOptions)) { continue; } $option = array(); foreach ($productData as $dataKey => $dataValue) { $dataKey = explode('.', $dataKey); if ($dataKey[0] == $key && (count($dataKey) > 1)) { $option[$dataKey[1]] = $dataValue; } } $option['value'] = $product->get($key); // Filter by groups $skip = !empty($groups) && !in_array($option['category'], $groups) && !in_array($option['category_name'], $groups); if ($skip || empty($option['value'])) { continue; } $categoryId = $option['category']; if (empty($categoryId)) { $categoryId = 0; } if (!isset($optionCategories[$categoryId])) { $optionCategories[$categoryId] = array( 'name' => $categoryId ? $option['category_name'] : $emptyGroupName, 'id' => $option['category'], 'rank' => $categoryId ? $option['category'] : PHP_INT_MAX, 'idx' => count($optionCategories), 'options' => array() ); $categoryIds[] = $categoryId; } $optionCategories[$categoryId]['options'][$key] = $option; } /** @var pdoFetch $pdoFetch */ $pdoFetch = $modx->getService('pdoFetch'); $categories = $pdoFetch->getCollection('modCategory', array('id:IN' => $categoryIds)); switch ($groupSortBy) { case 'rank': foreach ($categories as $category) { $categoryId = $category['id']; if (!isset($optionCategories[$categoryId])) { continue; } $optionCategories[$categoryId]['rank'] = intval($category['rank']); } uasort($optionCategories, function($a, $b) { if ($a['rank'] == $b['rank']) { return 0; } return ($a['rank'] < $b['rank']) ? -1 : 1; }); break; case 'name': uasort($optionCategories, function($a, $b) { return strcmp($a['name'], $b['name']); }); break; case 'idx': uasort($optionCategories, function($a, $b) { if ($a['idx'] == $b['idx']) { return 0; } return ($a['idx'] < $b['idx']) ? -1 : 1; }); break; } return $pdoFetch->getChunk($tpl, array( 'groups' => $optionCategories, )); Вызываем сниппет, где требуется вывести свойства товаров по группам: [[!msProductOptionsEx? &tpl=`tpl.msProductOptionsEx` &groupEmptyName=`Без группы` &groupSortBy=`rank` ]] Чанк tpl.msProductOptionsEx: {foreach $groups as $group} <div class="group"> <h4>{$group.name}</h4> <div class="group-options"> {foreach $group.options as $option} <div class="form-group"> <label class="col-md-2 control-label">{$option.caption}:</label> <div class="col-md-10 form-control-static"> {if $option.value is array} {$option.value | join : ', '} {else} {$option.value} {/if} </div> </div> {/foreach} </div> </div> {/foreach} Вопросы / Вывести опции по категориям 3 0
23 октября 2018, 14:49 Пока нет, есть вариант делать вывод через MIGX, но в таком случае это запарно, т.к придется заполнять 2 раза одно и тоже, чтоб и в фильтре были значения и визуально в карточке товара. Как вариант можно использовать платный компонент — msextrafields, как попробую — отпишу. Вопросы / Вывести опции по категориям 3 0
19 октября 2018, 13:58 Здравствуйте! Стоит задача реализовать уведомление об добавлении в избранное, как это можно сделать? После добавления, должно выводится модальное окно, с текстом, что Товар 32 был добавлен в избранное. Пока реализовал на jQuery, но есть ли предусмотренный вариант или как лучше это сделать? Новые дополнения и их версии / [msFavorites] - апгрейд компонента. 58 0
15 октября 2018, 18:01 Спасибо, теперь работает как нужно. А не подскажите, у меня точно такая же проблема и с другими сниппетами, такими как: msfavorites, то есть при клике на кнопку «Добавить в избранное» я вызываю ajax запрос и в запросе запускается сниппет msProducts, из-за чего происходит конфликт и как решать подобные проблемы с другими сниппетами? Новые дополнения и их версии / [msMCD] Динамическое обновление мини-корзины miniShop2 50 0
15 октября 2018, 15:18 Здравствуйте! Столкнулся с проблемой, у меня в JS есть код: miniShop2.Callbacks.Cart.add.response.success = function(ol) { Который, в случае успешного добавления в корзину вызывает Ajax запрос и в нем запускается сниппет — $output = $modx->runSnippet('msProducts',$params); И выводит товар, который был добавлен в корзину. Но в таком случае он конфликтует с msMCD, товары в мини корзине обновляются только после перезагрузки страницы, в чем может проблема? Новые дополнения и их версии / [msMCD] Динамическое обновление мини-корзины miniShop2 50 0
15 июня 2017, 21:59 Можно поподробней. В настройках контекста не вижу решение проблемы. Вопросы / Как побороть кеш 3 0
Возможно ли реализовать возможность предоплаты за доставку на сайте? Так ради этого мне и нужно это все, чтобы клиент платил сразу при оформлении заказа, чтобы избавить себя от мусорных заявок (когда человек оставляет заявку, а предоплату делать не ...
Редизайн сообщества На больших экранах основной текст статьи я бы сделал 18 px. Да и текст комментариев можно таким сделать. Для меня лично 16 — мелковато на больших экранах (в комментариях вообще 15 ...
MiniShop3 1.11.0 при клике на radio идет пересчет итоговой суммы в orderUI, в зависимости от способов(оплаты доставки) я так поняла. попробуй код запуска события поставить ниже чем orderUI, после
ImageOptimizer - WebP/AVIF и responsive <picture> для MODX 3 Дополнение доступно modstore.pro/packages/photos-and-files/imageoptimizer
Localizator3 для MODX 3: перевод полей и TV без отдельного context на язык, Vue 3 + PrimeV... Добавил localizator3_default_language
msInShopNotify Начиная с версии 3.0.0-beta добавлена поддержка MiniShop3 Минимальные требования: PHP 8.4 MODX 3.2 MiniShop3
MaxNotify Обновление 1.2.0-pl (03.07.2026) — добавлены уведомления о заявках FormIt через hook-сниппет `maxNotifyFormIt`; — добавлены уведомления о заявках SendIt через hook-...
[msBonus2] 1.3.0 Бонус-коды, уведомления о сгорании и совместимость с msMultiCurre... Да, планируется. Даже чуть больше, чем просто бонусная система)
Создаем сниппет msProductOptionsEx
Вызываем сниппет, где требуется вывести свойства товаров по группам:
Чанк tpl.msProductOptionsEx:
Как вариант можно использовать платный компонент — msextrafields, как попробую — отпишу.
Стоит задача реализовать уведомление об добавлении в избранное, как это можно сделать? После добавления, должно выводится модальное окно, с текстом, что Товар 32 был добавлен в избранное. Пока реализовал на jQuery, но есть ли предусмотренный вариант или как лучше это сделать?
Столкнулся с проблемой, у меня в JS есть код:
miniShop2.Callbacks.Cart.add.response.success = function(ol) {
Который, в случае успешного добавления в корзину вызывает Ajax запрос и в нем запускается сниппет — $output = $modx->runSnippet('msProducts',$params);
И выводит товар, который был добавлен в корзину.
Но в таком случае он конфликтует с msMCD, товары в мини корзине обновляются только после перезагрузки страницы, в чем может проблема?