Ревизия системы BBCode
BBCode — это базовая часть вашего форума. Понимая это, мы проделали тяжелую работу по ревизии и полному переписыванию всей системы bbcode в IP.Board 3.0. Мы думаем, что вам это понравится.
Отличия от IP.Board 2.x
Есть некоторые основные различия в системе BBCode, вводимой в IP.Board 3, которые Вы можете заметить сразу же. Для разгона — каждый BBCode настраивается через админ-центр. Это означает, что если вам необходимо добавить «rel=’nofollow'» ко всем URL, вы сможете сделать это без редактирования файлов. Если вы хотите изменить получающийся HTML для тега, вы сможете это сделать прямо в админцентре. Внутренний обработчик bbcode воспринимает каждый тег как пользовательский и обрабатывает их совершенно одинаково.
Дополнительно, мы изменили HTML код, генерируемый bbcode таким образом, чтобы он был как можно больше XHTML совместимым. Были добавлены Alt атрибуты для img тегов. Мы изменили обработку смайликов, так что img теги смайликов содержат alt с кодом смайлика, также мы полностью удалили не стандартный атрибут emoid. Цитаты теперь должным образом используют HTML тег blockquote (в дальнейшем мы планируем использовать HTML тег cite, если вместе с цитатой вы добавляете ссылку и имя автора цитаты). Для текста выделенного жирным теперь будет использоваться HTML тег strong, для курсива — em. Фактически весь HTML код для bbcode был переписан с целью сделать его более семантичным и для того что бы сделать HTML код генерируемый IP.Board, соответствующим современным стандартам.
И наконец, ревизия коснется и тегов отвечающих за оформление кода (code-syntax boxes), таких как HTML и SQL bbcode, мы сделаем их более гибкими что позволит нам (и конечно же вам!) легко добавлять новые языки программирования. В будущем мы подробнее опишем данное изменение.
Новые возможности системы BBCode.
Я уверен, что это то, что вы так хотели узнать. Хорошо, поехали…
- Синонимы (Алиасы, Aliases): теперь bbcode могут иметь синонимы, так сразу несколько тегов смогут запускать один и тот же bbcode. Примеры? Из существующих, «code» и «codebox». Аналогично «media», «blogmedia», «flash», и «youtube» так же будут одними тем же bbcode. (О медиа тегах мы расскажем через минуту )
- Одиночные теги: вы хотели использовать [hr] (горизонтальная линия)? Теперь можете.
- Не обязательные параметры тега: теперь параметры могут опускаться и у ваших bbcode. Как это работает? Вспомните url тег, вы можете записать ссылку как параметр к тегу, а содержимое будет подставлено как название ссылки, или же опустить параметр, тогда содержимое станет ссылкой.
- Запрет использования одних тегов внутри других. Классический пример запрет использования смайликов и других bbcode внутри code bbcode.
- Запуск PHP обработчика: вам необходимо немного больше логики при обработке bbcode (вы хотите немного уличной магии?)? Теперь вы сможете использовать bbcode плагины для этого. Плагины имеют определенный интерфейс потому их разработка не будет проблематичной. Более подробная информация о создании плагинов будет доступна ближе к выходу IPB 3.0. Некоторые наши bbcode уже используют плагины, так что это должно помочь разработчикам при разработке и использовании плагинов. Таким образом вам больше не надо будет изменять существующие файлы системы для добавления новых bbcode.
- Управление правами групп на использование определенных тегов: менеджер bbcode теперь имеет поле, в котором можно указать, какие группы (так же поддерживаются второстепенные группы) смогут использовать данный тег. Так что, если вы хотите, чтобы только администраторы могли создавать таблицы с использованием тега [table], вы сможете это сделать.
- Управление местами где может быть использован bbcode: хотите запретить использовать вставку картинок в подпись и оставить возможность вставки только в сообщениях? Теперь вы сможете настроить это прямо в менеджере bbcode в админцентре. Данная опция доступна и для модификации, таким образом разработчики смогут создать возможность настройки тегов которые можно будет использовать в их приложениях.
Новые «стандартные» BBCode в IP.Board 3
Я использовал определение «стандартные», хотя теперь все в АЦП настраиваемо. В дополнении ко всем тем bbcode которые уже были в Invision Power Board 2.x, будут доступны несколько новых:
- «member». Использование: [member=GiV]. Данный тег является одиночным bbcode тегом, которые принимает один параметр — имя пользователя. При обработке данного тега система создаст ссылку на профиль пользователя и тег будет преобразован в «<a href=’ссылка на профиль’>имя пользователя</a>»
- «hr». Использование: [hr]. Очень простой bbcode тег, который будет преобразован в горизонтальный разделитель.
- «xml» и «php». Использование: [xml]XML код[/xml] или [php]$phpCode = 1;[/php]. Теги будут преобразованы во вставки блоков кода с подсветкой синтаксиса, аналогично существующим тегам SQL и HTML.
- «media». Использование: [media]http://youtube.com/videolink[/media]. Да это то, чего вы все так ждали. В блогах мы уже использовали такой тег, так что мы пошли дальше и встроили его в IP.Board. Вы можете настраивать совпадения и замены для media тега ( те кто используют IP.Blog 1.4 знают о чем я ), это позволит вам при желании подключать новые медиа сервисы. Так же старый bbcode [flash] теперь работает через media тег, так же доступны параметры высоты и ширины для ролика.
Унылые и скучные технические подробности
Для тех из вас, кто заинтересован в программной реализации новой системы скажу, что мы полностью переписали парсер bbcode с нуля. Это должно быть гарантией того, что bbcode может быть корректно обработан, когда пользователь осуществляет правки контента. Во-первых, мы вернулись к надлежащему вызову pre_db_parse перед сохранением контента в базу, и pre_display_parse перед его выводом. Это должно быть гарантией того что bbcode может быть корректно обработан когда пользователь осуществляет правки контента.
Главное изменение в том, как отформатированный текст обрабатывается — а никак он не обрабатывается! Это означает то, что мы теперь не осуществляем обратные преобразования из распарсенного bbcode, тем самым почти избавляясь от возникновения тех глюков, которые были связанны с этим процессом.
Другим плюсом данного подхода является то, что перестраивать посты вам будет необходимо только при обновлении до IP.Board 3.0, а потом уже больше никогда. В дополнении к этому мы намереваемся полностью обновить наш инструмент обновления сообщений, тот который command-line, и планируем добавить задачу для планировщика, которая автоматически обновит сообщения за вас в любой удобный для вас момент. Более подробно об этом мы планируем сообщить ближе к выпуску 3.0.
Некоторые из вас уже задаются вопросом о росте расхода ресурсов из-за постоянного парсинга сообщении при выводе. В нашем новом парсере bbcode мы почти полностью избавились от регулярных выражений. Регулярные выражения позволяют вам задавать «паттерн» и отыскивать все совпадения с этим «паттерном» в блоке текста, это достаточно расточительный, но очень эффективный инструмент. В IPB 2.x использовался именно он (так же как и в большинстве существующих bbcode парсеров). Для IP.Board 3.0 мы говорим об использовании подхода с использованием лексем. Мы используем несколько быстрых встроенных PHP функций (таких как strpos и substr_replace) вместо массивных регулярных выражений, что делает процесс парсинга bbcode намного быстрее и менее прожорливее. Позднее мы постараемся предоставить результаты профилирования данного метода.Так же мы полностью переписали механизм переноса слов. Теперь он не нарушает HTML, HTML-entity и multibyte… три огромных проблем, которые мы часто видели при работе функции переноса в IP.Board 2.x.
В целом, с помощью новой системы мы сгладили последствия различных ошибок, которые мы получали, и система должна получиться не только более легко используемой, но и намного более надежной и быстрой.
Итог
Мы надеемся что вам понравятся изменения и мы надеемся, что обновления, которых многие из вас ждали долгое время, удовлетворят ваши потребности и в обозримом будущем.