Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Работа с BBCode'ами в расширениях

Форум для авторов расширений для phpBB. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
LimeBush
phpBB 1.0.0
Сообщения: 2
Стаж: 6 лет 6 месяцев
Благодарил (а): 2 раза

Работа с BBCode'ами в расширениях

Сообщение LimeBush »

Приветствую. Свела жизнь с phpBB 3.2.1.
Необходимо написать расширенную систему для BBCode'ов.
Цепляюсь к core.text_formatter_s9e_parse_before,
там вырубаю дефолтные BBCodes:

Код: Выделить всё

$event['parser']->disable_bbcodes();
И здесь возникает два вопроса.
1) Что делать со старыми сообщениями?
xml в базе содержит уже не сырые теги, а правленые:
<B><s>[b]</s>жирдяй<e>[/b]</e></B>
<CODE><s>[code]</s>код<e>[/code]</e></CODE>
[unknown]неизвестный тег[/unknown]

И он их всё равно отображает как и раньше.
Править сообщения в базе не хотелось бы.

2) Как парсить сообщения на предмет BBCode'ов?
Точнее, сам парсер сырого текста имеется,
цепялюсь к core.text_formatter_s9e_render_before.
Но что-то мне не очень нравится такое решение.
Хотелось бы объединить новую систему со старой,
чтобы заново не пилить теги b, i, и т.д.,
но поведение некоторых тегов необходимо поменять,
в частности quote и code.
Было бы неплохо подцепиться к стандартной системе,
и назначить свои callback-функции для ряда BBCode'ов.

Возможно ли такое провернуть для phpBB?
Перенесено из форума Поддержка phpBB 3.2.x в форум Для авторов 29.09.2017 1:06 модератором Sheer

Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Работа с BBCode'ами в расширениях

Сообщение rxu »

LimeBush писал(а): 28.09.2017 23:26Необходимо написать расширенную систему для BBCode'ов.
Давайте начнем с этого. Для меня эта задача звучит примерно так: "Необходимо изобрести колесо. Но старое круглое, и всё равно крутится. Как к нему подцепиться, чтобы новое круглое крутилось, а старое нет".
Поясняю. phpBB 3.2 использует расширенную систему для BBCod-ов. Называется она TextFormatter. Я не знаю, куда уже расширеннее то. Что бы вы сами не написали, это будет на несколько порядков менее расширенным, чем то, что уже есть.
Документация находится здесь http://s9etextformatter.readthedocs.io

После ознакомления - велкам. Ну и задачу я бы посоветовал либо уточнить, либо вообще поменять. Лучше начать с конечного результата - что должно быть на выходе.
Изображение
LimeBush
phpBB 1.0.0
Сообщения: 2
Стаж: 6 лет 6 месяцев
Благодарил (а): 2 раза

Re: Работа с BBCode'ами в расширениях

Сообщение LimeBush »

rxu писал(а): 29.09.2017 6:32Для меня эта задача звучит примерно так
Ваше мнение не выражает действительности.
rxu писал(а): 29.09.2017 6:32Необходимо изобрести колесо. Но старое круглое, и всё равно крутится. Как к нему подцепиться, чтобы новое круглое крутилось, а старое нет
Ваши фантазии оставьте при себе, пожалуйста.
Если нечего написать по теме, то лучше промолчите.
Ездили бы на деревянных колесах, как и раньше.
rxu писал(а): 29.09.2017 6:32phpBB 3.2 использует расширенную систему
Расширенная != расширяемая.
Это никуда не годная система.
[b]жирный[code]code[/code]текст[/b]
Получаем:
жирныйтекст[/b]

Ужас же. Оно не могёт даже вложенные теги,
не говоря уже о чем-то более заковыристом.
Почему-то моё "колесо" это могёт правильно распарсить,
а это "расширенное" - нет.

А теперь вопрос, как её расширить?
Например, мы можем в конфигуратор запхнуть callback, который принимает ...\Parser\Tag,
но вопрос в том, как тоже самое сделать для рендеринга?
Да и для парсера там текст внутри кода не поменяешь.

Работали с WordPress? Почему-то там это можно провернуть без
всяких "расширенных" библиотек, которые хороши
только когда делаешь что-то с нуля,
но ни фига не проектировались для расширения.
Приведу пример для WordPress,

Код: Выделить всё

add_filter( 'the_content', 'bbcode_filter' , 1 );
function bbcode_filter($content){
   //Делаю с содержимым поста (статьи) что угодно, например, обрабатываем теги так, как нам нужно
}
Для phpBB же мы перед рендером получаем кашу из xml,
а после рендеринга получаем html.
А где же тот промежуточный этап, с текстом,
который вводил пользователь, когда отправлял сообщение?
Оно в базу уже попадает со "вставками".
Можно отключить BBCode, тогда оно попадет без "навороченных" BBCode'ов в базу,
но старые сообщения всё равно будут парсится "по старому стилю".
И проблема здесь как раз та, что указана выше -
парсер на входе ждет xml, вместо голого текста, а на выходе дает html.
В общем, стремноватая для расширения система получается.
rxu писал(а): 29.09.2017 6:32Документация находится здесь http://s9etextformatter.readthedocs.io
Конечно же я её не видел. Куда уж мне.
rxu писал(а): 29.09.2017 6:32После ознакомления - велкам.
Не видно.
rxu писал(а): 29.09.2017 6:32Ну и задачу я бы посоветовал либо уточнить, либо вообще поменять.
Поменять?
- Мне нужно построить дом.
- Зачем он Вам? Купите автомобиль!
:lol:
Уточняю.

Есть текст с BBCode'ами, например:
[cpp mark='red:1,3,16-19;yellow:4,21']
Много кода C++. Строки 1,3,16, 17, 18, 19 выделены красным, а 4 и 21 - желтым.
[/cpp]


Или, например,
[code lang=cpp mark='red:1,3,16-19;yellow:4,21' driver=geshi]
Много кода C++. Строки 1,3,16, 17, 18, 19 выделены красным, а 4 и 21 - желтым.
Для подсветки используется geshi.
[/code]

[bash]Много кода Bash. С дефолтной подсветкой без изменений.[/bash]

[quote]Цитату необходимо предварительно обработать.
[quote]И вложенную цитату немного приукрасить.
[cpp mark='red:11']И еще код внутри цитаты покрасить[/cpp]
[/quote]
[/quote]

[textstyle=attention]Много текста с заданным стилем. Внутри могут быть вложенные коды, которые могут подчиняться собственным законам.[/textstyle]

И вот я спрашиваю, справится ли система phpBB с подобным?
В WodrPress, на который натянут основной сайт, такое делается без проблем.
Вопрос в том, как такое провернуть в расширениях phpBB
не прибегая к правке кода самого форума.
Если никак, то значит напишу то самое колесо,
до которого еще не дошла цивилизация phpBB.
rxu писал(а): 29.09.2017 6:32Лучше начать с конечного результата - что должно быть на выходе.
Конечный результат - система BBCode, способная обрабатывать сложные структуры.
На данный момент можно код этого колеса взять из основного сайта,
с небольшими изменениями в плане ограничения доступа к некоторым возможностей.
Но чтобы оно завелось, необходимо, чтобы рендеринг полностью
подчинялся нашим правилам и работал с голым текстом, а не с xml.

Пришла идея подцепиться к "core.text_formatter_s9e_renderer_setup", и поменять рендерер на свой.
Возможно ли? Пока нет возможности залезть в код phpBB, чтобы посмотреть как оно там работает.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: Работа с BBCode'ами в расширениях

Сообщение rxu »

LimeBush писал(а): 29.09.2017 12:56Если нечего написать по теме, то лучше промолчите.
ок, договорились.
Изображение
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12372
Стаж: 12 лет 7 месяцев
Благодарил (а): 223 раза
Поблагодарили: 3517 раз
Контактная информация:

Re: Работа с BBCode'ами в расширениях

Сообщение Татьяна5 »

LimeBush писал(а): 29.09.2017 12:56с подобным?
С подключением geshi и передачей туда параметров? Конечно. Отключать стандартные ббкоды для этого не надо
Формат ббкода
[cpp="mark='red:1,3,16-19;yellow:4,21'"]...[/cpp]

Отправлено спустя 1 минуту 41 секунду:
LimeBush писал(а): 29.09.2017 12:56А где же тот промежуточный этап, с текстом,
который вводил пользователь, когда отправлял сообщение?
На этапе отправки сообщения. Больше он нигде не нужен
Ответить

Вернуться в «Для разработчиков»