Обработчик bb кодов для нашей CMS

 

Приветствую Вас на своем блоге! Как я и говорил в прошлой статье, сегодня мы будем писать обработчик bb кодов для нашей админки. Каким способом наш скрипт будет заменять bb коды на html? Все довольно просто. Мы с помощью функции preg_replace найдем в тексте bb код и заменим его Процедура нахождения и замена заменяемых строк будет осуществляться буквально 3-4 строчками php кода. Сам скриптик будет написан в модуле добавление постов, который мы писали в статье "Реализуем добавление постов через админ панель". Ну что ж.. Приступим к написанию скрипта?

 

 

Как я и говорил, писать его будем в нашем ранее написанном модуле. Так что открываем файл addcontent.php. Скрипт стоит писать сразу после того как мы заменили весь html на html сущности, то есть после этих строк:

    $name_post = htmlspecialchars($name_post);
$txt_post = htmlspecialchars($txt_post);
$author_post = htmlspecialchars($author_post);

 

Начнем с bb кода "b"

 

На что менять этот bb код? Самое простое это воспользоваться тегом <span> добавив к нему стиль font-weight:bold. Менять будем с помощью функции preg_replace, а не str_replace. Если вы знаете эти функции, то возможно возникнет вопрос, почему именно preg_replace? Я уже размышлял на этот счет в статье bb коды на php. Уж очень мне не нравится то, что если забыть закрыть bb тег то будут небольшие проблемы, поэтому использовать будем preg_replace. Давайте я сформулирую логику:

  • Ну для начала функция preg_match_all найдет все что стоит между [ b ] и [ /b ]
  • Сохранит найденное
  • После, циклом for, мы будем по очереди менять найденные [ b ]текст[ /b ] на <span style="font-weight:bold;">текст</span>

Как видите менять мы будем не по отдельности, то есть не bb код [ b ] на <span style="font-weight:bold;"> а [ /b ] на </span> а все вместе... Таким образом мы избежим ошибок, если вдруг удалим [ b ] или [ /b ] при наборе текста. Приступим к реализации. Вот код замены bb кода "b" на html, естественно с комментариями

        //---------------------[b][/b]
preg_match_all("/\[b\](.*?)\[\/b\]/",$txt_post,$txt_bb);//Сохранили в переменную $txt_bb найденный текст между [b] и [/b]
//Заменяем по очереди bb код на html
for($i=0;isset($txt_bb[1][$i]);$i++)
$txt_post = preg_replace("/\[b\].*?\[\/b\]/s","<span style=\"font-weight:bold;\">".$txt_bb[1][$i]."</span>",$txt_post,1);
//---------------------[b][/b]

Для поиска мы используем регулярное выражение, о них можете почитать тут

 

Обрабатываем bb код [img]

 

Тут чутка посложнее, ибо нам необходимо помимо пути к изображению сохранить еще и позицию, при этом определить какая позиция. Стало быть используем if Вот код с комментариями:

        //---------------------[img]
preg_match_all("/\[img url='(.*?)' pos='(.*?)'\]/s",$txt_post,$txt_bb);//Сохранили в переменную $txt_bb ссылку и позицию изображения
for($i=0;isset($txt_bb[1][$i]);$i++)
{
if($txt_bb[2][$i] != "")//Определяем есть ли позиция у изображения
{
//Если есть позиция, то определяем какая, и создаем свойство для тега <img>
if($txt_bb[2][$i] == "l")$align_img = " align=\"left\"";
if($txt_bb[2][$i] == "r")$align_img = " align=\"right\"";
if($txt_bb[2][$i] == "c")$align_img = " align=\"center\"";
}
else $align_img = "";//Если позиции нет, то не создаем свойство для тега
//Заменяем по очереди bb код на html
$txt_post = preg_replace("/\[img url='.*?' pos='.*?'\]/s","<img src=\"".$txt_bb[1][$i]."\" border=\"0px\"".$align_img.">",$txt_post,1);
}
//---------------------[img]

 

Обрабатываем bb код [a]

 

Тут тоже самое что при bb коде "b" Просто находим, сохраняем и заменяем. Вот код с комментариями:

        //---------------------[a][/a]
//Заменяем по очереди bb код на html
preg_match_all("/\[a url='(.*?)'\](.*?)\[\/a\]/s",$txt_post,$txt_bb);//Сохранили в переменную $txt_bb ссылку и текст ссылки
for($i=0;isset($txt_bb[1][$i]);$i++)
$txt_post = preg_replace("/\[a url='.*?'\].*?\[\/a\]/s","<a href=\"".$txt_bb[1][$i]."\">".$txt_bb[2][$i]."</a>",$txt_post,1);
//---------------------[a][/a]

 

Заключение

 

Теперь при добавление постов через админку, можно пользоваться bb кодами для придание тексту более специфичный вид. В следующей статье мы научим нашу админку переводить html код обратно в bb код, для того что бы можно было редактировать посты в точно таком же режиме, как и при добавление постов. Так же обучим редактор работать с bb кодами. Вообщем то на сегодня все, если есть какие то вопросы задавайте, отвечу, спасибо за внимание, у меня все!

Исходник

Возможно Вам будут интересны следующие заметки