Илья · 14 июля 2020, 13:15 Сделал так: {'!pdoNeighbors' | snippet : [ 'class' => 'modResource', 'loadModels' => 'ms2gallery', 'leftJoin' => [ 'Image' => [ 'class' => 'msResourceFile', 'on' => 'modResource.id = Image.resource_id AND Image.parent = 0 AND Image.rank = 0', ], 'Thumb' => [ 'class' => 'msResourceFile', 'on' => 'Image.id = Thumb.parent AND Thumb.path LIKE "%small%"', ] ], 'select' => [ 'modResource' => '*', 'Thumb' => 'Thumb.url as small', ], 'tplWrapper' => '@INLINE {$prev}{$next}', 'tplPrev' => '@INLINE <a href="/{$uri}"><img src="{$small}">туда</a>', 'tplNext' => '@INLINE <a href="/{$uri}"><img src="{$small}">сюда</a>', ]}В результате выводится первая миниатюра {$small} в pdoNeighbors Может кому-то будет полезно. Не дадим modxУ погибнуть!!! Вопросы / pdoNeighbors + ms2Gallery 6 0 2
Саша Туманов · 20 апреля 2020, 22:05 Вот готовое к использованию для вывода ленты юзера: <?php $cacheKey = "insta_".md5($url); if (!$pdo = $modx->getService('pdoTools')) return false; $returnCache = $modx->cacheManager->get("$cacheKey"); $data = ''; if(!$returnCache) { $doc = new DOMDocument(); libxml_use_internal_errors(true); $doc->loadHTMLFile($url); libxml_clear_errors(); $xpath = new DOMXpath($doc); $sharedData = $xpath->query("//html/body/script[1]")->item(0)->textContent; preg_match_all('/window\._sharedData = \{(.*)\};/ism', $sharedData, $matches); if (!empty($matches[1][0])) { $res = json_decode('{' . $matches[1][0] . '}', true); $media = array_slice($res['entry_data']['ProfilePage'][0]['graphql']['user']['edge_owner_to_timeline_media']['edges'], 0, $limit); if (!empty($media)) { foreach ($media as $row) { $data .= $pdo->getChunk($tpl, array( // 'image' => $row['node']['display_url'], 'thumb' => $row['node']['thumbnail_src'], // 'thumb_150' => $row['node']['thumbnail_resources'][0]['src'], 'thumb_240' => $row['node']['thumbnail_resources'][1]['src'] )); } } } $modx->cacheManager->set($cacheKey, $data, 7200*60); return $data; } return $returnCache; И вызов: {$_modx->runSnippet("@FILE snippets/parseInsta.php", [ 'url' => 'https://www.instagram.com/someuser/', 'limit' => 4, 'tpl' => '@INLINE <a href="{$thumb}" class="gallery__item"><img src="{$thumb_240}" alt=""></a>' ])} Готовые решения / Вывод фоток с Instagram по тегу или юзеру без токена 8 +1 1
Alexey Medvedev · 12 мая 2019, 12:48 modx.pro/components/14066#comment-93796 Уже обсуждалась эта проблема. Закомментируйте строчки 136-150 в файле core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php /* translate the name of the file */ $fat = $this->modx->getOption('friendly_alias_translit'); $friendly_alias_translit = (empty($fat) || $fat == 'none') ? false : true; $filename = modResource::filterPathSegment($this->modx, $pathInfo['filename']); //cleanAlias(translate) if ($friendly_alias_translit) { $filename = preg_replace('/[^A-Za-z0-9_-]/', '', $filename); // restrict segment toalphanumeric characters only } $filename = preg_replace('/-{2,}/','-',$filename); // remove double symbol "-" $filename = trim($filename, '-'); // remove first symbol "-" $newPath = strtolower($filename . '.' . $pathInfo['extension']); if ($newPath !== $file['name']) { $path = $basePath . $newPath; $source->renameObject($oldPath, $newPath); } Новые дополнения и их версии / [tinyCompressor] Автоматическая оптимизация и сжатие файлов 79 0 1
Николай · 22 марта 2019, 12:34 Я вот таким вариантом пользуюсь: <?php if( in_array($modx->event->name, ['OnManagerPageInit','OnBeforeManagerLogin']) ) { $logpath = MODX_CORE_PATH . 'cache/logs/error.log'; if( file_exists($logpath) ) { if(filesize($logpath) > 5000000) { $logcontent = file_get_contents($logpath); $filename = 'error-'. date("Y-m-d_H:i:s"); $zip = new ZipArchive(); $zip->open(MODX_CORE_PATH . 'cache/logs/'. $filename . '.zip', ZipArchive::CREATE); $zip->addFromString($filename . '.txt', $logcontent); $zip->close(); $modx->runProcessor('system/errorlog/clear'); } } } Новые дополнения и их версии / [logRotation] Ротация файла error.log (журнал ошибок MODX) 15 +5 4
Баха Волков · 11 марта 2019, 17:20 По моему совсем не с той стороны зашли, ведь нужен всего лишь функционал загрузки файлов. Вот пример метода в modx.tree.directory.js: ,uploadFiles: function(btn,e) { if (!this.uploader) { this.uploader = new MODx.util.MultiUploadDialog.Dialog({ url: MODx.config.connector_url ,base_params: { action: 'browser/file/upload' ,wctx: MODx.ctx || '' ,source: this.getSource() } ,cls: 'ext-ux-uploaddialog-dialog modx-upload-window' }); this.uploader.on('show',this.beforeUpload,this); this.uploader.on('uploadsuccess',this.uploadSuccess,this); this.uploader.on('uploaderror',this.uploadError,this); this.uploader.on('uploadfailed',this.uploadFailed,this); } this.uploader.base_params.source = this.getSource(); this.uploader.show(btn); }Нужно создать кнопку которая бы вызывала данный метод и всё. Ну не совсем всё, а остальные методы ошибки, методы которые возвращают id нужного источника и т.д., но это куда лучше чем стилизовать combo Вопросы / [extJs] Стилизовать xtype: 'modx-combo-browser' 7 0 2
Евгений Шеронов · 15 января 2019, 15:33 Настройка session_cookie_domain или session_cookie_path. В настройки контекстов можете их тоже добавить. Обычно как раз проблемы тогда, когда основной site_url(base_url) для WEB имеет какую-то вложенность, а в других контекстах нет. Поэтому настройки сессий тоже нужно править) Вопросы / pdoPage Не работает ajax пагинация по кнопке 11 +1 1
Денис · 11 декабря 2018, 19:19 Судя по исходникам просто так не выйдет. Создайте плагин и повесьте на событие OnManagerPageBeforeRender После вставьте следующий код: <?php switch ($modx->event->name) { case 'OnManagerPageBeforeRender': if($controller->config['controller'] == "mgr/orders") { if ($miniShop2 = $modx->getService('miniShop2')) { $modx->controller->addHtml('<style>.x-grid3-col-order-product-image img {width:40px;display:block;}</style>'); $modx->controller->addHtml(' <script> Ext.onReady(function(){ var originalGetColumns = miniShop2.grid.OrderProducts.prototype.getColumns; miniShop2.config["default_thumb"] = miniShop2.config["defaultThumb"]; Ext.override(miniShop2.grid.OrderProducts,{ getColumns: function () { var imgFields = [ "product_thumb", "product_image" ]; var columns = originalGetColumns.apply(this); for(var i=0; i<columns.length; i++){ if(imgFields.indexOf(columns[i]["dataIndex"]) != -1){ columns[i]["renderer"] = miniShop2.utils.renderImage; columns[i]["id"] = "order-product-image"; } } return columns; } }); }); </script> '); } } break; } Если в системной настройке ms2_order_product_fields указан product_thumb или product_image, то вы увидите уже не ссылку, а картинку. Вопросы / Вывод изображения в Заказы>Покупки (админка Minishop2) 3 +5 5
Альберт · 10 декабря 2018, 16:22 Итак, вопрос решил таким образом: 1. Создал плагин msCustomOrdersList: switch ($modx->event->name) { case 'msOnManagerCustomCssJs': if ($page != 'orders') return; $modx->controller->addLastJavascript(MODX_ASSETS_URL.'components/mscustomorderslist/default.js'); break; } 2. В файле assets/components/mscustomorderslist/default.js: Ext.ComponentMgr.onAvailable('minishop2-grid-orders', function(){ this.baseParams.action = "mgr/orders/customgetlist"; }); 3. В папке создал файл core/components/minishop2/processors/mgr/orders/customgetlist.class.php, который полностью копирует оригинальный getlist.class.php, а дальше уже идут мои изменения: название города в списке заказов, отключение кнопки «удалить» для менеджеров, разделение заказов по городам для менеджеров. Вопросы / Кастомный процессор orders/getlist в minishop2 1 +1 1
Василий Наумкин · 25 ноября 2018, 15:53 На всякий случай, тестировать можно и без создания дополнительных сниппетов. [[!msGetOrder? &id=`2404` &tpl=`tpl.msEmail.new.user` ]] Вызвать в ресурсе с пустым шаблоном: Готовые решения / [miniShop2] Как тестировать письма без оформления заказа 13 +8 4
Дмитрий · 22 июля 2018, 23:19 Да, Сергей! Вчера поставил на все сайты! Теперь думаю, как жил без этого раньше =) Кому интересно – вот инструкция: для Apache modx.pro/howto/8059 для nginx modx.pro/howto/8241#comment-57776У меня хостер в панели предлагает запаролить папку. Безопасность / Revolution 2.6.4 and Prior Two Cricital Vulnerabilities 177 +5 4
Возможно ли реализовать возможность предоплаты за доставку на сайте? У меня Робокасса, у них вроде есть docs.robokassa.ru/ru/iframe
Редизайн сообщества На больших экранах основной текст статьи я бы сделал 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... Да, планируется. Даже чуть больше, чем просто бонусная система)
В результате выводится первая миниатюра {$small} в pdoNeighbors
Может кому-то будет полезно.
Не дадим modxУ погибнуть!!!
И вызов:
Уже обсуждалась эта проблема.
Закомментируйте строчки 136-150 в файле core/components/tinycompressor/model/tinycompressor/tinycompressor.class.php
Нужно создать кнопку которая бы вызывала данный метод и
всё. Ну не совсем всё, а остальные методы ошибки, методы которые возвращают id нужного источника и т.д., но это куда лучше чем стилизовать comboВ настройки контекстов можете их тоже добавить.
Обычно как раз проблемы тогда, когда основной site_url(base_url) для WEB имеет какую-то вложенность, а в других контекстах нет. Поэтому настройки сессий тоже нужно править)
Создайте плагин и повесьте на событие OnManagerPageBeforeRender
После вставьте следующий код:
Если в системной настройке ms2_order_product_fields указан product_thumb или product_image, то вы увидите уже не ссылку, а картинку.
1. Создал плагин msCustomOrdersList:
2. В файле assets/components/mscustomorderslist/default.js:
3. В папке создал файл core/components/minishop2/processors/mgr/orders/customgetlist.class.php, который полностью копирует оригинальный getlist.class.php, а дальше уже идут мои изменения: название города в списке заказов, отключение кнопки «удалить» для менеджеров, разделение заказов по городам для менеджеров.
Вызвать в ресурсе с пустым шаблоном:
Кому интересно – вот инструкция:
- для Apache modx.pro/howto/8059
- для nginx modx.pro/howto/8241#comment-57776
У меня хостер в панели предлагает запаролить папку.