Парсинг BBCode через AJAX

Board index phpBBex 1.x Предложения и пожелания

Description: В phpBBex 1.x чего-то не хватает? Напишите об этом здесь, и мы постараемся исправиться.
Forum rules: Одна тема — один запрос новой возможности. Обязательно формируйте внятный заголовок, максимально отражающий суть вашей идеи. Также приведите примеры, где предлагаемая вами возможность будет актуальна.
Moderator: Поддержка

Post #1by factotum » 28.09.2013, 13:09

Есть ли способ получить доступ к обработчику bbcode средствами темы через AJAX?

Уперся в это как минимум с двумя вопросами:
Превью сообщений (bbcode -> html)
Цитаты (html -> bbcode)

На JS напишу без проблем, но это не решит вопросов с кастомными bbcode. Либо инициализировать настройки bbcode, либо получить доступ к обработчику.

Нужен совет, куда копать?
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Topic author, Гуру
Location: Люксембург
Reputation: 234
With us: 7 years 9 months

Post #2by VEG » 28.09.2013, 13:38

Нужно сделать отдельный скрипт, который на вход будет получать текст в формате BBCode, а в ответе он будет отдавать HTML. Вот пример скрипта, который должен конвертировать содержимое переменной text (в GET или POST) из BBCode в HTML (набросал прямо здесь, не тестировал):
Code: Select all
<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);

// Parse BBCode
include_once($phpbb_root_path . 'includes/message_parser.' . $phpEx);
$message_parser = new parse_message(utf8_normalize_nfc(request_var('text', '', true)));
$message_parser->parse(true, true, true);
$message_parser->format_display(true, true, true);
echo $message_parser->message;

К сожалению, обратная процедура (HTML в BBCode) не предусмотрена.
С наилучшими пожеланиями, Евгений
VEG M
Администратор
Avatar
Age: 32
Location: Минск, Беларусь
Reputation: 1576
With us: 7 years 9 months

Post #3by factotum » 28.09.2013, 13:52

Ага, то есть прямая дорога в ядро?
VEG wrote:К сожалению, обратная процедура (HTML в BBCode) не предусмотрена.
У Вас для цитат используется postrow.DECODED_MESSAGE. Не оно? или сообщения можно вытянуть из базы в bbcode?
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Topic author, Гуру
Location: Люксембург
Reputation: 234
With us: 7 years 9 months

Post #4by Sumanai » 28.09.2013, 14:05

factotum wrote:или сообщения можно вытянуть из базы в bbcode?

Именно так. Посмотри в исходный код страницы на форуме, если включено полное цитирование (тут оно отключено). Сообщение дублируется дважды, в виде HTML и BBCode с скрытом поле.
Но сообщения в виде BBCode сохраняются в БД при отправке, а при отображении конвертируются в HTML. Функции обратного преобразования нет.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1669
With us: 7 years

Post #5by factotum » 28.09.2013, 14:22

Sumanai wrote:если включено полное цитирование (тут оно отключено). Сообщение дублируется дважды, в виде HTML и BBCode с скрытом поле.
это и не понравилось.
Все, разобрался. DECODED_MESSAGE парсит переносы строк. это сделать без проблем на js
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Topic author, Гуру
Location: Люксембург
Reputation: 234
With us: 7 years 9 months

Post #6by Sumanai » 28.09.2013, 14:29

factotum wrote:это и не понравилось

А как ещё? Писать отдельный парсер HTML в BBCode на яваскрите.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1669
With us: 7 years

Post #7by VEG » 28.09.2013, 14:30

factotum, поскольку все страницы обычно сжимаются gzip, объём трафика увеличивается незначительно.
С наилучшими пожеланиями, Евгений
VEG M
Администратор
Avatar
Age: 32
Location: Минск, Беларусь
Reputation: 1576
With us: 7 years 9 months

Post #8by factotum » 28.09.2013, 14:48

Sumanai wrote:А как ещё? Писать отдельный парсер HTML в BBCode на яваскрите.
если делать под себя, то парсить без проблем, на локалке парсер работает на ура. Хуже с универсальностью. Тут этот метод не подойдет, либо нужно выносить в код инициализацию настроек парсера.
Если по другому, вытягивать сообщение в bbcode через AJAX, далее по текущей схеме.
VEG wrote:поскольку все страницы обычно сжимаются gzip, объём трафика увеличивается незначительно.
Нормальная реализация получения постов через AJAX откроет ворота к быстрому редактированию, превью. Цитаты уже сами просятся.
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Topic author, Гуру
Location: Люксембург
Reputation: 234
With us: 7 years 9 months

Post #9by Sumanai » 28.09.2013, 14:54

factotum wrote:Нормальная реализация получения постов через AJAX откроет ворота к быстрому редактированию, превью.

Думаю, это не так уж и сложно- получить пост по id, даже с учётом проверки прав и тому подобного.

factotum wrote:Цитаты уже сами просятся.

ИМХО, вот это уже лишнее. Аякс запрос отнимает хоть и небольшое, но время. А писать хочется сразу же. Придётся или вешать "подождите, загружаю" на страницу, или удивлять пользователей вставляющейся цитатой с задержкой, а то и несколькими, ведь если один тык не сработал, среднестатистический пользователь ткнёт ещё раз десять.

Added after 2 minutes 30 seconds:
factotum wrote:либо нужно выносить в код инициализацию настроек парсера.

Считаю, что подобный код будет весить не меньше, чем пара скрытых постов сейчас при включённой быстрой цитате. А так как этот код не вывести в яваскрипт файл, то тягаться он будет каждый раз, даже если на странице один пост. Так что экономия если и будет, то копеечная.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1669
With us: 7 years

Post #10by factotum » 28.09.2013, 15:09

Sumanai wrote:Считаю, что подобный код будет весить не меньше, чем пара скрытых постов сейчас при включённой быстрой цитате.
код будет сопоставим с кодом bbcode.html.
По объему это примерно только один Ваш последний пост.

Тут можно посмотреть как реализованы настройки кнопок редактора. Разметка пока в черновом варианте, но реализация достаточно удобная - теги, горячие клавиши и все связанное настраиваются прозрачно. Alt+Click - альтернативные кнопки (реализовано пока для списков). Удалось сохранить универсальность настроек.
Сама панель с кнопками генерируются динамически исходя из настроек. Работает это достаточно быстро.

В планах спрятать скрипт настроек в невидимом блоке c JSON, как это сделано с настройками скрипта выбора страницы. Так при загрузке страницы браузер не тратит время на обработку JS в коде страницы. Cкрытый блок не отражается на времени рендеринга. Работает это также достаточно быстро
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Topic author, Гуру
Location: Люксембург
Reputation: 234
With us: 7 years 9 months

Post #11by Sumanai » 28.09.2013, 16:03

factotum wrote:Тут можно посмотреть как реализованы настройки кнопок редактора.

Ctrl+С перекрывает стандартную комбинацию- из поля ввода сообщения ничего не копировать привычным сочетанием :sad:
Так же почему- то клик правой кнопкой мыши обрабатывается как клик левой. Захотел посмотреть исходный код в файрбаге- пришлось продираться через кучу вложенных блоков. Но это не критично для ежедневного использования.
Ещё не всегда удаётся навести мышь на всплывающие блоки с цветами, смайлами и размерами текста.
А так ничего, пашет.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1669
With us: 7 years

Post #12by factotum » 28.09.2013, 16:20

Sumanai wrote:Ctrl+С перекрывает стандартную комбинацию- из поля ввода сообщения ничего не копировать привычным сочетанием
Сочетания клавиш настраиваются еще проще, чем кнопки. Пока вкинул базовый функционал. На выходе шлифанется
Sumanai wrote:Так же почему- то клик правой кнопкой мыши обрабатывается как клик левой.
для кнопок это нормально. Не вижу проблем. При желании всегда можно поправить.
Sumanai wrote:Захотел посмотреть исходный код в файрбаге- пришлось продираться через кучу вложенных блоков
Поправим :smile:
Sumanai wrote:Ещё не всегда удаётся навести мышь на всплывающие блоки с цветами, смайлами и размерами текста.
Черновик. Пока думаю как лучше разбежаться между ховером и точем. Ховер интегирован в плагин редактора. Не совсем согласен с его работой. Если получится что-то путное - пропихнем пулл в мастер markitup :smile:
Sumanai wrote:А так ничего, пашет.
Пашет. Но хочу превью на аджаксе. Думаю, за выходные прикручу. Murkitup имеет некоторую нативную функциональность для превью, а этого недостачно, чтобы корректно парсить bbcode. Не сторонник правок на уровне ядра phpBB. Вот и искал какой шлюз, чтобы этого избежать.
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Topic author, Гуру
Location: Люксембург
Reputation: 234
With us: 7 years 9 months

Post #13by Sumanai » 28.09.2013, 16:32

factotum wrote:Но хочу превью на аджаксе. Думаю, за выходные прикручу.

Я тоже хочу :smile:
Это будет намного лучше, чем всякие визуальные редакторы, если правильно реализовать. А именно (в моём видении) это превью ничем не должно отличаться от поста, кроме положения и заголовка над ним. То есть должен над блоком "Быстрый ответ" появляться блок с готовым сообщением и пометкой выше "Предпросмотр". Ну а при нажатии "Отправить" этот блок должен плавно переместится выше (если не было правок), реализуя тем самым быструю отправку сообщения.

factotum wrote:Не сторонник правок на уровне ядра phpBB.

VEG и сам хотел реализовать предпросмотр. Если вы будете работать совместно- правки на уровне ядра будут не нужны, они будут интегрированы в следующую версию phpBBex :biggrin: Вам же останется только пилить шаблон.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1669
With us: 7 years

Post #14by factotum » 28.09.2013, 16:49

Sumanai wrote:Вам же останется только пилить шаблон.
я бы радостью его пилил. но:
цитирование - не согласен с нынешней реализацией.
поиск - шаблон не отдает даже элементарной аватары (для {searchresults.POSTER_AVATAR} кукиш). только ник и рейтинг. обойти без правок на уровне ядра возможно?
быстрое редактирование - нужны правки ядра
превью - нужны правки ядра
отправка аджакс - правки на уровне ядра

Если бы было в phpBBex - реализовал бы без проблем, как это сделано для системы рейтинга. Вынести js из шаблона и поправить для собственной разметки - много ума не нужно :ill:

Посмотрим по концовке. Может чего и сделаю. Тогда выкачу пулл в мастер phpBBex :kettle:
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Topic author, Гуру
Location: Люксембург
Reputation: 234
With us: 7 years 9 months

Post #15by Sumanai » 28.09.2013, 16:57

factotum wrote:цитирование - не согласен с нынешней реализацией.

То есть всё- таки хочешь реализацию с обратным парсером?

factotum wrote:отправка аджакс - правки на уровне ядра

phpBBex — добавляем автозагрузку классов и обработчики AJAX запросов
Там правок то будет с гулькин нос, как я понял. Но документации особо нет.

В остальном- пообщайся с VEG. Лично я за совместный труд и более быстрое развитие движка.
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1669
With us: 7 years

Post #16by factotum » 28.09.2013, 17:08

Sumanai wrote:То есть всё- таки хочешь реализацию с обратным парсером?
Если делать для себя, то подойдет. А так, метод не универсален. Посмотрим, насколько быстро можно вытянуть пост через аджакс-запрос. На моем не быстром локалхосте с тормозами ipv6 уровень терпимости измеряется достаточно быстро.) В конце концов кеширование запросов никто не отменял.
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Topic author, Гуру
Location: Люксембург
Reputation: 234
With us: 7 years 9 months

Post #17by HD321kbps » 28.09.2013, 17:19

Объединяйтесь )
HD321kbps M
Гуру
Avatar
Age: 29
Location: Армянск
Reputation: 375
With us: 6 years 11 months

Post #18by factotum » 28.09.2013, 20:34

VEG wrote:набросал прямо здесь, не тестировал
ага, работает в livepreview. осталось пропарсить смайлы и вложения.

Added after 4 minutes 4 seconds:
ну и лайвпревью не совсем подойдет при использовании бб-медиа/ajax-based бб-тегов.
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Topic author, Гуру
Location: Люксембург
Reputation: 234
With us: 7 years 9 months

Post #19by Sumanai » 28.09.2013, 20:46

factotum wrote:ага, работает в livepreview. осталось пропарсить смайлы и вложения.

Посмотреть где можно? На тестовом форуме нельзя зарегистрироваться, а при вводе капчи "Ошибка отправки формы".
Использование поиска продлевает жизнь.
Это форум поддержки форка phpBBex. Поддержка по phpBB осуществляется в других местах.
Sumanai M
Гуру
Avatar
Reputation: 1669
With us: 7 years

Post #20by factotum » 28.09.2013, 20:56

осталось пропарсить смайлы и вложения.вложения отложены до лучших времен. смайлы парсит. жизнь наладилась)

Sumanai wrote:Посмотреть где можно?
пока на локалке. если повезет со временем, в понедельник выложу.
Sumanai wrote:На тестовом форуме нельзя зарегистрироваться, а при вводе капчи "Ошибка отправки формы".
там копия форума крутится без настроек для домена. Чтобы были понятны реальные примеры контента. пока тестировать нечего)

Added after 3 minutes:
http://www.4seven.de/forum/4test/viewtopic.php?p=22#p22
тут рабочий пример Livepreview. Довести до ума и будет счастье
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Topic author, Гуру
Location: Люксембург
Reputation: 234
With us: 7 years 9 months

Next

Return to Предложения и пожелания