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

Список разделов phpBBex 1.x (поддерживается) Пожелания 1.x

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

Сообщение #1 factotum » 28.09.2013, 13:09

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

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

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

Нужен совет, куда копать?
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #2 VEG » 28.09.2013, 13:38

Нужно сделать отдельный скрипт, который на вход будет получать текст в формате BBCode, а в ответе он будет отдавать HTML. Вот пример скрипта, который должен конвертировать содержимое переменной text (в GET или POST) из BBCode в HTML (набросал прямо здесь, не тестировал):
Код: Выделить всё
<?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
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #3 factotum » 28.09.2013, 13:52

Ага, то есть прямая дорога в ядро?
VEG:К сожалению, обратная процедура (HTML в BBCode) не предусмотрена.
У Вас для цитат используется postrow.DECODED_MESSAGE. Не оно? или сообщения можно вытянуть из базы в bbcode?
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #4 Sumanai » 28.09.2013, 14:05

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

Именно так. Посмотри в исходный код страницы на форуме, если включено полное цитирование (тут оно отключено). Сообщение дублируется дважды, в виде HTML и BBCode с скрытом поле.
Но сообщения в виде BBCode сохраняются в БД при отправке, а при отображении конвертируются в HTML. Функции обратного преобразования нет.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 2 месяца

Сообщение #5 factotum » 28.09.2013, 14:22

Sumanai:если включено полное цитирование (тут оно отключено). Сообщение дублируется дважды, в виде HTML и BBCode с скрытом поле.
это и не понравилось.
Все, разобрался. DECODED_MESSAGE парсит переносы строк. это сделать без проблем на js
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #6 Sumanai » 28.09.2013, 14:29

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

А как ещё? Писать отдельный парсер HTML в BBCode на яваскрите.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 2 месяца

Сообщение #7 VEG » 28.09.2013, 14:30

factotum, поскольку все страницы обычно сжимаются gzip, объём трафика увеличивается незначительно.
VEG M
Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #8 factotum » 28.09.2013, 14:48

Sumanai:А как ещё? Писать отдельный парсер HTML в BBCode на яваскрите.
если делать под себя, то парсить без проблем, на локалке парсер работает на ура. Хуже с универсальностью. Тут этот метод не подойдет, либо нужно выносить в код инициализацию настроек парсера.
Если по другому, вытягивать сообщение в bbcode через AJAX, далее по текущей схеме.
VEG:поскольку все страницы обычно сжимаются gzip, объём трафика увеличивается незначительно.
Нормальная реализация получения постов через AJAX откроет ворота к быстрому редактированию, превью. Цитаты уже сами просятся.
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #9 Sumanai » 28.09.2013, 14:54

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

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

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

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

Добавлено спустя 2 минуты 30 секунд:
factotum:либо нужно выносить в код инициализацию настроек парсера.

Считаю, что подобный код будет весить не меньше, чем пара скрытых постов сейчас при включённой быстрой цитате. А так как этот код не вывести в яваскрипт файл, то тягаться он будет каждый раз, даже если на странице один пост. Так что экономия если и будет, то копеечная.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 2 месяца

Сообщение #10 factotum » 28.09.2013, 15:09

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

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

В планах спрятать скрипт настроек в невидимом блоке c JSON, как это сделано с настройками скрипта выбора страницы. Так при загрузке страницы браузер не тратит время на обработку JS в коде страницы. Cкрытый блок не отражается на времени рендеринга. Работает это также достаточно быстро
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #11 Sumanai » 28.09.2013, 16:03

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

Ctrl+С перекрывает стандартную комбинацию- из поля ввода сообщения ничего не копировать привычным сочетанием :sad:
Так же почему- то клик правой кнопкой мыши обрабатывается как клик левой. Захотел посмотреть исходный код в файрбаге- пришлось продираться через кучу вложенных блоков. Но это не критично для ежедневного использования.
Ещё не всегда удаётся навести мышь на всплывающие блоки с цветами, смайлами и размерами текста.
А так ничего, пашет.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 2 месяца

Сообщение #12 factotum » 28.09.2013, 16:20

Sumanai:Ctrl+С перекрывает стандартную комбинацию- из поля ввода сообщения ничего не копировать привычным сочетанием
Сочетания клавиш настраиваются еще проще, чем кнопки. Пока вкинул базовый функционал. На выходе шлифанется
Sumanai:Так же почему- то клик правой кнопкой мыши обрабатывается как клик левой.
для кнопок это нормально. Не вижу проблем. При желании всегда можно поправить.
Sumanai:Захотел посмотреть исходный код в файрбаге- пришлось продираться через кучу вложенных блоков
Поправим :smile:
Sumanai:Ещё не всегда удаётся навести мышь на всплывающие блоки с цветами, смайлами и размерами текста.
Черновик. Пока думаю как лучше разбежаться между ховером и точем. Ховер интегирован в плагин редактора. Не совсем согласен с его работой. Если получится что-то путное - пропихнем пулл в мастер markitup :smile:
Sumanai:А так ничего, пашет.
Пашет. Но хочу превью на аджаксе. Думаю, за выходные прикручу. Murkitup имеет некоторую нативную функциональность для превью, а этого недостачно, чтобы корректно парсить bbcode. Не сторонник правок на уровне ядра phpBB. Вот и искал какой шлюз, чтобы этого избежать.
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #13 Sumanai » 28.09.2013, 16:32

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

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

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

VEG и сам хотел реализовать предпросмотр. Если вы будете работать совместно- правки на уровне ядра будут не нужны, они будут интегрированы в следующую версию phpBBex :biggrin: Вам же останется только пилить шаблон.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 2 месяца

Сообщение #14 factotum » 28.09.2013, 16:49

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

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

Посмотрим по концовке. Может чего и сделаю. Тогда выкачу пулл в мастер phpBBex :kettle:
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #15 Sumanai » 28.09.2013, 16:57

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

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

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

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

В остальном- пообщайся с VEG. Лично я за совместный труд и более быстрое развитие движка.
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 2 месяца

Сообщение #16 factotum » 28.09.2013, 17:08

Sumanai:То есть всё- таки хочешь реализацию с обратным парсером?
Если делать для себя, то подойдет. А так, метод не универсален. Посмотрим, насколько быстро можно вытянуть пост через аджакс-запрос. На моем не быстром локалхосте с тормозами ipv6 уровень терпимости измеряется достаточно быстро.) В конце концов кеширование запросов никто не отменял.
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #17 HD321kbps » 28.09.2013, 17:19

Объединяйтесь )
HD321kbps M
Аватара
Откуда: Армянск
Репутация: 376
С нами: 11 лет

Сообщение #18 factotum » 28.09.2013, 20:34

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

Добавлено спустя 4 минуты 4 секунды:
ну и лайвпревью не совсем подойдет при использовании бб-медиа/ajax-based бб-тегов.
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #19 Sumanai » 28.09.2013, 20:46

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

Посмотреть где можно? На тестовом форуме нельзя зарегистрироваться, а при вводе капчи "Ошибка отправки формы".
Sumanai M
Аватара
Репутация: 1677
С нами: 11 лет 2 месяца

Сообщение #20 factotum » 28.09.2013, 20:56

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

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

Добавлено спустя 3 минуты:
http://www.4seven.de/forum/4test/viewtopic.php?p=22#p22
тут рабочий пример Livepreview. Довести до ума и будет счастье
factotum
Автор темы
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

След.

Вернуться в Пожелания 1.x



cron