07 августа 2018, 17:31 Замените msProduct на msProductData Вопросы / Поиск по полю и переход к товару mSearch2 19 0
07 августа 2018, 16:37 Как то так. Только сделайте прежде бекапы файлов и бд. Код выполняется в console. if (!$ms2 = $modx->getService('minishop2')) return; $step = 5; if (!isset($_SESSION['Console']['completed'])) { $_SESSION['console_offset'] = 0; } $offset = isset($_SESSION['console_offset']) && $_SESSION['console_offset'] ? $_SESSION['console_offset'] : 0; $q = $modx->newQuery('msProductData'); $total = $modx->getCount('msProductData', $q); $q->limit($step, $offset); $resources = $modx->getIterator('msProductData', $q); foreach ($resources as $productData) { $c = $modx->newQuery('msProductFile'); $c->where(array( 'parent' => 0 )); $c->sortby('rank','asc'); if($files = $productData->getMany('Files',$c)){ $firstFile = reset($files); $response = $modx->runProcessor('mgr/gallery/remove', array('id' => $firstFile->id), array('processors_path' => $ms2->config['corePath'] . 'processors/') ); if($response->isError()){ echo $response->getMessage(), PHP_EOL; } } } $_SESSION['console_offset'] = $offset + $step; if ($_SESSION['console_offset'] >= $total) { $sucsess = 100; $_SESSION['Console']['completed'] = true; } else { $sucsess = round($_SESSION['console_offset'] / $total, 2) * 100; $_SESSION['Console']['completed'] = false; } for ($i=0; $i<=100; $i++) { if ($i <= $sucsess) { print '='; } else { print '_'; } } print "\n"; print $sucsess.'% ('.$_SESSION['console_offset'].')'."\n\n"; Вопросы / Удалить первое фото из галереи minishop2 всех твоаров 6 +1
03 августа 2018, 11:12 Опубликуйте контейнер и тогда не будет 404 ошибки. Вопросы / после установки tagmanager сайт не открывается 3 +1
03 августа 2018, 10:22 Вся проблема в открывающих фигурных скобках. Везде, что не является феномом, ставьте пробел после открывающей фигурной скобки и проблем не будет. Даже ignore не нужен. <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){ w[l]=w[l]||[];w[l].push({ 'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-KCWCD3M');</script> <!-- End Google Tag Manager --> Вопросы / после установки tagmanager сайт не открывается 3 +1 1
03 августа 2018, 08:50 Или так 'where' => [ 'createdby' => $_modx->user.id, 'published' => 0, ] | json_encode, Вопросы / Не работает [[!+modx.user.id]] в параметре where! 3 +1 1
31 июля 2018, 09:10 Можно сделать через fenom. Во-первых заходите в настройки TV поля во вкладку Параметры вывода. Выбираете в поле Тип вывода — Разделитель. В поле Разделитель ставите запятую. Теперь у вас будут выводиться значения через запятую. Далее в чанке вывода пишите: {set $productsCategoryArr = $_pls['tv.productsCategory'] | split} {foreach $productsCategoryArr as $category} {switch $category} {case 'Фрукты'} <div class="fruits">Фрукты</div> {case 'Овощи'} <div class="veggies">Овощи</div> {/switch} {/foreach} Вопросы / Фильтр tv chekbox 1 0 1
30 июля 2018, 13:27 Сделайте что то вроде такого. Создайте файл в /assets/components/minishop2/js/mgr/product и назовите его product.extends.js Ext.override(miniShop2.panel.Product,{ getFields: function (config) { var fields = []; var originals = MODx.panel.Resource.prototype.getFields.call(this, config); for (var i in originals) { if (!originals.hasOwnProperty(i)) { continue; } var item = originals[i]; if (item.id == 'modx-resource-header') { item.html = '<h2>' + _('ms2_product_new') + '</h2>'; } else if (item.id == 'modx-resource-tabs') { item.stateful = MODx.config['ms2_product_remember_tabs'] == 1; item.stateId = 'minishop2-product-' + config.mode + '-tabpanel'; item.stateEvents = ['tabchange']; item.collapsible = false; item.getState = function () { return {activeTab: this.items.indexOf(this.getActiveTab())}; }; var product = []; var other = []; for (var i2 in item.items) { if (!item.items.hasOwnProperty(i2)) { continue; } var tab = item.items[i2]; switch (tab.id) { case 'modx-resource-settings': tab.items.push(this.getContent(config)); product.push(tab); break; case 'modx-page-settings': tab.items = this.getProductSettings(config); product.push(tab); if(miniShop2.config['show_extra'] || miniShop2.config['show_options']) { var copositeOptions; copositeOptions = this.getProductFields(config); if (!miniShop2.config['show_extra']) { copositeOptions.items = []; } if (miniShop2.config['show_options']) { var options = this.getProductOptions(config); if (options) { copositeOptions.items = copositeOptions.items.concat([{ title: options.title, style: "margin-top:30px;" }],options.items); } } product.push(copositeOptions); } if (config.mode == 'update' && miniShop2.config['show_links']) { product.push(this.getProductLinks(config)); } if (miniShop2.config['show_categories']) { product.push(this.getProductCategories(config)); } break; default: other.push(tab); } } var tabs = [{ title: _('ms2_tab_product'), cls: 'panel-wrapper', id: 'minishop2-product-tab', items: [{ xtype: 'modx-tabs', id: 'minishop2-product-tabs', stateful: MODx.config['ms2_product_remember_tabs'] == 1, stateId: 'minishop2-product-' + config.mode + '-tabpanel-product', stateEvents: ['tabchange'], getState: function () { return {activeTab: this.items.indexOf(this.getActiveTab())}; }, deferredRender: false, items: product, resource: config.resource, border: false, listeners: {}, }] }]; item.items = tabs.concat(other); } if (item.id != 'modx-resource-content') { fields.push(item); } } return fields; }, }); Так же создайте плагин и привяжите его к событию OnDocFormPrerender <?php switch ($modx->event->name) { case 'OnDocFormPrerender': if($modx->controller->resourceArray['class_key'] == 'msProduct'){ if ($miniShop2 = $modx->getService('miniShop2')) { $modx->controller->addLastJavascript($miniShop2->config['jsUrl'].'mgr/product/product.extends.js'); } } break; } Получится как то так: Вопросы / Объединение свойств и опций товара в админ-панели 3 +3 1
27 июля 2018, 15:53 $modx->lastInsertId();php.net/manual/ru/pdo.lastinsertid.php Вопросы / Получить id добавленной записи 1 +2
12 июля 2018, 14:19 Судя по плагину (смотрите 60 строчку), выводить поля [[+user.ключ]]. А в fenom {$_pls['user.ключ']} или {'user.ключ'|placeholder}. Так же подтягиваются все поля профиля и дополнительные поля пользователя, так же с префиксом 'user.' Вопросы / Профиль пользователя ModX 23 0
09 июня 2018, 08:47 Судя по логам проблема в компоненте modxsite. Ваш КО. Вопросы / После обновления не корректно отображается сайт 2 0
31 мая 2018, 09:18 Если не ошибаюсь, у товара всегда один и тот же url, независимо от того, к каким разделам он прикреплен (кроме родного естественно). Т.е. У нас есть товар с алиасом tovar, который находится в категории с алиасом category-1. Получается товар будет доступен uri /category-1/tovar/. Прикрепляем товар еще к категории category-2. Теперь на странице category-2, при выводе списка товаров через сниппет msProducts, мы увидим tovar, но uri у него по прежнему останется /category-1/tovar/. Следовательно страница одна и та же и хлебные крошки будут всегда показывать родной раздел. Вопросы / Скрыть вкладки MiniShop2 4 0
30 мая 2018, 12:13 Системные настройки -> minishop2 -> Раздел товар. Там можно выключить/выключить отображение вкладок. Для того, чтобы убрать настройки. Настройки форм -> Создать новый профиль. Сразу ставим галочку активно. Заходим в редактирование профиля. Жмем Новый набор правил. Действие — обновить ресурс, Ограничивающее поле — class_key, Ограничивающее значение — msProduct. Заходим в редактирование нового правила. Вкладка Регионы. Убираем галочки напротив modx-page-settings, modx-page-settings-left, modx-page-settings-right. Сохраняем. На странице с товаром останется вкладка настройки, но она будет пустая. Вопросы / Скрыть вкладки MiniShop2 4 0
23 мая 2018, 08:40 Очистите папку кэша (/core/cache/) вручную через ftp Вопросы / HELP! Не пускает в админку - 500 ошибка 6 0
21 мая 2018, 15:01 Создайте плагин на событие OnManagerPageBeforeRender с следующим кодом: switch ($modx->event->name) { case 'OnManagerPageBeforeRender': if($controller->config['controller'] == "security/user") { $controller->addHTML(' <script> Ext.ComponentMgr.onAvailable("modx-panel-users", function () { this.items[1].items[1].baseParams = { action: "security/user/getList", usergroup: MODx.request["usergroup"] ? MODx.request["usergroup"] : "", sort: "id" }; }); </script> '); } break; } Вопросы / Как запомнить сортировку в админке? 3 +3 3
29 декабря 2017, 15:02 Стандартными средствами никак. Можете расширить класс mse2FiltersHandler и написать свой фильтр на нужный уровень вложенности. Вопросы / mFilter2 фильтрация по категориям 4 0
29 декабря 2017, 11:28 Есть фильтры parent:categories и parent:grandparents. Документация Вопросы / mFilter2 фильтрация по категориям 4 +1
29 декабря 2017, 09:15 Если вызов у msProducts то: &where=`{ { "Data.old_price:>":"0" "OR:Data.favorite":"1" } }` Или тоже самое с использованием fenom 'where' => '{ { "Data.old_price:>":"0" "OR:Data.favorite":"1" } }' Условия с OR нужно заключать в отдельные фигурные скобки. Вопросы / Вывод товаров с старой ценой или пометкой особый 1 0 1
Возможно ли реализовать возможность предоплаты за доставку на сайте? Так ради этого мне и нужно это все, чтобы клиент платил сразу при оформлении заказа, чтобы избавить себя от мусорных заявок (когда человек оставляет заявку, а предоплату делать не ...
Редизайн сообщества На больших экранах основной текст статьи я бы сделал 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... Да, планируется. Даже чуть больше, чем просто бонусная система)
Во-первых заходите в настройки TV поля во вкладку Параметры вывода. Выбираете в поле Тип вывода — Разделитель. В поле Разделитель ставите запятую. Теперь у вас будут выводиться значения через запятую. Далее в чанке вывода пишите:
Создайте файл в /assets/components/minishop2/js/mgr/product и назовите его product.extends.js
Так же создайте плагин и привяжите его к событию OnDocFormPrerender
Получится как то так:
Для того, чтобы убрать настройки.
Настройки форм -> Создать новый профиль. Сразу ставим галочку активно.
Заходим в редактирование профиля. Жмем Новый набор правил. Действие — обновить ресурс, Ограничивающее поле — class_key, Ограничивающее значение — msProduct.
Заходим в редактирование нового правила. Вкладка Регионы. Убираем галочки напротив modx-page-settings, modx-page-settings-left, modx-page-settings-right. Сохраняем. На странице с товаром останется вкладка настройки, но она будет пустая.
Документация
Или тоже самое с использованием fenom
Условия с OR нужно заключать в отдельные фигурные скобки.