Александр Туниеков · 17 августа 2021, 13:06 Вообщем победил кеширование :-). {'!mFilter2' | snippet : ['cacheTime'=>3600]}Параметр cacheTime на 3600 включает кеширование запросов в базу. В mFilter2 кеширование не доработано. Сейчас 8 часов возился и сделал. Нужно заменить код файла core/components/msearch2/model/msearch2/msearch2.class.php кодом из https://gist.github.com/touol/a1c46d7fd199c0889c361c4075c28d39 К сожалению, не правя компонент, не исправишь кеширование. На виндоус локалке при кешировании время ответа на категории с 4000 товаров сокращается с 30-60сек до 3-8сек со включенными подсказками. На боевом сайте не тестировал. Можите попробовать у себя. Можно еще ускорить вывод страницы кешируя сам выводmfilter2. Но это если договоримся по работе. Если что мой час стоит 600р. Вопросы / Долгая работа фильтров 11 +1 2
Михаил · 20 апреля 2020, 11:51 Чтобы поменять 302 редирект на 301, не правя исходники и с сохранением возможности обновления pdoTools, нужно: 1. Создать в системных настройках modx настройку pdoPage.class со значением pdotools.pdopagecustom joxi.ru/Dr8ygaRhoEYjgm 2. Создать в папке core/components/pdotools/model/pdotools файл pdopagecustom.class.php со следующим содержимым: <?php require_once MODX_CORE_PATH . 'components/pdotools/model/pdotools/pdopage.class.php'; class pdoPageCustom extends pdoPage { /** @var modX $modx */ public $modx; /** @var pdoTools $pdoTools */ public $pdoTools; /** @var string $req_var */ protected $req_var = ''; /** * @param modX $modx * @param array $config */ public function __construct(modX & $modx, $config = array()) { $this->modx = &$modx; $fqn = $modx->getOption('pdoTools.class', null, 'pdotools.pdotools', true); $path = $modx->getOption('pdotools_class_path', null, MODX_CORE_PATH . 'components/pdotools/model/', true); if ($pdoClass = $modx->loadClass($fqn, $path, false, true)) { $this->pdoTools = new $pdoClass($modx, $config); } else { return; } $modx->lexicon->load('pdotools:pdopage'); } /** * Redirect user to the first page of pagination * * @param $isAjax * * @return string */ public function redirectToFirst($isAjax = false) { unset($_GET[$this->pdoTools->config['pageVarKey']]); unset($_GET[$this->modx->getOption('request_param_alias', null, 'q')]); if (!$isAjax) { $this->modx->sendRedirect( $this->modx->makeUrl( $this->modx->resource->id, $this->modx->context->key, $_GET, 'full' ), array('responseCode' => 'HTTP/1.1 301 Moved Permanently') ); return ''; } else { $_GET[$this->pdoTools->config['pageVarKey']] = 1; $_REQUEST = $_GET; return $this->pdoTools->runSnippet('pdoPage', $this->pdoTools->config); } } }В функции redirectToFirst добавлен 301 редирект. Вопросы / Откуда 302 редирект? 15 0 2
Павел Гвоздь · 10 марта 2020, 14:19 /** @var msDelivery $delivery */ if (!empty($this->order['delivery']) && $delivery = $this->modx->getObject('msDelivery', $this->order['delivery']) ) { $cost = $delivery->getCost($this, $cost); $deliveryCost = $delivery->getCost($this, 0);//Добавил переменную где получаем price доставки }А что если в методе msDeliveryHandler::getCost стоимость доставки зависит от стоимости заказа во втором переданном параметре $cost? А вы туда «0» передаёте. Следовательно ваша стоимость доставки будет одна, а по сути — другая. Надо делать как-то так: /** @var msDelivery $delivery */ if (!empty($this->order['delivery']) && $delivery = $this->modx->getObject('msDelivery', $this->order['delivery']) ) { $cost_old = $cost; $cost = $delivery->getCost($this, $cost); $delivery_cost = $cost - $cost_old; unset($cost_old); } Пошаговые инструкции / Стоимость доставки отдельной строкой в оформление заказа MS2 8 0 1
Баха Волков · 06 февраля 2020, 22:07 Не не не, не делайте так, помните или почитайте о DRY. С парсером MODX все понятно, ей сложно помочь, но феном-то полноценный шаблонизатор: {foreach ['receiver', 'phone', 'index', 'region', 'city', 'street', 'building', 'room', 'comment', 'customfield'] as $field} {if $address[$field]?} <tr> <td style="{$style.th};width: 200px; font-weight: 600;">{('ms2_frontend_' ~ $field) | lexicon}: </td> <td style="{$style.th}">{$address[$field]}</td> </tr> {/if} {/foreach} 8 моих строчек против твоих 80-ти Готовые решения / Данные клиента в письме (e-mail). Minishop2. Изменяем чанк tpl.msEmail 9 +12 5
Александр · 22 июля 2017, 22:57 Точно! Так и сделал. Мне тоже нужно было изменить сортировку. В функции buildTVsFilter закомментировал ksort($results); А в функцию getTvValues после: else { $filters[$name][$v] = array($row['id'] => $row['id']); } } }Добавил: foreach ($filters as $tvName => $values) { if ($tvName == 'item_when') ksort($filters[$tvName], SORT_NUMERIC); else if ($tvName == 'item_rooms') ksort($filters[$tvName], SORT_NUMERIC); else ksort($filters[$tvName]); } Вопросы / mFilter2 Сортировка значений фильтров 6 0 2
Воеводский Михаил · 11 июня 2015, 17:36 Номер заказа появляется только в событии msOnCreateOrder. До того заказа не существует. В плагине, срабатывающем по этому событию, уже существует объект $msOrder: $msOrder->get('num'); $msOrder->get('id'); Вопросы / Получить номер заказа MS2 3 +2 2
Пётр Молчанов · 25 мая 2015, 10:55 Лучше такое сделать плагином на событие OnUserRegister. Что-то типа такого: if ($modx->event->name == 'OnUserSave' && $mode=='new') { // генерим пароль $pass = $modx->user->generatePassword(); $user->set('password',$pass); $user->set('active','1'); $user->save(); // получаем мыло $profile = $user->getOne('Profile'); $email = $profile->get('email'); // отправляем письмо $messageFields = [массив каких-то данных, например, логин и пароль]; $message = $modx->getChunk('UserRegEmailTpl', $messageFields); $modx->getService('mail', 'mail.modPHPMailer'); $modx->mail->set(modMail::MAIL_BODY,$message); $modx->mail->set(modMail::MAIL_FROM,$modx->getOption('emailsender')); $modx->mail->set(modMail::MAIL_FROM_NAME,$modx->getOption('site_name')); $modx->mail->set(modMail::MAIL_SENDER,$modx->getOption('site_name')); $modx->mail->set(modMail::MAIL_SUBJECT,'Благодарим за регистрацию'); $modx->mail->address('to',$email); $modx->mail->address('reply-to',$modx->getOption('emailsender')); $modx->mail->setHTML(true); if (!$modx->mail->send()) { $modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo); return false; } $modx->mail->reset(); } Вопросы / Отправка на почту пароля, без активации 12 +2 5
Наумов Алексей · 22 марта 2014, 08:54 Привет. Вот смотри: 1. В системной настройке ms2_order_handler_class указываем myOrderHandler 2. Создаем файл core/components/minishop2/custom/order/myOrderHandler.class.php 3. В него код: <? class myOrderHandler extends msOrderHandler{ public function submit($data = array()) { if(empty($data['email'])){ $data['email'] = uniqid('user_').'@MYSITE.ru'; } return parent::submit($data); } }Это один из вариантов. Мы просто при отправке заказа, если пользователь не указал почту, генерируем случайный email. Можешь посмотреть исходный msOrderHandler и переопределить в нем другой метод, например, где идет проверка email. Вопросы / Как сделать необязательным поле email в miniShop2? 23 0 4
Плагин EnvBadge: визуальный индикатор окружения в админке MODX3 Расскажите пожалуйста как вы настраиваете сайт на MODX 3 чтобы был dev, prod, stage. Можете описать workflow? Допустим у меня 80% — это магазины, там клиенты, продажи, все онлай...
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, сервис-ориентированная архит...
mxBoard: канбан-доска для команд, людей и ИИ-агентов в MODX 3 Для начала перейдем на Markdown, а дальше будет видно
MaxNotify3 Вышло обновление 1.3.0-pl (20.07.2026) — добавлены уведомления о заявках FormIt через hook-сниппет maxNotify3FormIt; — добавлены уведомления о заявках SendIt через hook-с...
Параметр cacheTime на 3600 включает кеширование запросов в базу. В mFilter2 кеширование не доработано. Сейчас 8 часов возился и сделал. Нужно заменить код файла core/components/msearch2/model/msearch2/msearch2.class.php кодом из https://gist.github.com/touol/a1c46d7fd199c0889c361c4075c28d39
К сожалению, не правя компонент, не исправишь кеширование.
На виндоус локалке при кешировании время ответа на категории с 4000 товаров сокращается с 30-60сек до 3-8сек со включенными подсказками. На боевом сайте не тестировал.
Можите попробовать у себя.
Можно еще ускорить вывод страницы кешируя сам выводmfilter2. Но это если договоримся по работе. Если что мой час стоит 600р.
1. Создать в системных настройках modx настройку pdoPage.class со значением pdotools.pdopagecustom joxi.ru/Dr8ygaRhoEYjgm
2. Создать в папке core/components/pdotools/model/pdotools файл pdopagecustom.class.php со следующим содержимым:
В функции redirectToFirst добавлен 301 редирект.
8 моих строчек против твоих 80-ти
Так и сделал. Мне тоже нужно было изменить сортировку.
В функции buildTVsFilter закомментировал ksort($results);
А в функцию getTvValues после:
Добавил:
В плагине, срабатывающем по этому событию, уже существует объект $msOrder:
1. В системной настройке ms2_order_handler_class указываем myOrderHandler
2. Создаем файл core/components/minishop2/custom/order/myOrderHandler.class.php
3. В него код:
Это один из вариантов. Мы просто при отправке заказа, если пользователь не указал почту, генерируем случайный email.
Можешь посмотреть исходный msOrderHandler и переопределить в нем другой метод, например, где идет проверка email.