Обновил Jevix, версия 1.1.0

По мере развития Tickets становятся видны некоторые недостатки пакета для фильтрации контента — Jevix.

С связи с чем проведены следующие работы:
  • Взял класс Jevix с LiveStreet, что дало новую настройку cfgSetTagBlockType и пару фиксов. Настройка позволяет указать блочные элементы, после которых не нужно ставить тег br, то есть — не будет лишнего отступа. Наконец то я смог прижать заголовки абзацев к тексту!
  • Протюнил немного дефолтные настройки, в частности включил вывод таблиц.
  • В ссылках теперь можно указывать теги MODX, типа [[~15]] или [[+link]]
  • Самое главное новшество — параметр cfgSetAutoPregReplace. Про него подробнее.

cfgSetAutoPregReplace

У Jevix есть по умолчанию параметр cfgSetAutoReplace, который заменяет значения одного массива на значения другого, функцией str_ireplace().

Не знаю, почему авторы не сделали эту замену с подержкой регулярных выражений, но она явно напрашивалась! Поэтому, я добавил новый параметр cfgSetAutoPregReplace, в котором вы так же указываете два массива, pattern и replace, но теперь — регулярками.

Основная задача была внедрить обработку видео тегами
<videо>https://www.youtube.com/watch?v=2IUTlTtoaSE</video>
и
<videо>http://youtu.be/2IUTlTtoaSE</video>
На первый взгляд, ничего сложного — парсим тег, выдергиваем параметры и вставляем в тег <ifrаme>.

Однако, сразу вылезает проблема: если применить эту замену до основной обработки, то её результаты будут вырезаны, ибо опасный тег <ifrаme> мы юзерам не разрешаем.
А если добавить тег <videо> в разрешенные и сделать обработку после, то Jevix обработает ссылки внутри тега, и завернет их в тег <а>.

Конечно, можно попытаться как-то хитро настроить правила фильтрации, но возможность добавлять свои регулярные замены выглядит гораздо более соблазнительно, согласитесь?

Поэтому я изменил Jevix так, чтобы он собирал все совпадения регулярок в тексте, менял их на временные плейсхолдеры, типа (((((0-1))))), затем парсил текст и после этого менял мои плейсхолдеры на финальные значения.

То есть, обработка текста проводится и до и после. Одна функция preg_match_all(), один цикл разбора ее результатов и 2 str_replace().

Заключение

Ограничений на правила нет, может быть сколько угодно совпадений по каждому из них. В плейсхолдере первое число значит индекс правила в массиве, а второе — индекс совпадения. Поэтому и выходят (((((0-5))))), (((((2-1))))) и т.д.

Сильно увлекаться не советую, может замедлять работу на больших текстах, если укажете много регулярок. Но, если вам нужно что-то изменить в обход основных обработок Jevix — это оно. Причем, все настраивается из админки, в параметрах сниппета, а юзерам LiveStreet нужно править исходники =(

В обновленном пакете правила для видео уже прописаны, можно использовать как образец для собственных регулярок. Если новая функция не нужна — просто очистите параметр.

Следующая заметка
Обновил Tickets, версия 0.5.0
Предыдущая заметка
Выпустил Tickets


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

    Добавление новых комментариев отключено.