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
Где можно править тексты и заголовки писем? «Управление словарями» находится в панели администратора по пути: меню Система (иконка в виде шестеренки) -> Управление словарями.
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, сервис-ориентированная архит...
Создаем сниппет msProductOptionsEx
Вызываем сниппет, где требуется вывести свойства товаров по группам:
Чанк tpl.msProductOptionsEx:
Как вариант можно использовать платный компонент — msextrafields, как попробую — отпишу.
Стоит задача реализовать уведомление об добавлении в избранное, как это можно сделать? После добавления, должно выводится модальное окно, с текстом, что Товар 32 был добавлен в избранное. Пока реализовал на jQuery, но есть ли предусмотренный вариант или как лучше это сделать?
Столкнулся с проблемой, у меня в JS есть код:
miniShop2.Callbacks.Cart.add.response.success = function(ol) {
Который, в случае успешного добавления в корзину вызывает Ajax запрос и в нем запускается сниппет — $output = $modx->runSnippet('msProducts',$params);
И выводит товар, который был добавлен в корзину.
Но в таком случае он конфликтует с msMCD, товары в мини корзине обновляются только после перезагрузки страницы, в чем может проблема?