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

  • Добавлена функция 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. Если он вам нужен, придётся добавлять его самостоятельно.

    02 апреля 2018, 17:04   342     5

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

    1. Семён 03 апреля 2018, 08:26 # +1
      Ништяковые доработки! Спасибо, Сергей.
      Особенно порадовала функция optional — я частенько в логах вижу ошибку чтения свойства у несуществующего объекта.
      1. Семён 13 апреля 2018, 16:40 # 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, 16:54 # 0
          Ага. В 7.2 появилось это ограничение. Спасибо. В ближайшее время выпущу исправление.
        2. Skip 08 сентября 2018, 02:20 # 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, 10:59 # 0
            Ошибка в возникает в функции switch_context(). Почему, без понятия. Попробуйте разобраться самостоятельно. У меня нет возможности тестировать на совместимость все дополнения MODX.

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

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