Функции-помощники для MODX
Продолжаем тему расширения функционала MODX. В предыдущей статье мы рассмотрели подключение собственного класса для логирования. В этой статье я познакомлю с библиотекой функций для более удобной разработки. Их можно использовать и сниппетах, и в плагинах, и в классах.
На данный момент она содержит следующие функции:
- url() - генерирует url.
- redirect() - переадресация на указанный url или страницу, если указан id.
- forward() - выводит указанную страницу без изменения url.
- abort() - переадресация на страницу ошибки.
- config() - работа с массивом настроек.
- session() - работа с сессией.
- cache() - управляет кэшем.
- parents() - возвращает массив родителей указанного ресурса.
- children() - возвращает массив дочерних ресурсов.
- pls() - чтение/установка прейсхолдеров.
- pls_delete() - используется для удаления плейсхолдеров.
- lang() - для работы с лексиконом.
- email() - отправка почты.
- email_user() - отправка почты пользователю.
- quote() - экранирует строку.
- esc() - оборачивает спец. символом драйвера базы данных.
- css() - подключает стили.
- script() - подключает скрипты.
- html() - подключает HTML разметку.
- chunk() - вызывает указанный чанк.
- snippet() - вызывает указанный сниппет.
- processor() - вызывает процессор.
- is_auth() - проверяет, авторизован ли пользователь в указанном контексте.
- is_guest() - проверка, является ли пользователь гостем.
- can() - проверка прав.
- resource_id() - получает id текущего ресурса.
- template_id() - получает id шаблона текущего ресурса.
- user_id() - получает id текущего пользователя.
- tv() - получает TV текущего ресурса.
- object() - функция для работы с объектами MODX.
- collection() - функция для работы с коллекциями объектов MODX.
- resource() - функция для работы с ресурсами MODX.
- resources() - функция для работы с коллекцией ресурсов MODX.
- user() - функция для работы с пользователями MODX.
- users() - функция для работы с коллекцией пользователей MODX.
- object_exists() - проверка существования объекта с указанными свойствами.
- resource_exists() - проверка существования ресурсов.
- user_exists() - проверка существования пользователей.
- str_clean() - очищает строку от указанных символов.
- table_name() - выводит название таблицы класса.
- columns() - выводит список полей таблицы класса.
- is_url() - проверка валидности url.
- is_email() - проверка валидности email.
- log_error() - запись в журнал ошибок для уровня логирования ERROR.
- log_warn() - запись в журнал ошибок для уровня логирования WARN.
- log_info() - запись в журнал ошибок для уровня логирования INFO.
- log_debug() - запись в журнал ошибок для уровня логирования DEBUG.
- context() - Выводит указанное свойство текущего контента. По-умолчанию это ключ.
- query() - для работы с сырыми SQL запросами.
- memory() - выводит отформатированную строку используемой памяти.
- img() - формирует HTML тэг img.
- faker() - создает фейковые данные.
Список не конечный. Библиотека расширяется.
Примеры
# Проверка существования пользователя по email.
if (user_exists(['email'=>'admin@mail.ru']) { // Пользователь с таким email существует }
# Получить данные из кэша.
$value = cache('key', 'my_data'); // Альтернативный вариант $value = cache()->get('key', 'my_data');
# Отправка почты.
email('pupsik@mail.ru', 'Тема','Содержание письма'); // Пользователю email_user('admin', $subject, $content);
# Получить последний ресурс.
$resourceObject = resource()->last(); // Объект ресурса $resourceArray = resource()->last()->toArray(); // Массив с данными ресурса
# Последние 10 ресурсов.
$resObjects = resources()->last(10);
# Массив с заголовками ресурсов родителя с id=20. Можно использовать для формирования селекта.
$titles= resources()->where(['parent'=>20])->get('pagetitle'); // array('pagetitle 1', 'pagetitle 2', 'pagetitle 3')
# Записать значение в сессию.
session('key1.key2', 'value'); // => $_SESSION['key1']['key2'] = $value; //# Получить значение из сессии $value = session('key1.key2'); // $value = $_SESSION['key1']['key2']
# Проверить авторизован ли пользователь.
if (is_auth) {} // альтернатива $modx->user->isAuthenticated($modx->context->key)
# Проверить валидность email
if (is_email($_POST['email'])) { // Почта валидная }
# Переместить ресурсы от одного родителя другому и установить другой шаблон.
resources()->where(['parent'=>20])->set(['parent'=>5, 'tempate'=>1]);
# Удалить дочерние ресурсы родителя с id = 20.
collection('modResource')->where(['parent'=>20])->remove(); // Для ресурсов есть своя функция resources()->where(['parent'=>20])->remove();
# Получить количество заблокированных пользователей.
$count = users()->profile()->where(['Profile.blocked'=>1])->count();
# Получить количество пользователей с подготовкой запроса.
$userArray = query('select * from ' . table_name('modUser'). ' WHERE id < ?')->execute(10); // или так $userArray = query('select * from ' . table_name('modUser'). ' WHERE id < ?')->bind(10)->execute(); // или так // $_POST['email'] = 'user@mail.ru' $userArray = query('select * from ' . table_name('modUser'). ' WHERE id < :email')->bind($_POST)->execute();
Вот такая получилась библиотека. Состоит она из двух файлов - functions.php
и classes.php
. Это первая бета версия. В дальнейшем она будет совершенствоваться и расширяться. И в этом я надеюсь на вашу помощь и участие.
Подключение
Библиотека размещается на GitHub. Подключить её можно тем же способом, что и класс логера из предыдущей статьи, в плагине на событие OnMODXInit. Скопируйте файлы из папки /src/
в папку сайта /core/lib/
и подключите через плагин:
switch ($modx->event->name) { case 'OnMODXInit': // Подключать нужно только файл с функциями $file = MODX_CORE_PATH . 'lib/functions.php'; if (file_exists($file)) { require_once $file; } break; }
Ну а в новом году рассмотрим способ подключения этой библиотеки через Composer.
Полная документация.
Update 01.01.2017
Сделал в виде обычного пакета MODX. Установка через обычный менеджер пакетов в админке.
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()