• Блог
  • Функции-помощники для 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. Установка через обычный менеджер пакетов в админке.

1   6052

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.