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