Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: bbCode и смайлики
 
 автор: Равечка   (11.08.2006 в 17:09)   письмо автору
 
 

Горю идеей сделать у себя в форме ответа что-то вроде BB и смайликов.
как это реализовать?

Я так понимаю при получении текста сообщения из БД заменять там тэги смайлов например :smile: на путь до картинки? как реализовать эту замену, и когда лучше ее проводить при отправке сообщения или при воспроизведении?

   
 
 автор: Trianon   (11.08.2006 в 17:36)   письмо автору
 
   для: Равечка   (11.08.2006 в 17:09)
 

есть еще вариант: при отображении на клиентской стороне. Средствами JS.

   
 
 автор: Axxil   (11.08.2006 в 17:41)   письмо автору
 
   для: Равечка   (11.08.2006 в 17:09)
 

Определяем для простоты константу каталога где будем хранить смайлы.
<?
  define
("_SMILES_DIR",$_SERVER['DOCUMET_ROOT'].'/path/to/smile/dir/');
?>
В этот каталог кладём смайлы с любыми именами.
Далее пишем функцию которая юудет читать каталог и выводить все смайлы оттуда
<?
  
function smilesList(){
    
$dir = _SMILES_DIR;
    
$ret = '';
    if(
$dh = opendir($dir)) {
       while((
$file = readdir($dh)) !== false) {
         list(
$name,$ext) = explode(".",$file); 
         if(
$ext == 'gif')
           
$ret .= '<img src="'._SMILES_DIR.$file.'" onclick=addSmile(":'.$name.':")>';
       }
    }
    return 
$ret;  
  }
?>
Здесь есть JS функция addSmile добавления смайла в поле редактирования. Но её несложно найти в сети, если не найдёте, у меня где-то была, поищу...

И перед тем как вывести текст со смайлом, заменяем псевдотег смайла :some: на картинку some.gif
<?  
  $str 
= 'какое-то сообщение форума со :lol: смайлом';
  function 
replaceSmiles($str){
    
$pattern="|:([\w]*):|is";
    
$replace = '<img src="'._SMILES_DIR.'\\1.gif>';
    return 
preg_replace($pattern,$replace,$str);
  }  
  echo 
replaceSmiles($str);
?>

   
 
 автор: Равечка   (11.08.2006 в 20:29)   письмо автору
 
   для: Axxil   (11.08.2006 в 17:41)
 

все обыскала не могу найти JS Addsmile =(

   
 
 автор: Axxil   (11.08.2006 в 21:07)   письмо автору
 
   для: Равечка   (11.08.2006 в 20:29)
 


<script>
function addsmile(name,id) {
  e1 = document.getElementById(id);
  e1.focus();
  var formData = document.selection.createRange().text;
  document.selection.createRange().text = ' :'+name+': ';
}
</script>

Пример использования:

<? 
  
function smilesList(){ 
    
$dir = _SMILES_DIR; 
    
$ret = ''; 
    if(
$dh = opendir($dir)) { 
       while((
$file = readdir($dh)) !== false) { 
         list(
$name,$ext) = explode(".",$file);  
         if(
$ext == 'gif') 
           
$ret .= '<img src="'._SMILES_DIR.$file.'" onclick=addSmile("'.$name.'","message")>'; 
       } 
    } 
    return 
$ret;   
  } 
?> 
<tr>
  <td><textarea id="message" name="message"></textarea></td>
</tr>
<tr>
  <td><?=smilesList()?></td>
</tr>

   
 
 автор: Равечка   (12.08.2006 в 00:02)   письмо автору
 
   для: Axxil   (11.08.2006 в 21:07)
 

спасибо огромное.
а ББ тэги я так поняла простым реплейсом парсить?

   
 
 автор: Axxil   (12.08.2006 в 00:09)   письмо автору
 
   для: Равечка   (12.08.2006 в 00:02)
 

Что то типа такого:

<?php
$tag 
= 'b';
$pattern = '|\['.$tag.'\]([^\[]*)\[/'.$tag.'\]|is';
$replace = '<'.$tag.'>\\1</'.$tag.'>';
$str = preg_replace($pattern,$replace,$str);
?>

   
 
 автор: Webmaster-X   (12.08.2006 в 16:53)   письмо автору
 
   для: Axxil   (12.08.2006 в 00:09)
 

вот готовый

<?
        $emsg 
= preg_replace("#\[br\]#si", "<br />", $emsg);
        
$emsg = preg_replace("#\[hr\]#si", "<hr noshade color=\"#000000\" size=\"1\">", $emsg);
        
$emsg = preg_replace("#\[b\](.*?)\[/b\]#si", "<span style=\"font-weight:bold\">\\1</span>", $emsg);
        
$emsg = preg_replace("#\[I\](.*?)\[/I\]#si", "<span style=\"font-style:italic\">\\1</span>", $emsg);
        
$emsg = preg_replace("#\[U\](.*?)\[/U\]#si", "<span style=\"text-decoration:underline\">\\1</span>", $emsg);
        
$emsg = preg_replace("#\[s\](.*?)\[/s\]#si", "<s>\\1</s>", $emsg);
        
$emsg = preg_replace("#\[big\](.*?)\[/big\]#si", "<big>\\1</big>", $emsg);
        
$emsg = preg_replace("#\[small\](.*?)\[/big\]#si", "<small>\\1</big>", $emsg);
        
$emsg = preg_replace("#\[pre\](.*?)\[/pre\]#si", "<pre>\\1</pre>", $emsg);
        
$emsg = preg_replace("#\[sub\](.*?)\[/sub\]#si", "<sub>\\1</sub>", $emsg);
        
$emsg = preg_replace("#\[sup\](.*?)\[/sup\]#si", "<sup>\\1</sup>", $emsg);
        
$emsg = preg_replace("#\[table\](.*?)\[/table\]#si", "<table>\\1</table>", $emsg);
        
$emsg = preg_replace("#\[tr\](.*?)\[/tr\]#si", "<tr>\\1</tr>", $emsg);
        
$emsg = preg_replace("#\[td\](.*?)\[/td\]#si", "<td>\\1</td>", $emsg);
        
$emsg = preg_replace("#\[move\](.*?)\[/move\]#si", "<marquee>\\1</marquee>", $emsg);
        
$emsg = preg_replace("#\[coment\](.*?)\[/coment\]#si", "<span class=artnamenote>Коментарий;</span>\n<br />\n<p class=artnote>\\1</p>", $emsg);
        
$emsg = preg_replace("#\[google\](.*?)\[/google\]#si", "<a href=\"http://www.google.com/search?q=\\1\" target=\"_blank\"><span style=\"font-weight:bold; color:#575CCA\">&equiv;Google&equiv;</span></a>", $emsg);
        
$emsg = preg_replace("#\[img\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/img\]#sie", "'<img src=\"\\1' . str_replace(' ', '%20', '\\3') . '\">'", $emsg);
        
$emsg = preg_replace("#\[left\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/left\]#sie", "'<img src=\"\\1\\3\" align=\"left\">'", $emsg);
        
$emsg = preg_replace("#\[right\]((http|ftp|https|ftps)://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png)))\[/right\]#sie", "'<img src=\"\\1\\3\"  align=\"right\">'", $emsg);
        
$emsg = preg_replace("#\[url=(.*?)\](.*?)\[/url\]#si", "<a class=\"links\" target=\"_blank\" href=\"\\1\">\\2</a>", $emsg);
        
$emsg = preg_replace("#\[url\](.*?)\[/url\]#si", "<a class=\"links\" target=\"_blank\" href=\"\\1\">\\1</a>", $emsg);
        
$emsg = preg_replace("#\[ftp=(.*?)\](.*?)\[/ftp\]#si", "<a class=\"links\" target=\"_blank\" href=\"\\1\">\\2</a>", $emsg);
        
$emsg = preg_replace("#\[ftp\](.*?)\[/ftp\]#si", "<a class=\"links\" target=\"_blank\" href=\"\\1\">\\1</a>", $emsg);
        
$emsg = preg_replace("#\[align=(left|right|center|justify)\](.*?)\[/align\]#si", "<div style=\"text-align:\\1\">\\2</div>", $emsg);
        
$emsg = preg_replace("#\[marq=(left|right|up|down)\](.*?)\[/marq\]#si", "<marquee direction=\"\\1\" scrolldelay=\"120\">\\2</marquee>", $emsg);
        
$emsg = preg_replace("#\[glow=(\#[0-9A-F]{6}|[a-z\-]+)\](.*?)\[/glow\]#si", "<span style=\"filter: glow(color=\\1); height:20\">\\2</span>", $emsg);
        
$emsg = preg_replace("#\[shadow=(\#[0-9A-F]{6}|[a-z\-]+)\](.*?)\[/shadow\]#si", "<span style=\"filter: shadow(color=\\1); height:20\">\\2</span>", $emsg);
        
$emsg = preg_replace("#\[highlight=(\#[0-9A-F]{6}|[a-z\-]+)\](.*?)\[/highlight\]#si", "<span style=\"background-color:\\1\">\\2</span>", $emsg);
        
$emsg = preg_replace("#\[color=(\#[0-9A-F]{6}|[a-z\-]+)\](.*?)\[/color\]#si", "<span style=\"color:\\1\">\\2</span>", $emsg);
        
$emsg = preg_replace("#\[size=([1-2]?[0-9])\](.*?)\[/size\]#si", "<span style=\"font-size:\\1px; line-height:normal\">\\2</span>", $emsg);
        
$emsg = preg_replace("#\[font=(.*?)\](.*?)\[/font\]#si", "<span style=\"font-family:\\1\">\\2</span>", $emsg);
        
$emsg = preg_replace("#\[email](.*?)\[/email]#si", "<b><a href=\"mailto:\\1\">\\1</a></b>",$emsg);
        
$emsg = preg_replace("#\[email=(.*?)\](.*?)\[/email]#si", "<b><a href=\"mailto:\\1\">\\2</a></b>",$emsg);
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования