Сергей Шлоков

Сергей Шлоков

Был в сети 06 ноября 2025, 19:54
Заказы не принимаю
Отличный митап! Виталий и Леонид — молодцы! Жаль у меня не получилось. Женя Борисов раскрыл интересный аспект разработки на MODX. Очень важный для всех. Жаль в трансляции плохо видно. В дополнение к этой теме в ближайшее время напишу статью про потенциальную уязвимость организации работы с сессией.
{'April 15, 2014' | ereplace : '/(\w+) (\d+), (\d+)/i' : '${1}1, $3'}
НО! Как сделать так, чтобы она вырезала только то, что мне нужно у меня не получилось, не силен в PHP и кракозябры эти не пойму, воротил, воротил и не наворотил ничего!
Так а что нужно-то?
Мама родная!
Во-первых, тег ignore вырезает содержимое и добавляет его уже после парсинга перед выводом в браузер. Иначе из-за специфики парсинга MODX он не работает.
Во-вторых, кавычки добавляет браузер при рендеринге страницы.Пытается привести к корректному виду то, что ему подсунули.

Как минимум, нужно вынести шаблон $frame_tpl в чанк (обычный или файловый). pdoTools кэширует шаблоны для цикла. Так что лишних запросов не будет. Ну и код этого шаблона требует большой оптимизации. Для каждого продукта выполняется такой код
{$_modx->runSnippet('!msop2GetOptionsWithPrices', ['id ' => $id,'key ' => 'size ','price '=> ($id | resource : 'price ')]) | toJSON}
Пожалейте пользователя и парсер. На каждой итерации выполнять такое — это явно попахивает местью заказчику.
А вот это
($id | resource : 'price ')
нельзя заменить на $price?
Чет я не помню чтобы ты хоть когда ко мне обращался…
Я тебе написал на gmail с гитхаба.

Да и в апи заказа никаких существенных изменений не происходило что могли бы тебя смутить.
С новым минишопом мой букинг валится по фаталу. Насколько я помню, ты переделывал старые дополнения для нового минишопа. А также делал новые с примечанием, что они несовместимы с минишопом версии ниже 2.4.

Видимо просто нет желания
Желания нет. Я так выше и написал. Я с минишопом вообще никогда не работал. Мне Миша Воеводский помог. Об этом я
тоже писал.

ток ято причем?
А я где-то сказал, что ты причём? Ты мне не ответил. Я об этом и сказал.

Так что не надо ля ля…
Меняю на фа фа и си си.

Я почему обратился… Ты большой спец по интеграции с минишопом. Уверен, не глядя в код можешь подсказать. А то, жуть как неохота разбираться с платежными системами, регистрироваться в них, настраивать сэндбоксы. У меня только ЯД. Покупать к нему платное дополнение для теста ломает. Поэтому и нужен совет старшего товарища.
В новой версии miniShop изменилось API заказа. Я не большой спец по минишопу. Вернее, вообще не спец. Обратился к Володе за помощью, так как он также исправлял эту проблему. Он проигнорил. С Василием я вообще не могу найти общий язык. Поэтому нужно сесть и погрузиться. Но на это нет ни времени, ни желания. Но видимо всё-таки придётся.
Пользоваться высокоуровневым интерфейсом удобнее. Только в этом классе этого не должно быть. Он должен работать через FileHandler.
Как пример функция email из библиотеки modHelpers заменяет такой код
$mail = $modx->getService('mail', 'mail.modPHPMailer');
$mail->setHTML(true);

$mail->set(modMail::MAIL_SUBJECT, $subject);
$mail->set(modMail::MAIL_BODY, $body);
$mail->set(modMail::MAIL_SENDER, $modx->getOption('emailsender'));
$mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender');
$mail->set(modMail::MAIL_FROM_NAME,$modx->getOption('site_name'));
$mail->address('to', $email);
$mail->send();

Правда короче и удобнее?
А ещё вот эта известная «фича»:
if ($contextKey !== 'mgr' && !$this->user) {
    $this->user= $this->getAuthenticatedUser('mgr');
}
Т.е. если пользователя залогинен только в админке, то он автоматически аутентифицируется на сайте. Вот зачем? Многие уже на этом попадались.
Решил глянуть как организована работа с сессией. И вот такое увидел в классе modUser в методе addSessionContext (другие не смотрел)
if (!isset($_SESSION["modx.{$context}.user.token"]) || empty($_SESSION["modx.{$context}.user.token"])) {
А вот так добавляются скрипты в классе modX
$this->sjscripts[count($this->sjscripts)]= $src;
У меня одного ощущение, что писал практикант? ))

Может Евгений меня поправит, но работа с сессией имеет слабые места. Достаточно добавить в сессию один ключик и вы авторизованы в админке.В свете недавней уязвимости сделать это раз плюнуть.
Для информации. В MODX есть специальный класс для работы с файловой системой. Он называется modFileHandler и работает с классами modFile и modDirectory. Реализация крайне убогая. Например самый первый пример из документации не работает. Т.е. создать папку у вас не получится. А как вы думаете сделано удаление директории? А вот так
$this->fileHandler->modx->getCacheManager();
return $this->fileHandler->modx->cacheManager->deleteTree($this->path, $options);
Т.е. не кеш-менеджер работает через файловый менеджер, а наоборот. Реакция одна — WTF. И подобного говнокода в ядре я встречал неоднократно. О некоторых моментах я уже писал раньше.
Если это понимаю я со своими средненькими познаниями, то что уж говорить про профи.

Заключение. Если вы ни слова не поняли, о чём тут написано, не расстраивайтесь. У вас ещё всё впереди. :)