Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

PHP-библиотека xBB 0.29 для работы с BBCode

Общие сведения

xBB - написанная на PHP библиотека для работы с BBCode, которая является развитием библиотеки, описанной здесь.
 
SVN-репозиторий библиотеки находится по адресу svn://svn.prolib.ru:3692.
Активное обсуждение вопросов, связанных с xBB можно найти на форумах PHP Club.
 
xBB может быть использован в гостевых книгах, форумах, на досках объявлений и т.п. На сайте http://www.pc.uz поддержка BBCode в пользовательских комментариях реализована с помощью xBB. Данная документация целиком сверстана в BBCode и конвертирована в XHTML с помощью xBB.
Биржа долевых инвестиций SIMEX.

Публикация сокращена для удобства обсуждения.
Полная версия: PHP-библиотека xBB 0.29 для работы с BBCode. Общие сведения

Метки материала: xbb, bbcode, теги, php, html, парсер, xhtml, bb-code


80 комментариев

01.10.2007 22:05:47 #
Mozilla Firefox dima
В целях безопасности xBB преобразует весь HTML в мнемоники.
Чтобы делать вставки HTML, вам следует создать специальный тег, который можно назвать [html], и в котором не будет производиться преобразование кода HTML.
 
Инструкцию по созданию собственных тегов можно найти здесь: http://xbb.uz/docs/add_tag.bb.
 
Класс обработчик для тега [html] должен быть, приблизительно, таким:
 
PHP
class Xbb_Tags_Html extends bbcode
{
    var $behaviour = 'code';
 
    function Xbb_Tags_Html()
    {
    }
 
    // Выдаем HTML
    function get_html($tree = null)
    {
        $this->parse($this->tree);
        return $this->text;
    }
}
02.10.2007 01:29:15 #
Opera Гость Smile
dima
1 секунда - тоже чересчур много. На xBB.uz большие и сложные тексты BBCode отдаются посетителю практически мгновенно  (уж незнаю, как принимаются )
 
Все дело - в кэшировании. Нет смысла генерировать один и тот же текст каждый раз, как его запросят.
 
Но даже и без кэширования 12 сек. - это чересчур. Приведите, пожалуйста, характеристики вашего сервера и код, который выводит посты.
Тесты производились на локалке. Винда XP, проц 1.2, 256 оперативы. Конечно на хосте будет раза в 2 быстрей, но это не меняет ситуации. Посты выводятся простым циклом. и при каждом проходе цикла вызывается :
PHP

$bb = new bbcode;
$bb->parse($message);
 

А как это всё закэшировать или как правильно сделать?
02.10.2007 03:12:23 #
Mozilla Firefox dima
Пример обработки ББКода без инициализации объекта при каждой итерации цикла:
 
PHP
$bb = new bbcode;
foreach ($messages as $message) {
    $bb->parse($message);
    echo $bb->get_html();
}

Кэширование:
  • При создании или редактировании поста генерируем его в HTML.
  • При выводе постов выводим заранее сгенерированный HTML.
  • Для редактировании поста выводим сохраненный BBCode.
02.10.2007 03:45:58 #
Opera Гость Smile
В общем немного изменил preview.php из стандартного пакета вашей библиотеки, добавил цикл.
PHP

$bb = new bbcode;
$i = 0;
while ($i < 30)
{
$bb->parse($text);
echo '<b>'.($i+1).'.</b>'.$bb->get_html().'<br />';
$i++;
}
 

и передал в скрипт текст: [COLOR="Indigo"](здесь 100 слов "ТЕСТ")[/COLOR]
 
Это выполнилось за 1.8 секунды. Для сравнения, 30 постов, с большей вложенностью тегов в форуме VBulletin, выполнилось за 0.8 секунд Well Там нет никакого кэша, ббкоды парсятся при выводе. Почему такая разница?
02.10.2007 03:58:40 #
Opera Гость Smile
Прошу прощения за недостоверную инфу. В vBulletin какраз есть кэш постов. А вот в пхпбб нет! И выполняется всё очень быстро Well
02.10.2007 12:06:53 #
Mozilla Firefox dima
В phpBB очень простой BBCode. В свое время я не сумел от него добиться безглючной поддержки тегов [table], [tr], [td].
 
Парсинг постов в нем осуществляется в два этапа:
  1. При сохранении поста он преобразуется в некоторый "полуфабрикат", удобный как для дальнейшего парсинга, так и для восстановления исходного BBCode.
     
  2. При выводе поста он конвертится в HTML из сохраненного "полуфабриката". При редактировании поста он восстанавливается из сохраненного "полуфабриката".

В случае с xBB таким "полуфабрикатом" может служить $bb->syntax (см. http://xbb.uz/docs/properties.bb)
02.10.2007 12:59:18 #
Opera Гость ZigFreeD
Либо как когда то на форуме предлагалось сделать две графы... в одной хранить пропарсенный html код, а в другой bb-код для редактирование... после сохраннения сообщение парсится и сохраняется вместе с оргиналом в базе!
 
Кстати... Дим, а ты по приколу выложи тот тестовый пример, который шел раньше до 0,26 версии... где там более 2000 тегов и 8 уровень вложенности... чтобы народ мог тестировать производительность.. а то я найти его не могу в нете... дома то он у меня есть... и иногда приходтится его юзать Well
Только сделай пару кодировок помимо utf-8... хотябы koi-8 и cp1251
02.10.2007 14:33:05 #
Mozilla Firefox dima
Вот здесь: http://pc.uz/documents/text/1591.html
Можно скачать устаревшие версии xBB 0.24 и 0.25 с вложенной документацией в одном большом файле.
04.10.2007 00:30:09 #
Internet Explorer Гость Jon
Чтото я не понял, а как вставить несколько редакторов, скажем в админке для краткого и полного описание новости Oops!
04.10.2007 10:50:26 #
Mozilla Firefox dima
dima
Такого я не предусматривал. Попробуйте создать копию объекта XBB (например, - CopyXBB) в коде JavaScript, переопределить ее свойства соответственно другой textarea и вызвать метод CopyXBB.init();.
 
Если возьметесь это делать, то, пожалуста, отпишитесь о результатах. Независимо от успеха.

Что именно вам непонятно?
Редактор - это объект XBB в коде JavaScript. Чтобы вывести два редактора, нужно создать два таких объекта.

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2017, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.