Артур Сергеевич · 11 мая 2025, 21:48 Я опечатался, в assets, только tpl, а core закрыта htaccess (IfModule mod_authz_core.c) Готовые решения / DateAgo 7 0 1
epic · 03 декабря 2024, 13:40 Написал вот такой плагин, меня устраивает <?php // OnDocFormRender $modx->controller->addHtml('<script>Ext.onReady(function(){ setTimeout(function(){ hideseo = document.querySelector("div#resource-seosuite-panel > div > div.x-tool.x-tool-toggle"); hideseo.style.cssText += "float: left"; hideseo.click(); var divNode = document.createElement("style"); divNode.innerHTML = " .vertical-tabs-panel .vertical-tabs-header { width: 235px !important; } .vertical-tabs-panel .vertical-tabs-header .x-tab-strip-wrap ul.x-tab-strip > li.x-tab-strip-active { width: 235px !important; } "; document.getElementsByTagName("head")[0].appendChild(divNode); }, 300); });</script>'); Готовые решения / SEOSuite - после установки! 3 0 1
Максим · 08 ноября 2024, 14:18 Раз уж в статье написано про «подтянуть в очередной раз свои знания в PHP», напишу тут свои мысли. 1. Работать с датами можно через объект DateTime. Насколько помню там даже можно просто сравнивать даты обычным оператором $myDate > $yourDate 2. Может быть имеет смысл не привязываться к году, а просто выводить за столько то дней до и после определённой даты. Новый год всегда 1 января не важно какого года, другие праздники тоже. 3. На мой взгляд удобнее и нагляднее вместо: $start = $modx->getOption('start', $scriptProperties, ''); $end = $modx->getOption('end', $scriptProperties, ''); $chunk = $modx->getOption('tpl', $scriptProperties, '');писать в таком стиле: $options = array_merge([ 'start' => '', 'end' => '', 'tpl' => "@INLINE {$var}" ], $scriptProperties);4. Я всегда стараюсь делать один return в сниппетах или функциях. Для меня лично тоже так удобнее и нагляднее (единая точка выхода). Готовые решения / [HolidaysContent] Вывод контента в определённую дату и/или период времени 7 0 1
Сергей Шлоков · 30 октября 2024, 11:46 Как по мне, чересчур громоздко. Логика с date и start/end не очевидна. Да и в коде слишком много лишней логики. Я бы предложил вариант с датой и длительностью (просто в целях разминки полушарий) $date = $modx->getOption('date', $scriptProperties, ''); $duration = $modx->getOption('duration', $scriptProperties, '1'); $chunk = $modx->getOption('tpl', $scriptProperties, ''); if (empty($date) || empty($chunk)) { return ''; } [$day, $month, $year] = sscanf($date, "%d.%d.%d"); $year ??= date('Y'); $date = "$day.$month.$year"; $currentTimestamp = time(); $startTimestamp = strtotime($date); $endTimestamp = strtotime($date . " + $duration days"); if ($currentTimestamp >= $startTimestamp && $currentTimestamp < $endTimestamp) { $pdoTools = $modx->getService('pdoTools'); return $pdoTools->getChunk($chunk); }Указал год — сработает только для него. Не указал, ежегодно. Если длительность не указана, то она равна 1 дню. Готовые решения / [HolidaysContent] Вывод контента в определённую дату и/или период времени 7 +3 1
Артур Шевченко · 28 октября 2024, 19:51 Немного сократил и добавил поддержку файловых чанков. <?php $start = $modx->getOption('start', $scriptProperties, ''); $end = $modx->getOption('end', $scriptProperties, ''); $chunk = $modx->getOption('tpl', $scriptProperties, ''); // определяем в каких случаях мы ничего не будем делать, нам важно не перетрудиться. if((!$start && !$end) || !$chunk){ return ''; } // завозим поддержку файловых чанков if(!$parser = $modx->getService('pdoTools')){ $parser = $modx; } $now = strtotime('d.m.Y'); $currentYear = date('Y'); // предполагается что дада передаётся строкой вида "d.m" $startTime = strtotime($start . '.' . $currentYear); // если задана только дата начала, считае, что оформление будет активно только в эту дату if(!$end){ if($now === $startTime){ return $parser->getChunk($chunk); } } $startParts = explode('.', $start); $endParts = explode('.', $end); // проверяем больше месяц даты начала месяца даты окончания if((int)$startParts[1] > (int)$endParts[1]){ $endTime = strtotime($end . '.' . ($currentYear + 1)); }else{ $endTime = strtotime($end . '.' . $currentYear); } if ($now < $startTime || $now > $endTime) { return ''; } return $parser->getChunk($chunk); Готовые решения / [HolidaysContent] Вывод контента в определённую дату и/или период времени 7 +1 1
Дима Касаткин · 24 октября 2024, 20:59 Ух ты! Осенний код подъехал, спасибо! Всегда жара с заявками в праздники, может и пригодится! Тоже решаю такие квесты регулярно, поэтому позволю себе задать вопрос) Просто интересно, а ты не пробовал стандартные для Revo планируемые даты публикации прикрутить для этих целей как-то? Имею в виду перед тем, как решение выработал. Сниппет конечно круче, т.к. он универсальный, один раз поставил, и будет срабатывать каждый год)) Тоже горожу сниппеты, но сейчас подумал, что по-простому кажется можно было типа такого [[#8.published:is=`1`:then=`[[#8.content]]`]]выводить в шаблоне страницы, а в стандартных полях ресурса (с id=8 из моего примера) ставить планируемую дату публикации, и снятия с публикации, вот эти: Как думаешь, @Денис Усманов, рабочая это схема для одноразовых событий? Готовые решения / [HolidaysContent] Вывод контента в определённую дату и/или период времени 7 +2 1
Евгений Лазарев · 27 февраля 2021, 17:18 Уважаемые разработчики, хотел бы попросить. Можно ли в следующем релизе изменить формат телефона в msorderhandler.class.php? Каждый раз приходится строчку менять на substr(preg_replace('/[^-+()0-9]/iu', '', $value), 0, 16); Нужен многим формат +7(999)999-99-99, то есть и "+" нужен и скобки, а в общей сумме получается 16 символов. Буду очень признателен. Новые дополнения и их версии / Релиз miniShop2 ver. 2.8.0 26 0 2
Денис · 11 июня 2019, 09:32 Зачем переключать что-то кроном, если ваш первый комментарий решит проблему. Только обработать условие нужно в шаблоне. Делаем tv поле флажками со значениями от 1 до 7 и назовем например его day_of_sale. И в чанках вывода товаров используем {if (''|date:'N') | in : ($_pls['tv.day_of_sale']|split:'||')} <button>Продается</button> {else} Не продается {/if} И еще по хорошему добавить такое же условие в плагин на событие msOnBeforeAddToCart, если покупка идет через минишоп, чтобы нельзя было вообще в корзину добавить товар switch($modx->event->name) { case 'msOnBeforeAddToCart': $days = explode('||', $product->getTVValue('day_of_sale')); if(!in_array(date('N'),$days)) { $modx->event->output('Вы не можете купить этот товар сегодня.'); } break; } Все условия, естественно, можно сделать сложнее и любыми, но общий посыл думаю ясен. Вопросы / Переключение опции в зависимости от дня недели 6 0 1
Сергей · 03 мая 2019, 16:30 fenom Вывод цены товара {'!msMultiCurrencyPrice' | snippet : ['price' => $item.price,]} {$_modx->getPlaceholder('msmc.symbol_right')} Вывод суммы {'!msMultiCurrencyPrice' | snippet : ['price' => $total_cost,]} {$_modx->getPlaceholder('msmc.symbol_right')} Новые дополнения и их версии / msMultiCurrency 69 0 1
Сергей · 03 мая 2019, 14:37 Компонент работает с динамическим обновлением цен и товаров на компоненте msMCD, проверил на своем проекте Чанк вывода msMCDMiniCartRowTpl Вывод цены товара [[!msMultiCurrencyPrice? &price=`{$item.price}`]] [[!+msmc.symbol_right]] Вывод суммы [[!msMultiCurrencyPrice? &price=`{$total_cost}`]] Новые дополнения и их версии / msMultiCurrency 69 +1 1
Сайт тормозит сервер, грузит процессор на 100% Здравствуйте! Случай интересный, и надо смотреть по месту. В обычном случае не должно ничего грузить. Хотя импорт/экспорт тяжелая операция и может грузить. Много вопросов: К...
mxHeadless &mdash; REST API для MODX 3 без лишнего 1) Кастомная валидация Из коробки есть whitelist полей и базовая проверка типов. Свою логику сверху навешиваете через Extension API: OnMxHeadlessBeforeRequest / свой middlewar...
Открытое письмо руководству MODX и команде MODX Revolution (Русская версия) Николай, по твоему комментарию — полностью согласен. Выше писал о другом. А то, что не принимаются улучшения по существующей «кодовой базе» MODx — это да. Это проблема с которо...
[Решено] Обновление MODX 3.2.2 компонент FetchIt ломает сайт PHP 8.3 Уррра! Благодарим! И посылаем лучи добра!
[Tickets] Версия 1.14.0-pl — первый релиз с апреля 2022 Иван, ещё после обновления автоматически не заполняются поля introtext с выставленным ограничением в 500 символов. Без ограничения — заполняются.
modxkit/testbench - тесты дополнений MODX 3 на живом ядре, в том числе в CI MODX 3.0.x не поддерживается. Не «руки не дошли», а измеренная причина: ядро 3.0.x не поднимается в API-режиме полноценно. modX::reloadConfig() двумя соседними строками дважды вклю...
ModxMinify - Error 500 @Илья Уткин привет! github.com/Sterc/modx-minify давай обновим версию в сторе?
Impex3 - импорт/экспорт ресурсов MODX3 с поддержкой товаров MiniShop3 Да, несуществующие на сайте ресурсы будут просто проигнорированы. Те, которые есть, будут обновлены стандартным образом.
pdoTools 2.14.0 и pdoTools3 3.1.0-pl: обновление для MODX 2 и MODX 3 Это будет исправлено в следующей версии github.com/modx-pro/pdoTools3/pull/20
1. Работать с датами можно через объект DateTime. Насколько помню там даже можно просто сравнивать даты обычным оператором $myDate > $yourDate
2. Может быть имеет смысл не привязываться к году, а просто выводить за столько то дней до и после определённой даты. Новый год всегда 1 января не важно какого года, другие праздники тоже.
3. На мой взгляд удобнее и нагляднее вместо:
писать в таком стиле:
4. Я всегда стараюсь делать один return в сниппетах или функциях. Для меня лично тоже так удобнее и нагляднее (единая точка выхода).
Указал год — сработает только для него. Не указал, ежегодно. Если длительность не указана, то она равна 1 дню.
Тоже решаю такие квесты регулярно, поэтому позволю себе задать вопрос)
Просто интересно, а ты не пробовал стандартные для Revo планируемые даты публикации прикрутить для этих целей как-то?
Имею в виду перед тем, как решение выработал. Сниппет конечно круче, т.к. он универсальный, один раз поставил, и будет срабатывать каждый год))
Тоже горожу сниппеты, но сейчас подумал, что по-простому кажется можно было типа такого
выводить в шаблоне страницы, а в стандартных полях ресурса (с id=8 из моего примера) ставить планируемую дату публикации, и снятия с публикации, вот эти:
Как думаешь, @Денис Усманов, рабочая это схема для одноразовых событий?
Делаем tv поле флажками со значениями от 1 до 7 и назовем например его day_of_sale. И в чанках вывода товаров используем
И еще по хорошему добавить такое же условие в плагин на событие msOnBeforeAddToCart, если покупка идет через минишоп, чтобы нельзя было вообще в корзину добавить товар
Все условия, естественно, можно сделать сложнее и любыми, но общий посыл думаю ясен.
Чанк вывода msMCDMiniCartRowTpl