В данной версии расширены возможности работы с сессией и почтовыми уведомлениями. Вот список изменений:

  • Изменена сигнатура функции «session». Это очень важное изменение.
  • Добавлена функция «session_pull».
  • Добавлена функция «default_if».
  • Добавлен метод «tpl» к классу modHelpersMailer.
  • Добавлен метод «log» к классу modHelpersMailer.
  • Добавлен метод «toArray» к классу modHelpersMailer.
  • Теперь давайте пробежимся по порядку.

    Функция session()

    Теперь она имеет следующую сигнатуру

    session($key = null, $default = null, $flat = false)

    Теперь чтобы записать значение в сессию нужно передать значение через массив:

    session(['key' => 'value']);

    Получить значение:

    session('key', 'default');

    Вторым параметром указывается значение по-умолчанию, если в сессии не существует указанного ключа.

    Третий параметр $flat используется для отключения парсинга точечной нотации ключа (по-умолчанию он включён).

    // С парсингом
    session(['key1.key2' => 'value']); // $_SESSION['key1']['key2'] = 'value';
    // Без парсинга
    session(['key1.key2' => 'value'], true); // $_SESSION['key1.key2'] = 'value';
    

    Эта возможность иногда может пригодится, так как MODX пишет некоторые ключи с точками — 'modx.user.0.attributes'.

    Функция session_pull()

    Данная функция получает из сессии значение по указанному ключу и удаляет этот ключ из сессии. Это пригодится для вывода одноразовых сообщений на странице. Например, в php скрипте записываем сообщение в сессию

    if ($someError) {
        session(['error.message' => "Это сообщение будет показано только один раз!"]);
    }
    

    А в HTML разметке выводим через шаблонизатор (например, Fenom)

    <div>
        {$.php.session_pull('error.message')} 
    </div>
    

    Функция default_if()

    Эта функция выдаёт определённое значение в зависимости от условий. Её можно использовать как альтернативу такому коду

    if (!isset($var)) {
        $var = 'default';
    }
    

    Теперь это же можно сделать так

    $var = default_if($var, 'default');

    Или вместо того, чтобы писать так

    $var = isset($object->method()) ? $object->method() : 'default'; 

    пишем так

    $var = default_if($object->method(), 'default'); 

    В таком варианте первый параметр проверяется на существование. Если он не существует или равен null, то возвращается дефолтное значение. Но у функции есть третий параметр, который позволяет переопределить сравниваемое значение. Т.е. в нём можно указать значение, при равенстве с которым первого параметра будет возвращено дефолтное значение.

    Приведу пример для ясности.

    $message = default_if($data, 'Массив пустой!', array()); 
    // замена следующему коду
    if (isset($data) && $data == array()) {
        $message = 'Массив пустой!';
    }
    

    Мне эта функция пригодилась. Возможно ещё кому-нибудь понравиться.

    Уведомления

    Три последних изменения коснулись класса мейлера библиотеки.

    Первое — добавлен метод tpl(), который позволяет добавлять чанк (стандартный или файловый) для контента.

    email()
        ->to('user1@mail.ru')
        ->toUser(5)
        ->cc('user2@mail.ru') 
        ->subject('Subject')
        ->tpl('chunkName or file', $params) // игнорируется, если контент указан методом content()
        ->from('Administrator')
        ->replyTo('admin@mysite.com')
        ->attach('path/to/file1.jpg')
        ->send();
    

    Два остальных метода пригодятся при тестировании email уведомлений. Особенно это актуально для локальной разработки.

  • Метод log() используется для вывода массива данных уведомления в лог системы. Если передать аргумент true, то вывод будет в формате JSON.
  • Метод toArray() используется для получения данных уведомления. Если передать аргумент true, то массив выведется через print_r().
  • Оба эти метода конечные и используются вместо метода send().

    email()
        ->to('user1@mail.ru')
        ->toUser(5)
        ->cc('user2@mail.ru') 
        ->subject('Subject')
        ->tpl('chunkName or file', $params)
        ->from('Administrator')
        ->replyTo('admin@mysite.com')
        ->attach('path/to/file1.jpg')
        ->log();
    

    На этом всё.

    06 августа 2017, 09:08   617     5

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

    1. Семён 25 сентября 2017, 10:22 # 0
      Сергей, здравствуйте.
      Пробую использовать функцию проверки на мобильность, чтобы отдавать другую вёрстку для мобильных устройств
      Для этого использую пример кода из документации
      {if is_mobile()}
      <h1>МОБИЛЬНИК</h1>
          {include "file:templates/mobile/index.tpl"}
      {else}
      <h1>ДЕСКТОП</h1>
          {include "file:templates/index.tpl"}
      {/if}
      
      Но всё время получаю одну и ту же ошибку
      [2017-09-25 10:19:36] (ERROR @ W :\domains\redactor.loc\core\components\pdotools\model\pdotools\_fenom.php : 652) PHP warning: Missing argument 1 for FenomX::{closure}(), called in W :\domains\redactor.loc\core\components\pdotools\vendor\fenom\fenom\src\Fenom\Template.php(487) : eval()'d code on line 4 and defined
      [2017-09-25 10:19:36] (ERROR @ W :\domains\redactor.loc\core\components\pdotools\model\pdotools\pdotools.class.php : 344) [pdoTools] Could not load snippet "is_mobile"
      
      Компонент установлен, может ещё что-то нужно где-то включить, чтобы заработало?
      1. Сергей Шлоков 25 сентября 2017, 16:00 # 0
        Здравствуйте!
        Честно говоря, не знаю. А настройки Fenom все включены?
        1. Семён 25 сентября 2017, 20:02 # 0
          Да и чанки и шаблоны им обрабатываются.
          Проверил на modhost та же проблема, оставил лог с ошибками.
          Если будет возможность посмотрите, пожалуйста, печально будет если компонент перестанет работать, очень выручает в проектах.
          Вот доступы:
          s11091.h5.modhost.pro/manager/
          s11091
          9alUi3reM9rz
          1. Сергей Шлоков 25 сентября 2017, 21:56 # 0
            Должен быть разрешен php в Fenom. is_mobile() — это php функция.
            1. Семён 26 сентября 2017, 07:25 # 0
              Сергей, спасибо огромное.
              Просто настолько привык к Fenom, что уже порой кажется, он может всё, что может php и без php ))

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

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