modHelpers 4.0.0. Что нового?
В новой версии библиотеки были обновлены зависимости, добавлено несколько функций и одна удалена. Указанные изменения повлекли нарушение обратной совместимости. Поэтому перед обновлением внимательно ознакомьтесь с изменениями.
Список изменений
- Добавлена новая функция
build_tree
, формирующая древовидную структуру данных. - Добавлена новая функция
reading_time
для подсчёта времени чтения текста. - Добавлена новая функция
sanitize_path
, исключающая возможность манипулирования путями. - Добавлена новая функция
value
. Аналог одноимённому хелперу из Laravel, но позволяет указать дефолтное значение для null. - Удалена функция
faker
и соответствующая библиотека Faker. - Функция
dump
теперь может принимать несколько аргументов. - В функции
login
иlogout
добавлен параметр «ctx», позволяющий указать контекст. - Исправлен баг с добавлением вложений в классе Mailer (#2).
Давайте быстренько пробежимся по пунктам.
Функция build_tree()
Эта функция создаёт древовидную структуру из плоского массива данных.
Для наглядности используем простой пример вывода меню из корневых ресурсов. Для этого сначала создадим сниппет.
// BuildMenu <?php $query = $modx->newQuery('modResource', [ 'parent' => 0, 'deleted' => 0, 'hidemenu' => 0 ]; if ($query->prepare() && $query->stmt->execute()) { $resources = $query->stmt->fetchAll(PDO::FETCH_ASSOC); } return build_tree($resources);
На следующем шаге создадим HTML шаблон для меню, используя синтаксис Smarty из пакета ZoomX.
// MenuItem.html {if isset($item['children'])} <li> <a href="{$item['uri']}">{$item['pagetitle']}</a> <ul> {foreach $item['children'] as $child} {include 'MenuItem.html' item=$child} {/foreach} </ul> </li> {else} <li> <a href="{$item['uri']}">{$item['pagetitle']}</a> </li> {/if}
Ну и осталось добавить их в шаблон страницы.
<head> ... </head> <body> <nav class="navbar"> <ul class="main-menu"> {$items = $modx->runSnippet('BuildMenu')} {foreach $items as $item} {include 'MenuItem.html' item=$item} {/foreach} </ul> </nav> ... </body>
Функция reading_time()
Сейчас достаточно часто в интернете можно встретить ресурсы, в которых указывается время чтения статьи. Данная функция помогает вычислять это время. Использовать можно прямо на странице при условии, что вы используете PHP шаблонизатор.
<p>Время чтения: {reading_time('content'|resource)}</p>
Функция sanitize_path()
Предназначена для фильтрации указанного пути. Удаляет символы ../
из пути, а также возможные манипуляции в виде....//
.
// Путь отфильтрован не полностью str_replace('../', '', 'path/to/....//file.php'); // "path/to/../file.php" // Полная фильтрация sanitize_path('path/to/....//file.php'); // "path/to/file.php"
Функция value()
Одноимённая функция из Laravel. Функция может принимать как простые значения, так и замыкания. Если передать значение, то оно и вернётся. В случае замыкания вернётся результат. Но есть небольшое отличие от Laravel реализации — вторым параметром можно передать значение по-умолчанию, которое будет возвращено первый параметр имеет значение null
.
$foo = null; value($foo, 'Default value'); // "Default value"
Заключение
С остальным всё более менее понятно. Касательно удалённой библиотеки Faker, тут моя позиция следующая — она нужна в основном только на этапе разработки и её присутствие на продакшене совсем не требуется. Поэтому лучше вынести её в отдельный пакет. Кроме того, автор перестал её поддерживать и она находится в статусе архива. На просьбы сообщества передать репозиторий активным пользователям он отказался. Говорят из-за звёздочек. Поэтому для PHP8 нужно искать форки.
В планах дописать функционал для работы с регистром (очередями) и сообщениями. И добавить её как зависимость для ZoomX при разработке аналога pdoTools. Ну и в ближайшее время я поправлю документацию.
Комментарии ()
Вы должны авторизоваться, чтобы оставлять комментарии.
modHelpers 4.0.0 — очень полезный компонент для modx. Активно его использую на всех своих сайтах.
Но сегодня выяснил, что часть функционала modHelpers не работает на php 8 и выше.
В частности «Менеджер HTTP запросов»
Очень важный для меня request()->checkCsrfToken() не работает. (ошибка 500 на сайте)
Если у автора будет время выпустить версию с поддержкой php 8 буду очень благодарен.
Или кто ни будь подскажет как исправить ситуацию самостоятельно?
В логах что пишет?