Блог хеллоуворлдщика

Простой и мощный текстовый редактор для Yii2 использующий парсер BB-кода и фильтр HtmlPurifier


В связи с тем, что потребовалось реализовать свой редактор с индивидуальной разметкой я сначала посмотрел в сторону wisiwyg Imperavi, попробовал его расширить, и пришёл к выводу, что в моём случае он не подходит, т.к. обычный пользователь может навставлять такое огромное количество лишний HTML тегов, что это приводит к тому, что всё съезжает. Да и вообще, мне лично никогда wisiwyg не нравились, очень сложно уследить за тем, чтобы разметка была корректна и правильная, что не скажешь, например о Markdown или обычным редактором на BB-кодах.

Далее я подумал, что стоит посмотреть в сторону Markdown, но опять же, вспоминая о том, что редактором будут пользоваться обычные пользователи, то решил использовать редактор на BB-кодах, который использует практически на всех форумах, который легко расширяется, очень мощный и на выходе у нас имеется корректная разметка контента без каких-то артефактов.

И я сразу же "нырнул" в GitHub, где нашел, по моему мнению, отличный парсер BB-кодов, который просто расширяется, очень мощный и простой. Немного его модернизировав я написал bahavior для ActiveRecord, который срабатывает до принятия изменений. Так-же в коробке есть HtmlPurifier, который можно включить до передачи контента на обработку парсеру BB-кодов и после обработки. Настройки для каждого из варианта разные.

Страница расширения на GitHub: https://github.com/bupy7/yii2-bbcode

Страница расширения на Packagist: https://packagist.org/packages/bupy7/yii2-bbcode

Страница на jBBCode: https://github.com/jbowens/jBBCode

Страница на HtmlPurifier: https://github.com/ezyang/htmlpurifier

share via vkontakte share via facebook share via mailru share via odnoklassniki share via twitter

Комментарии [16]

[Андрей] 24 марта 2015 г., 23:43:03

Хотелось бы увидеть скриншот

Администратор [BUPY7] 25 марта 2015 г., 9:09:55

А что там на нем смотреть?) Это behavior, который вешается на модель. Это не визуальный редактор.

[MULAT] 30 марта 2015 г., 11:30:20

Спасибо, попробую.

[MULAT] 31 марта 2015 г., 9:23:50

Попробовал, всё круто, спасибо. Сделал экстеншн от BBCodeBehavior, чтобы при чтении записи из базы конвертировать текст в bbcode. Сделал метод afterFind() и в нём проверил Parser->getAsBBCode() может только восстанавливать незакрытые BB тэги. А я думал что он из HTML конвертирует в BB. Посмотрел JBBCode - но он вроде как не задумн для таких конвертаций. Только в HTML Хочу в базе хранить всё в HTML, а в редактор выводить в BB.

Хотел спросить - подскажи пожалуйста, есть ли какой виджет.. в общем визуальная часть редактора, с которой можно подружить этот компонент?

Администратор [BUPY7] 31 марта 2015 г., 10:53:48

А зачем такие манипуляции и для чего? Это behavior для парсинга BB-кода и преобразования его в HTML, после, запись в соответствующее поле в таблицы, из которого мы потом достаём уже готовый результат и не тратим ресурсы на преобразование. В общем, мне не понятно, что вы делаете и для чего. =)

Визуальной части никакой нет, но вы можете её написать сами. =)

[MULAT] 31 марта 2015 г., 11:09:23

Просто я хочу в базе хранить текст в html виде. Потом без всяких преобразований выводить его на странице сайта. Ну а в админке выводить в редактор в формате BBCode. Вроде нет никакого изврата.

Администратор [BUPY7] 31 марта 2015 г., 11:39:23

Дак, так и есть как бы. =)

Администратор [BUPY7] 31 марта 2015 г., 11:43:00

Покажите, как вы подключили behavior. Код оберните в ~~~.

[MULAT] 31 марта 2015 г., 11:22:02

Насчёт визуальной части - напишу, если не найду ничего подходящего. Только вливаюсь в YII2. Классный фреймворк. До этого только на голом PHP делал движёк. Сейчас цель - написать новую CMS и заодно изучить YII.

Администратор [BUPY7] 31 марта 2015 г., 11:41:15

Не вижу смысла создавать CMS на фреймворке. Всё таки это такой инструмент, с помощью которого можно создавать нестандартные проекты, узко заточенные. Если стоит задача сделать сайт-визитку, то лучше использовать готовые CMS. ИМХО.

[MULAT] 31 марта 2015 г., 12:06:29

О нет) Готовые CMS не хочу. Свои проекты на самописе. Надо их выводить на новый уровень. Пилить сервисы. Начал пока с CMS - Блог с категориями, статьями, комментариями. Потом буду модули другие делать. Документация отличная. Прочитал почти всю уже. Сейчас вроде как осела в голове и начал писать. Очень помог пример от vova07.. ну и конечно bupy7 ;)

Администратор [BUPY7] 31 марта 2015 г., 11:47:41

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

[MITHRANDIR] 05 февр. 2016 г., 23:01:45

Спасибо! Захотелось использовать данное расширение в связке с визуальным редактором wysibb. Однако для моей задачи кроме конвертирования BB кодов в HTML, требуется обратное конвертирование в BB коды (для редактирования пользователями их сообщений). Подскажите, пожалуйста, этот парсер не позволяет делать обратное преобразование?

Администратор [BUPY7] 06 февр. 2016 г., 12:22:02

Если память не изменяет, то позволяет. Все информация о парсере есть здесь.

Администратор [BUPY7] 06 февр. 2016 г., 12:25:06

Самый лучший и правильный вариант в вашем случае хранить 2 вида содержимого: raw и html. В raw храните bb-коды, а html отдавайте на отображение. И ничего не нужно будет конвертировать. Изначально, именно для таких действий и создавалось поведение.

[MITHRANDIR] 07 февр. 2016 г., 9:46:48

Понял, спасибо за рекомендации!