pdoParser против modParser

Третьего дня Сергей Шлоков провёл новый тест скорости работы парсера MODX и шаблонизаторов Fenom и Smarty.

До Smarty мне дела нет, но с итоговыми выводами, что никакой разницы в скорости между синтаксисом MODX и Fenom не видно, я категорически не согласен.



Итак, что нужно прояснить. У оригинального парсера MODX modParser есть две, на мой взгляд, фундаментальные проблемы:

Во-первых, каждый тег при разборе превращается в PHP объект modTag и в нём запускается метод process. То есть, если в чанке указан просто [[+id]], то MODX вместо обычной замены его через str_replace будет создавать новый объект и парсить.

Во-вторых, из-за своей рекурсивной природы, MODX выполняет все условия в чанках. Он просто не знает, во что могут превратиться эти условия на пятой, например, итерации. Причём делает он это изнутри наружу.
То есть, если вы прячете какой-то кусок оформления для вывода только нужным пользователям за условиями в чанке — именно этот кусок и будет первым делом разобран, а потом MODX решит, нужно ли его выводить, когда проверит условие с юзером. Народ придумывает разные костыли для обхода этого момента, чтобы парсить только нужное, типа [[![[+user:is=`admin`:then=`auth`:else=`guest`]]]].
Василий Наумкин
26 апреля 2022, 08:11
modx.pro
1 701
+27

Сортировка pdoMenu не работает

Не хочет работать сортировка по menuindex.
Моя структура в меню:
82
-83
-95
1
95
93
Вывожу:
[[pdoMenu?
                        &level=`2`
                        &parents=`82,0`
                        &resources=`-82,-1`
                        &rowClass=`nav-item sidebar-nav-item` 
                        &sortby=`menuindex` 
                        &sortdir=`ASC` 
                        &innerClass=`nav-link`
                        &tplOuter=`@INLINE <ul class="sidebar-nav" [[+classes]]>[[+wrapper]]</ul>`
                        &tpl=`@INLINE <li [[+classes]]><a href="[[+link]]" class="nav-link js-scroll-trigger" [[+attributes]]>[[+menutitle]]</a>[[+wrapper]]</li>`
                    ]]
Но при этом всегда первыми выводятся пункты без дочерних пунктов 95 и 93, а мне надо чтобы первыми выводились дочерние пункты 83 и 95
Виноградов Тимур
25 апреля 2022, 21:23
modx.pro
629
0

Перегенерация всех превью товаров скриптом от Ильи

Всех приветствую, сам скрипт: ilyaut.ru/cheats/to-rebuild-all-previews-of-products/

Константин
25 апреля 2022, 17:33
modx.pro
643
0

Настройка членства в группе

Возникла необходимость выводить разный контент для разных групп пользователей.
Поэтому создал группу User, добавил себя туда и обернул нужный код fenom
{if $_modx->isMember('User')}

                      {/if}
и — условие не работает, блок не выводится. права доступа перезагружал.
если User заменить на Administrator то все работает, значит что-то не так с вновь созданной группой User, но не могу понять что, ведь речь идет по идее о проверке членства в группе, а в группу я себя включил

при этом с одной стороны я числюсь в группе, если смотреть из админки Modx

c другой стороны, если вывести список групп через
$modx->user->getUserGroupNames();
то там я числюсь только в группе Administrator
Андрей
25 апреля 2022, 14:29
modx.pro
521
0

Какой способ выбрать сжатия картинки, чтоб работал вместе с lazy load

Здравствуйте, перебрал все варианты, ничего не подходит. Хотелось бы на экране 320px показывать картинки подгружаемые через lazy load, для 480px подгружать картинки на 480px.(под разные экраны, для лучшей оптимизации)

Что пробовал:

<img data-src="[[!phpthumbon? &input=`img/tovar/tovar.jpg` &options=`&w=350`]]" class="lazy img-fluid text-center mx-auto d-flex px-5 px-sm-1" width="350" >
Картинки создаются кэшированные и загружаются сразу в консоле браузера что тормозит загрузку, тогда какой смысл lazy load?

При использовании этого метода, под разные экраны, картинки прогружаются сразу в папке кеша, опять не работает lazy load.
<img class="lazy img-fluid text-center mx-auto d-flex px-5 px-sm-1" 
src="img/1.gif"
data-src="[[!phpthumbon? &input=`img/tovar/tovar.jpg` &options=`&w=470`]]"
data-srcset="[[!phpthumbon? &input=`img/tovar/tovar.jpg` &options=`&w=400`]] 400w, 
[[!phpthumbon? &input=`img/tovar/tovar.jpg` &options=`&w=300`]] 300w" width="350">


При использовании этого метода, консоль прогружает картинки, в папке кеша, опять lazy load не срабатывает
<picture>
<source srcset="[[!phpthumbon? &input=`img/tovar/tovar.jpg` &options=`&w=200`]]" media="(max-width: 200px)">
 <source srcset="[[!phpthumbon? &input=`img/tovar/tovar.jpg` &options=`&w=300`]]" media="(max-width: 300px)">
 <source srcset="[[!phpthumbon? &input=`img/tovar/tovar.jpg` &options=`&w=400`]]" media="(max-width: 400px)">
 <source srcset="[[!phpthumbon? &input=`img/tovar/tovar.jpg` &options=`&w=470`]]">
<img data-scr="[[!phpthumbon? &input=`img/tovar/tovar.jpg` &options=`&w=470`]]" class="lazy img-fluid text-center mx-auto d-flex px-5 px-sm-1" width="350">
</picture>
Игорь
24 апреля 2022, 12:23
modx.pro
585
0

PHPMailer перестал работать

С какого-то времени перестал работать PHPMailer, обнаружил только сейчас
MODX 2.8.3 php 7.4
почтовые настройки MODX не трогал с момента установки и раньше почта приходила, сейчас даже письма с восстановлением пароля не приходят.
В логах сервера ошибки нет.
В чем может быть проблема?
Андрей
23 апреля 2022, 20:07
modx.pro
981
0

Как получить TV параметр?

Есть такая выбора, без includeTVs она работает
$params['parents'] = 1470;
$params['limit'] = '0';
$params['depth'] = '0';
$params['showHidden'] = '1';
$params['showUnpublished'] = '1';
$params['includeTVs'] = 'vznos';
$params['where'] = 'pagetitle='.$stag.'';
$params['return'] = 'json';
$vst_json = $modx->runSnippet('pdoResources', $params);
в таком виде выдает ошибку
Error 42S22 executing statement:
Array
(
[0] => 42S22
[1] => 1054
[2] => Unknown column 'tv.vznos' in 'where clause'
)
Если поменять
$params['includeTVs'] = 'vznos';
на
$params['includeTVs'] = 'tv.vznos';
ошибок нет, но и переменной $vst_json нет параметра tv.vznos, хотя у данного ресурса он точно есть. В чем проблема?
Андрей
23 апреля 2022, 14:00
modx.pro
658
0

Сравнение шаблонизаторов MODX, Fenom и Smarty



В очередной раз прочитав утверждение, что Fenom быстрее стандартного парсера, решил провести указанный в документации pdoTools тест, чтобы расставить все точки над и. Но решил сделать это не отдельными скриптами, как в документации, а практичнее — через сниппет, который будет вызыватся на странице. Плюс добавил для сравнения шаблонизатор Smarty из ZoomX. Так вот, у меня таки есть шо вам сказать.
Сергей Шлоков
23 апреля 2022, 10:52
modx.pro
2 682
+16

MagicThemes - управление темами для MODX Revo



Представляю Вашему вниманию пакет управление темами или мини-движок тем для MODX.
С его помощью можно управлять темой:
— Менять местами области, блоки, блоки в областях;
— Менять ширину размера сетки областей и блоков.
— Устанавливать фоновый цвет блока или изображение.
— Да и вообще — менять визуальное отображение блока до неузнаваемости.
— Настраивать параметры сниппета.
— Менять, вписывать значения классов и параметров для блока.
— Настраивать базовые цвета и прочие параметры в настройке темы.
— и много других полезных мелочей.
И все это можно делать не залезая в сам код. Неправда ли звучит интригующе?
Под капотом расскажу и покажу что же за решение получилось в итоге. Надеюсь будет интересно. Поехали…
Алексей Смирнов
22 апреля 2022, 14:53
modx.pro
1
1 668
+11

pdoResources модификаторы вывода строки

В pdoResources не работает [[+pagetitle:replace=`Mr.==Mrs.`]]
а вот это работает [[+name:stripString=`Mr.`]]
fastmode не прописан, вручную прописывал со значением 0

Вывод около 10 тыс ресурсов. Может есть аналоги где это работает? Нужно то заменить в весе товара при выводе фида с запятой на точку.
Михаил
22 апреля 2022, 13:52
modx.pro
410
0