[pdoTools] 2.3.2 - автозагрузка модификаторов

Вот и подоспело очередное, уверен, горячо ожидаемое обновление pdoTools.

На этот раз я придумал, как можно иначе подключать Fenom, что дало возможность реализовать кучу встроенных модификаторов, а там где их не хватит — автозагрузку модификаторов из сниппетов.

Системная настройка pdotools_fenom_modifiers больше не нужна и удаляется при установке обновления. Если указанный модификатор не найден, то работа не останавливается, как раньше, и вы просто получаете ошибку в лог.

Следует учесть, что я реализовал не все фильтры MODX (но очень много), и не все из них работают точно так, как в MODX — поэтому потрудитесь прочитать документацию, прежде чем жаловаться, что у вас там опять что-то не того.

Ссылка на подробнейшую документацию отдельно, чтобы все заметили.

Итак, список всех модификаторов Fenom, чтобы вы могли оценить объём работы:
  • upper, up, strtoupper, ucase, uppercase
  • lower, low, strtolower, lcase, lowercase
  • date_format
  • date
  • truncate
  • escape, e
  • unescape
  • strip
  • length, len, strlen
  • iterable
  • replace
  • ereplace
  • match
  • ematch
  • split
  • esplit
  • join
  • in
  • md5
  • sha1
  • crc32
  • urldecode
  • urlencode
  • rawurldecode
  • base64_decode
  • base64_encode
  • http_build_query
  • print_r
  • var_dump, dump
  • nl2br
  • ellipsis
  • ucwords
  • ucfirst
  • htmlentities, htmlent
  • limit
  • esc, tag
  • notags, strip_tags, stripTags, striptags
  • stripmodxtags
  • cdata
  • reverse, strrev
  • wordwrap
  • wordwrapcut
  • fuzzydate
  • ismember, memberof, mo
  • isloggedin
  • isnotloggedin
  • url
  • lexicon
  • user, userinfo
  • resource
  • print
  • setPlaceholder, toPlaceholder
  • placeholder, fromPlaceholder
  • cssToHead
  • htmlToHead
  • htmlToBottom
  • jsToHead
  • jsToBottom
  • toJSON, json_encode
  • fromJSON, json_decode
  • option, setOption
  • getOption
Обратите внимание на модификаторы resource, user, config, placeholder — это доступ к ресурсам, юзерам и массивам плейсхолдеров и конфигурации системы.

Отдельно хочу отметить просто замечательный модификатор print, который печатает, экранирует и выводит любую переменную в теге pre.
{15 | resource | print}
{15 | resource : 'properties' | print}
{10 | user : 'extended' | print}
и вы получаете полностью распечатанный массив ресурса 15, потом его поля properties и extended юзера 10.
В общем, это крайне полезно для отладки при разработке сайта.

Обновляемся, пишем отзывы.
Василий Наумкин
26 марта 2016, 07:11
modx.pro
5
4 610
+17

Комментарии: 13

Наумов Алексей
26 марта 2016, 11:02
+1
Обновился! print — работает))) Теперь pre ручками писать не нужно, спасибо!
    Владимир
    26 марта 2016, 11:59
    0
    paypal понес тебе «Спасибо»!
    Павел Гвоздь
    26 марта 2016, 12:13
    +7
    Василий, моё восхищение не передать словами!

    Я однажды говорил тебе, что не могу уважать тебя из-за того, что ты употребляешь алкоголь, и помимо этого наговорил много других гадостей. Сейчас хочу публично попросить у тебя прощения! Я извиняюсь за те оскорбления, которые тебе высказал, и мне правда стыдно!

    Во-истину говорят, что люди в нашей жизни не случайны. Ты, скорее всего сам того не подозревая, многое сделал для того, чтобы я переоценил своё отношение к разным вещам. В частности к отношениям с людьми, у которых несколько иное восприятие жизни, в отличие от меня. Не хорошее, и не плохое, а просто иное. Спасибо тебе за это! Я уважаю тебя, как человека, потому что ты хороший человек!

    P.S.: Не этот пост всё поменял для меня, я уже давно вынашивал планы извиниться. Этот пост показался мне хорошим местом, где можно сделать это.
      Василий Наумкин
      26 марта 2016, 14:35
      +4
      Не хорошее, и не плохое, а просто иное
      Золотые слова, на здоровье!

      Никаких проблем. Та учётная запись, что оставляла нехорошие комментарии, давно отключена. А это пишет другая, хорошая учётная запись =)
        r5uY40
        29 марта 2016, 19:27
        -1
        Sorry, промахнулся на смартфоне. Безусловно плюсовал.
      Сергей Шлоков
      26 марта 2016, 12:28
      0
      Супер.

      Вот тут опечатка
      json_encode (fromJSON), json_decode (fromJSON)
      Василий Столейков
      26 марта 2016, 16:01
      +2
      Нет слов передать всё моё восхищение проделанной работой — это то чего очень не хватало!
      Теперь MODX превратился из сказки в утопию… =)
        Petro
        01 апреля 2016, 01:59
        0
        Василий
        Вот что заметил. Помогите понять почему так
        У меня на странице есть вызов
        [[!FormIt?
        &hooks=`subscribe,redirect`
        &submitVar=`btnsubscribe`
        &redirectTo=`35`]]

        Есть сниппет subscribe, который вызывает функцию subscription с определенного класса. В функции происходит обработка введенных данных и отправляется письмо. Текст для письма берется из чанка
        $message = $this->modx->getChunk('subcribe', $array);

        В чанке subcribe есть следующий код:
        {if $_modx->config.cultureKey == 'uk'}
        текст на русском языке; {$name}
        {else}
        текст на английском языке; {$name}
        {/if}

        И эта вся конструкция работает. В зависимости от того в каком контексте я заполняю форму, такой текст и отправляется.

        Но если вызов сниппета FormIt я делаю таким
        {$_modx->runSnippet('!FormIt', [
        'hooks' => 'subscribe,redirect',
        'submitVar' => 'btnsubscribe',
        'redirectTo' => 35
        ])}
        То тогда этот синтаксис Fenom уже не срабатывает, {$name} приходится заменять на [[+name]] и чанк разделять на два варианта (рус. и англ.). Вот хочется понять почему так. Объясните, пожалуйста
          Droug
          13 апреля 2016, 12:23
          +1
          Очень приближенно нужно вместо
          $message = $this->modx->getChunk('subcribe', $array);
          Написать что-то такое:
          $pdoTools = $this->modx->getService('pdoTools');
          $message = $pdoTools?$pdoTools->getChunk('subcribe', $array):$this->modx->getChunk('subcribe', $array);
            Petro
            15 апреля 2016, 19:29
            0
            спасибо
          Владимир
          19 августа 2016, 22:19
          0
          использую Jevix как модификатор, но по умолчанию он не вырезает переносы строки
          к модификатору параметры &cfgSetAutoReplace=`[["±","©","©","®","©","©","®","
          "],["±","©","©","®","©","©","®"," "]]`]]" добавить бы .., как бы это попроще сделать?

          {if $_modx->resource.description?} 	
          {set $articledescription = $_modx->resource.description | jevix}
          {else} 
          {set $articledescription = $_modx->runSnippet('!summary', [
          'text' => $_modx->resource.content,
          'len' => 150,
          ])}
          <meta property="og:description" lang="{$_modx->config.cultureKey}" content="{$articledescription | jevix}" />
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            13