[pdoTools] Обновление 2.13 - повышение безопасности, данные для Fenom и т.д.
Друзья, представляю новую версию pdoTools с озвученным ранее функционалом. Не всё что запланировал успел сделать, но и в этой версии есть на что обратить внимание —
Директория хранения файловых элементов определяется администратором в системной настройке «pdotools_elements_path». Контент-менеджер должен использовать файловые элементы из этой папки или вложенных подпапок.
- Исправлены известные дырки безопасности
- вывод любого файла на сайте;
- отрефакторен сниппет pdoUsers;
- исправлена подмена пути (path traversal) в файловых элементах.
- Модификатор «setOption» помечен как deprecated и будет удалён в следующей версии.
- Параметры сниппетов «tplPath» и «elementsPath» помечены как deprecated и будут удалёны в следующей версии.
- Добавлена возможность выводить массив необработанных данных (нужно при использовании Fenom).
- Системные настройки «parser_class» и «parser_class_path» теперь будут регистрироваться в пространстве имён «core».
Безопасность
Вопрос безопасности я чуть позже более подробно рассмотрю на своём сайте в закрытом режиме. Хочу снять видос. В широком доступе эту информацию обсуждать нежелательно.Модификатор «setOption» помечен как deprecated
Как я говорил в прошлой статье — контент-менеджер не должен иметь права на переопределение системных настроек. Но эта проблема не полностью закрывается данным исправлением. У объекта $_modx есть открытое свойство $config, которое позволяет контент-менеджеру делать тоже самое напрямую без использования модификатора. В следующей версии, которая явно будет мажорной, ибо ломает обратную совместимость, надо закрывать доступ к этому свойству.Параметры сниппетов «tplPath» и «elementsPath»
Параметры сниппетов «tplPath» и «elementsPath» помечены как deprecated и будут удалёны в следующей версии.Директория хранения файловых элементов определяется администратором в системной настройке «pdotools_elements_path». Контент-менеджер должен использовать файловые элементы из этой папки или вложенных подпапок.
Режим вывода необработанных данных
Мы много уже говорили про эту возможность. Так как pdoTools поставляется с Fenom, то можно вполне обойтись без многочисленных шаблонов «tpl», «tplFirst», «tplWrapper» и т.п. У всех сниппетов есть параметр «return», указывающий режим вывода —Как видим по документации, у него есть режим «data», который выводит массив данных. Но в процессе конвертации массива в строку в итоге получается только «Array». В новой версии сниппеты умеют выводит массив для целей использования с шаблонизатором Fenom.
- chunks — оформленные чанки, по умолчанию.
- sql — подготовленный сырой SQL, полезно для отладки. Сам запрос не выполняется, только выводится на экран.
- data — готовый массив данных. Из-за особенностей работы сниппетов MODX этот вариант имеет смысл использовать только при вызове pdoFetch::run() напрямую из своего сниппета, в противном случае вы получите только строку «Array».
- ids — возвращает только идентификаторы документов, через запятую. Удобно для подстановки в качестве параметра другим сниппетам. Параметр &returnIds использует именно этот тип.
- json — возврат массива данных JSON строкой.
- serialize — возврат массива данных сериализованной строкой. Иногда, по непонятным причинам, может вызвать нехватку памяти. Лучше использовать json.
{set $resources = '!pdoResources' | snippet : [
"return" => "data",
...
]}
{foreach $resources as $resource}
<p>Заголовок: {$resource.pagetitle}</p>
{/foreach}
Системные настройки «parser_class» и «parser_class_path»
Это настройки MODX. Поэтому неправильно их регистрировать как pdoTools настройки. При новой установке они будут создаваться в пространстве имён «core:site». При обновлении они перемещаться не будут.Заключение
Вот что успел сделать. Планы по оптимизации запросов и сниппета pdoPage перенёс на следующую версию. Там не всё так просто. Надеюсь, эти доработки пригодятся.
Поблагодарить автора
Отправить деньги
Комментарии: 20
Спасибо!
Круто! Спасибо
Ошибка:
Ошибки ломают сайты. Проверяйте перед релизом.
syntax error, unexpected ')' in core/components/pdotools/model/pdotools/_fenom.php on line 388
Также нет пакета, сформированного composer'ом core/components/pdotools/vendor/autoload.php.Ошибки ломают сайты. Проверяйте перед релизом.
Проверяйте перед релизом.Первым делом поставил на свой сайт. Прогнал все страницы. Ничего не сломалось. Единственное, что повылезало
[pdoTools] The "tplPath" and "elementsPath" parameters are deprecated and will be removed in the next version.
Первый блин… За композером не углядел. Выпустил 2.13.1 версию с исправлением.
Думаю, что нужно дополнительно проверять на чистых MODX. У меня как раз на таком вылезло. pdoCrumbs вызываю, а он ничего не выводит, уж, думал, я косячу. Потом логи почитал) Спасибо, за оперативность)
pdoCrumbs и сейчас не работает в стандартном вызове
{'pdoCrumbs'|snippet:[
'fastMode' => 1,
'tplWrapper' => '@INLINE <div class="breadcrumbs"><div class="section-wrapper">{$output}</div></div>',
'wrapIfEmpty' => 0,
'showHome' => 0,
'showCurrent' => 1,
'tplHome' => '@INLINE <a href="/" class="breadcrumbs__item">Главная <span class="breadcrumbs__divider">›</span></a>',
'tpl' => '@INLINE <a href="{$link}" class="breadcrumbs__item">{$menutitle} <span class="breadcrumbs__divider">›</span></a>',
'tplCurrent' => '@INLINE <span class="breadcrumbs__item breadcrumbs__item--current">{$menutitle}</span>'
]}
пришлось удалять строкиif (!isset($return)) {
$scriptProperties['return'] = $return = 'chunks';
}
из кода сниппета pdoCrumbs
Исправил. Походу всё-таки придётся писать тесты. Самому уследить за всем очень сложно.
Не очень понял, а зачем это удалять? Что-то взамен когда очень хочется как быть?
я про elementsPath
я про elementsPath
Спасибо.
А можно узнать почему на github.com/sergant210/pdoTools — ничего не обновилось? Где идет разработка и можно посмотреть изменения? Проект еще в статусе open source?
А можно узнать почему на github.com/sergant210/pdoTools — ничего не обновилось? Где идет разработка и можно посмотреть изменения? Проект еще в статусе open source?
А что и именно должно обновиться? Коммиты с кодом есть github.com/sergant210/pdoTools/commits/master
Просто всё физически успеть сложно.
Круто что есть люди не дающие MODx'у потухнуть. Но при всем уважении к автору, кмк, все правки с таким популярным компонентом нужно гонять тестами, причем гонять люто, писать тесты под все сниппеты и их параметры, дабы к людям после нажатия на кноку «Обновить» не прилетали артефакты.
А фраза:
Сама напрашивается на вопрос, а зачем торопиться-то? Лучше потратить на это месяц, два, три — да сколько угодно. Но выпустить железобетон который не сломает людям сайты.
А фраза:
Просто всё физически успеть сложно.
Сама напрашивается на вопрос, а зачем торопиться-то? Лучше потратить на это месяц, два, три — да сколько угодно. Но выпустить железобетон который не сломает людям сайты.
Спасибо.
Всем привет! Спасибо автору за работу, однако…
Баг репорт! Версии: php — 7.3, Modx — 2.8.3, pdoTools 2.13.2 (последняя на данный момент).
При вызове pdoPage (ajax=scroll) вылазит ошибка
Баг репорт! Версии: php — 7.3, Modx — 2.8.3, pdoTools 2.13.2 (последняя на данный момент).
При вызове pdoPage (ajax=scroll) вылазит ошибка
[pdoTools] The «tplPath» and «elementsPath» parameters are deprecated and will be removed in the next version., хотя все работает…
Игорь, а Вы читали пост? Он же ведь не очень большой. И там по этому поводу всё написано — в следующей версии нельзя будет указывать путь для файловых элементов в параметрах сниппета. Он указывается в системной настройке администратором (!) и не должен переопределяться простым контент-менеджером.
Да, конечно, читал… но меня смутило то, что в настройках modx у меня отключен показ ошибок, связанных с «deprecated» методами.
Сергей, вопрос: а если требуется подтянуть файловые элементы для одного сниппета или плагина из одной папки, а для другого – из другой? У меня на многих сайтах такая необходимость. Особенно это касается собственных компонентов – чтобы не складировать все в одной папке, часть плагинов подключаются из папки с элементами, которая находится в каталоге компонента. Мне кажется, что отключение этого параметра, сильно снизит удобство. Или есть еще способ подключать сниппет или плагин через
$pdoTools->runSnippet('<НАЗВАНИЕ ФАЙЛА>')
из определенного каталога, отличного от того, что задан в системных настройках pdoTools?
Я склоняюсь к решению, которое я сделал в ZoomX — возможность указывать несколько путей для файловых элементов. В сторонних компонентах нужно будет использовать плагин на событие «pdoToolsOnFenomInit».
В любом случае, во второй версии эти параметры просто задепрекейчены. В третьей (которая для MODX3) они удалены.
В любом случае, во второй версии эти параметры просто задепрекейчены. В третьей (которая для MODX3) они удалены.
Спасибо! Благодарю за наводку с
pdoToolsOnFenomInit
Сергей, а что остановит КМ использовать setOption пару раз? или думаете не применится?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.