Максим Кузнецов · 17 марта 2016, 12:45 [[!pdoResources? &parents=`...` ... &leftJoin=`{ "Parent":{ "class": "modResource", "alias": "Parent", "on":"Parent.id = modResource.parent" } }` &sortby=`{"Parent.menuindex":"desc", "menuindex":"desc"}` ]] Вопросы / pdoResources + sortby + showLog 7 0 2
Володя · 29 февраля 2016, 09:15 Ну если вы используете сниппет, то плагин тут и не отработает. Скорее всего у вас обработчик на событие OnPageNotFound и в нем же вы посылаете снова на sendErrorPage. Смените событие на OnHandleRequest и думаю все будет ок. Новые дополнения и их версии / [VirtualPage] - Виртуальные страницы. 183 0 1
Максим Кузнецов · 27 февраля 2016, 00:18 — Заходите в phpmyadmin. — Выбираете таблицу modx_site_content — Переходите в закладку «структура» — Внизу открывшегося окна нажимаете ОК (Добавить 1 поле в конец таблицы) Имя: ticket_rating Тип: int Длина/значение: 10 По умолчанию: Как определено (0) Null: галочка (сохраняем) Таким способом мы расширили дефолтную таблицу MODX'a со списком ресурсов. Далее: — Создаем плагин (допустим, customTicketRating) со следующим содержанием: <?php switch ($modx->event->name) { case 'OnMODXInit': $modx->loadClass('modResource'); $modx->map['modResource']['fields']['ticket_rating'] = 0; $modx->map['modResource']['fieldMeta']['ticket_rating'] = array( 'dbtype' => 'int', 'precision' => 10, 'attributes' => '', 'phptype' => 'int', 'null' => true, 'default' => 0, ); break; case 'OnTicketVote': if ($object->class == 'Ticket') { if ($ticket = $modx->getObject('Ticket', $object->id)) { $properties = $ticket->getProperties('tickets'); $rating = !empty($properties['rating']) ? $properties['rating'] : 0; $ticket->set('ticket_rating', $rating + $object->value); $ticket->save(); } } break; }и включаем его на события OnTicketVote и OnMODXInit. Теперь наше новое поле воспринимается модксом и изменяется после каждого голосования за любой ресурс. Теперь осталось только вызвать сниппет с нужным условием: [[!pdoPage? &element=`getTickets` &where=`{"ticket_rating:>": 1}` ]] Важно: рейтинг начнет вычисляться только с последующих голосований за тикеты. Пошаговые инструкции / Вывести только тикеты с рейтингом больше нуля 23 +2 2
Василий Наумкин · 24 февраля 2016, 22:05 Прикольно! Ну и выкидывай нафиг этот default: <img src="{$_pls['270x235'] ?: '/assets/components/minishop2/img/web/ms2_small.jpg'}" alt="{$pagetitle | Jevix}" />Jevix нужно будет указать как модификатор Fenom. Вопросы / Проблемы после обновления на MODx 2.4.3 9 +3 2
Павел Гвоздь · 27 января 2016, 10:30 1) Создаёшь файл core/components/minishop2/custom/order/myorderhandler.class.php с содержимым: <?php class myOrderHandler extends msOrderHandler { public function submit($data = array()) { $min_price_order = $this->modx->getOption('ms2_minimum_price_order'); $cart_status = $this->ms2->cart->status(); $currency = $this->modx->lexicon('ms2_frontend_currency'); if( $cart_status['total_cost'] < $min_price_order ) { return $this->error( 'ms2_order_err_total_price', array(), array('price'=>$min_price_order, 'currency'=>$currency) ); } return parent::submit($data); } } 2) Создаёшь настройку (желательно в namespace «minishop2») ms2_minimum_price_order со значением суммы заказа, например: 50000. 3) В настройке ms2_order_handler_class указываешь только что созданный класс обработчик, вот так: myOrderHandler. Вроде всё… Вопросы / Минимальный заказ 17 0 5
Сергей Шлоков · 12 января 2016, 18:35 Думаю, так должно работать // Процессор очистки корзины $response = $modx->runProcessor('resource/emptyrecyclebin'); if ($response->isError()) $response->getMessage();Выполнять в специальном сниппете или Console. Ну а лучше конечно разобраться с ошибкой очистки через корзину. Вопросы / Не удаляются удаленные ресурсы 27 +1 2
Василий Столейков · 12 января 2016, 12:24 Тоже волновал подобный вопрос, но немного другого характера. Нужно удалять удалённые ресурсы вместе со всеми связями (тв-шками) не из админки. Это возможно как-то сделать? Или прийдётся удалять с двух таблиц? Примерно так в цикле помеченных на удаление: DELETE FROM modx_site_tmplvar_contentvalues WHERE contentid = $id DELETE FROM modx_site_content WHERE deleted = 1 Вопросы / Не удаляются удаленные ресурсы 27 0 1
Василий Наумкин · 12 января 2016, 10:32 DELETE FROM modx_site_content WHERE deleted = 1 Вопросы / Не удаляются удаленные ресурсы 27 +1 1
Василий Наумкин · 10 декабря 2015, 07:26 У меня на сайте, например, бывают платные разделы. Чтобы добавить пользователю доступ в них при оплате, работает вот такой плагин: case 'OnWebPageInit': if ($uid = $modx->user->id) { if ($extended = $modx->user->Profile->get('extended')) { if (!empty($extended['updateGroups'])) { unset($_SESSION['modx.user.'.$modx->user->id.'.userGroupNames']); $extended['updateGroups'] = 0; $modx->user->Profile->set('extended', $extended); $modx->user->Profile->save(); $ctxQuery = $modx->newQuery('modContext'); $ctxQuery->select($modx->getSelectColumns('modContext', '', '', array('key'))); if ($ctxQuery->prepare() && $ctxQuery->stmt->execute()) { if ($contexts = $ctxQuery->stmt->fetchAll(PDO::FETCH_COLUMN)) { $serialized = serialize($contexts); $modx->exec("UPDATE {$modx->getTableName('modUser')} SET {$modx->escape('session_stale')} = {$modx->quote($serialized)}"); } } } } } break;Написан давно, работает без нареканий. Для разлогинивания заблокированных пользователей использую вот такой код в том же плагине: if ($modx->user->id) { if (!$modx->user->active || $modx->user->Profile->blocked) { $modx->runProcessor('security/logout'); $modx->sendRedirect('/'); } } Если это всё не то — прошу прощения. Новые дополнения и их версии / switchUser 13 +5 8
Василий Наумкин · 30 ноября 2015, 14:40 Сниппеты MODX могут возвращать исключительно строки, так уже повелось. $modx->fromJSON не нужен, Fenom умеет сам это делать: {set $result = json_decode($_modx->runSnippet('snippet'), 1)} Можно еще вот так: {var $resources = $_modx->getResources( ['published' => 1, 'deleted' => 0], ['sortby' => 'id', 'sortdir' => 'ASC', 'limit' => 50] )} {foreach $resources as $resource} {$_modx->getChunk('@INLINE <p>{$id} {$pagetitle}</p>', $resource)} {/foreach}Но это только для ресурсов. Для разработчиков / Пример работы Fenom 55 +1 3
Возможно ли реализовать возможность предоплаты за доставку на сайте? У меня Робокасса, у них вроде есть 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... Да, планируется. Даже чуть больше, чем просто бонусная система)
Скорее всего у вас обработчик на событие OnPageNotFound и в нем же вы посылаете снова на sendErrorPage.
Смените событие на OnHandleRequest и думаю все будет ок.
— Выбираете таблицу modx_site_content
— Переходите в закладку «структура»
— Внизу открывшегося окна нажимаете ОК (Добавить 1 поле в конец таблицы)
Имя: ticket_rating
Тип: int
Длина/значение: 10
По умолчанию: Как определено (0)
Null: галочка
(сохраняем)
Таким способом мы расширили дефолтную таблицу MODX'a со списком ресурсов. Далее:
— Создаем плагин (допустим, customTicketRating) со следующим содержанием:
и включаем его на события OnTicketVote и OnMODXInit. Теперь наше новое поле воспринимается модксом и изменяется после каждого голосования за любой ресурс.
Теперь осталось только вызвать сниппет с нужным условием:
Важно: рейтинг начнет вычисляться только с последующих голосований за тикеты.
Ну и выкидывай нафиг этот default:
Jevix нужно будет указать как модификатор Fenom.
2) Создаёшь настройку (желательно в namespace «minishop2») ms2_minimum_price_order со значением суммы заказа, например: 50000.
3) В настройке ms2_order_handler_class указываешь только что созданный класс обработчик, вот так: myOrderHandler.
Вроде всё…
Выполнять в специальном сниппете или Console.
Ну а лучше конечно разобраться с ошибкой очистки через корзину.
Это возможно как-то сделать?
Или прийдётся удалять с двух таблиц?
Примерно так в цикле помеченных на удаление:
Написан давно, работает без нареканий.
Для разлогинивания заблокированных пользователей использую вот такой код в том же плагине:
Если это всё не то — прошу прощения.
Можно еще вот так:
Но это только для ресурсов.