Посмотрим лог изменений:

  • Добавлена функция first().
  • Добавлена функция optional().
  • Добавлена функция html_attributes().
  • Расширены возможности функций css() и script().

Функция first()

Основное предназначение этой функции — вернуть первый существующий (not null) из переданных аргументов. Т.е. передаёте несколько аргументов и функция по очереди их проверит. А последним можно передать значение по-умолчанию.

Функция optional()

Данная функция появилась в Laravel 5.5. Она помогает избежать ошибки обращения к свойству или методу несуществующего объекта или ключу несуществующего массива. Почему бы её не использовать во благо и в MODX.

$nullObj = null;
// Ошибка
echo $nullObj->property;    // Trying to get property of non-object
// Использование функции optional помогает избежать данной ошибки
echo optional($nullObj)->property; // Выведет null

Функция html_attributes()

Эта функция преобразует переданный массив аргументов HTML тега в строку определённого формата. Она в полной мере используется в функциях css() и script().

html_attributes(['async', 'id' => 'id']);  // async id="id"

Новые возможности функций css() и script()

Главная доработка — возможность передать аттрибуты HTML соответствующего элемента в массиве или строке.

css('/path/to/styles.css', ['media' => 'print']); // <css src="/path/to/styles.css" media="print" rel="stylesheet"></script>
css('/path/to/styles.css', ['media' => 'print', 'rel' => 'alternate']); // <css src="/path/to/styles.css" media="print" rel="alternate"></script>

# Регистрация перед тегом <body>
script('/path/to/script.js', 'async'); // <script async src="/path/to/script.js"></script>
# Регистрация в секции <head>. Аргументы передаются третьим параметром
script('/path/to/script.js', true, ['async', 'defer', 'id'=>'some-id', class="some classes"]); 
// <script async defer id="some-id" class="some classes" src="/path/to/script.js"></script>

Также у этих двух тегов (link и script) убраны аттрибуты type. Если он вам нужен, придётся добавлять его самостоятельно.

0   2080

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

  1. Семён 03 апреля 2018 # +1
    Ништяковые доработки! Спасибо, Сергей.
    Особенно порадовала функция optional — я частенько в логах вижу ошибку чтения свойства у несуществующего объекта.
    1. Семён 13 апреля 2018 # 0
      Сергей, приветствую.
      Обратил внимание, что при обращении к классу Object.php, находящимся в папке modhelpers/classess
      Вылетает фатальная ошибка
      Fatal error: Cannot use 'Object' as class name as it is reserved in…
      Такую ошибку постоянно ловлю при использовании функций: resource() или object() в посредниках
      Конфигурация на которой была замечена ошибка: PHP 7.2 и MySQL 5.7 и MODX 2.6.2
      1. Сергей Шлоков 13 апреля 2018 # 0
        Ага. В 7.2 появилось это ограничение. Спасибо. В ближайшее время выпущу исправление.
      2. Skip 08 сентября 2018 # 0
        Доброе время суток! Установил плагин modhelpers, добавил csrf проверку по гайду выше. На сайте установлен Cron Manager, на хостинге раз в минуту запускается крон и выполняется сниппет который никак не влияет на работу плагина. Он просто проверяет некоторую информацию пользователей и все. Пробовал конечно и отключать этот сниппет — эффект один и тот же.

        На почту сыпется ошибка:
        Fatal error: Can't use function return value in write context in /var/www/userlogin/public_html/sitename.ru/core/components/modhelpers/functions/functions.php on line 1899
        PHP 7.1
        modHelpers 3.5.1

        Подскажите, почему падает ошибка на этот файл, если крон выполняет assets/components/cronmanager/cron.php.
        1. Сергей Шлоков 08 сентября 2018 # 0
          Ошибка в возникает в функции switch_context(). Почему, без понятия. Попробуйте разобраться самостоятельно. У меня нет возможности тестировать на совместимость все дополнения MODX.

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

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