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

Форум PHP

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

 

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

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

тема: Вставка смайликов в форум
 
 автор: Киналь   (08.07.2005 в 16:48)   письмо автору
 
 

Доброго времени суток!
Вопрос вот в чем. Написал я форум небольшой, и теперь надо в него вставить смайлики. Ну, можно, конечно, просто "в лоб" заменять =) на картинку, но смайликов у меня оказалось 92 штуки, и придется видимо, использовать обозначения типа :pivo: Честно говоря, стало лень писать в коде 92 замены (а потом еще 92 - для редактирования сообщения), и возникла идея заменять группы символов, ограниченные двоеточием, на картинки, имена которых получаются добавлением к этой группе символов расширения. То есть, проще говоря, вместо :pivo: вставить <img src=smilies/pivo.gif>.
Здесь две проблемы. Первая - как это сделать? eregi_replace заменит только один раз. И вторая - что, если особо одаренный юзер напишет между двоеточиями что-нибудь "неположенное"? Т.е., надо еще проверить, есть ли такой файл.

В общем, предполагаю, что так, как я хочу, сделать не удастся, и придется мне добросовестно описывать каждый смайлик, но все-таки, может, что-то можно сделать?
Спасибо!

   
 
 автор: cheops   (08.07.2005 в 20:24)   письмо автору
 
   для: Киналь   (08.07.2005 в 16:48)
 

Вы можете использовать схему, которую в своё время разработал Akira для нашего форума - вместо eregi_replace, разумнее использовать str_replace - ведь вам регулярные выражения не требуются - смайлики помещаются в отдельную директорию - можно открыть её при помощи фукнции opendir() и прочитать readdir() - если такого смайлика нет, то просто не будет отражена картинка
<?php
      $postbody 
str_replace("[:","<img align=middle src=../skins/".$GLOBALS['skin']."smiles/",$postbody);
      
$postbody str_replace(":]",".gif />",$postbody);
?>

   
 
 автор: method   (08.07.2005 в 22:33)   письмо автору
 
   для: cheops   (08.07.2005 в 20:24)
 

можно сделать наподобие:

файл smile_panel.php:

<html>
<head>
<title>Панель смайлов</title>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
<link rel="stylesheet" type="text/css" href="css/styles.css">
<script language="JavaScript">
<!-- hide
name = parent.send.document.send.mess.value=value;
// -->
</script>
</head><center>
<body><table width="100%" height="100%" cellpadding="0" cellspacing="0"><tr>


<?php
$dir 
opendir ("images/smiles/");
while ( 
$file readdir ($dir))
{
if (( 
$file != ".") && ($file != "..") && ($file != "index.php") && ($file != "Thumbs.db"))
{
$first explode("."$file);
print 
"<td><img style='cursor:hand;'  src='images/smiles/".$first[0].".".$first[1]."' border=0"." onclick='parent.send.document.send.mess.focus();parent.send.document.send.mess.value +=name + \""."[".$first[0]."] "."\" '>"."</td>";
}
}
closedir ($dir);
?>
</tr></table></center>
</body>
</html>


замена символов на смайлы(в именах смайлов не должно быть точек!!!!)


<?php
$user_mes
[4] = str_replace("[smile]","<img src='images/smiles/smile.gif'  border='0'>",$user_mes[4]);
$user_mes[4] = str_replace("[frown]","<img src='images/smiles/frown.gif'  border='0'>",$user_mes[4]);
$user_mes[4] = str_replace("[shout]","<img src='images/smiles/shout.gif'  border='0'>",$user_mes[4]);
$user_mes[4] = str_replace("[cry]","<img src='images/smiles/cry.gif'  border='0'>",$user_mes[4]);
?>


обратите внимание на имена гифов, и то на что они заменяют.

   
 
 автор: Киналь   (09.07.2005 в 15:24)   письмо автору
 
   для: cheops   (08.07.2005 в 20:24)
 

Я думал так сделать, но тогда никакой "взломостойкости" - например, написать в сообщении [: width=1000 height=2000 :]. На выходе будет <img src= width=1000 height=2000 /> - то есть пустой прямоугольник 1000х2000. Да, кстати, я как-то раз видел такой смайлик - :]. Его могут поставить и просто так.
Я-то думал, может, как-то получить массив всех "псевдо-смайликов" из сообщения, а потом для каждого элемента проверять, существует ли файл с таким именем.

По поводу же способа method'а - это понятно, что проще всего заменять "в лоб", но, во-первых, лень, а во-вторых, неэлегантно=) Или я не так понял код? Там вроде, некоторая последовательность символов заменяется на картинку. Или все сложнее? Если так, то поясните, пожалуйста!

   
 
 автор: cheops   (09.07.2005 в 20:09)   письмо автору
 
   для: Киналь   (09.07.2005 в 15:24)
 

Можно в системе администрирования завести сервис, который будет читать директорию со смайликами и на основании названий формировать массив - который будет помещаться в отдельный PHP-файл
<?php
  $smile 
= array("xa-xa","la-la", ...);
?>

Файл будет цепляться при помощи директивы include
<?php
  
include "smile.php";
?>

Тогда в цикле проходимся по массиву и осуществляем замену
<?php
  
foreach($smile as $value)
  {
    
$text str_replace("[:$value:]","<img src=$value.gif>"$text)
  }
?>

Правда, при добавлении каждого смайлика потребуется обновлять файл smile.php, зато это самый производительный вариант.

   
 
 автор: Киналь   (09.07.2005 в 22:33)   письмо автору
 
   для: cheops   (09.07.2005 в 20:09)
 

А вот это здорово! Красиво. Так и сделаю.
Жалко, сам не догадался:))

   
 
 автор: Akira   (09.07.2005 в 23:11)   письмо автору
 
   для: cheops   (09.07.2005 в 20:09)
 

Я не помню это мой вариант или ваш исправленный?

   
 
 автор: cheops   (10.07.2005 в 11:29)   письмо автору
 
   для: Akira   (09.07.2005 в 23:11)
 

Нет в форуме сейчас по-другому - у приведённого выше варианта есть недостаток - он не целляет автоматически смайлики, которые помещаются в директорию smile, как в вашем варианте.

   
 
 автор: Киналь   (10.07.2005 в 11:51)   письмо автору
 
   для: cheops   (10.07.2005 в 11:29)
 

Да, кстати, можно ведь массив смайликов формировать динамически. тогда будет достаточно поместить новый смайлик в папку, и он будет доступен.
Хех, можно ведь и в самомо форуме панели смайликов динамическе делать. Тогда вообще все "само" будет=) Неплохо)))

   
 
 автор: cheops   (10.07.2005 в 12:07)   письмо автору
 
   для: Киналь   (10.07.2005 в 11:51)
 

Можно, но дорогова-то будет для формирования каждого сообщения открывать и читать папку со смайликами.

   
 
 автор: Akira   (10.07.2005 в 15:13)   письмо автору
 
   для: cheops   (10.07.2005 в 11:29)
 

А может включить в админку редактирование смайлов?

   
 
 автор: cheops   (10.07.2005 в 15:27)   письмо автору
 
   для: Akira   (10.07.2005 в 15:13)
 

Так и так их легко редактировать - не нужные просто удаляются, а те которые требуются закидываются в директорию smile.

   
 
 автор: igrik   (10.07.2005 в 18:31)
 
   для: Akira   (09.07.2005 в 23:11)
 

Есть минус у просто читания файлов из директории. Помню разбирал phpBB , там предусмотрен вариант, что на каждый смайл есть несколько вариантов написания. Например:
:) :)) :-) :smile:
Многие на автомате вставляют такие смайлики и хорошо когда они тоже на автомате преобразуются.

   
 
 автор: cheops   (11.07.2005 в 00:24)   письмо автору
 
   для: igrik   (10.07.2005 в 18:31)
 

Можно при помощи регулярных выражений предварительно преобразовывать такие смайлы к принятому в текущей системе [:glad:], а потом уже заменять из директории...

   
 
 автор: sidPR   (20.10.2005 в 00:08)   письмо автору
 
   для: cheops   (11.07.2005 в 00:24)
 

пожалуйста ктонибуть привидите пример с формой а рядом с формой смайлы и при нажатии смайлы вставляються =\ а то чето немогу понять либо делаю чтото нетак =(

   
 
 автор: cheops   (20.10.2005 в 00:57)   письмо автору
 
   для: sidPR   (20.10.2005 в 00:08)
 

Да вы скачайте этот форум из раздела downloads - в нём они уже прикручены, только отлючены здесь.

   
 
 автор: sidPR   (20.10.2005 в 02:17)   письмо автору
 
   для: cheops   (20.10.2005 в 00:57)
 

да не я хачю к своей гостевой прикрутить неполучаеться =(

   
 
 автор: cheops   (20.10.2005 в 02:24)   письмо автору
 
   для: sidPR   (20.10.2005 в 02:17)
 

В текст сообщений у вас смайлы попадают? Приведите их и соответствие им изображений?

   
 
 автор: sidPR   (20.10.2005 в 02:32)   письмо автору
 
   для: cheops   (20.10.2005 в 02:24)
 

эм... несовсем понял вопроса ... короче вот есть форма .. на стринаце вот выведены 2 смайлика к примеру с двумя адресами предположим 1.gif и 2.gif
вот на них стоят ссылки как я пока незнаю че указывать при нажатии на смайлик в форму вставляет например 1- =) 2- :) вот но при вставке в форму ети значени сразу превращялись в изображение тоесть в форме сразу появляеться етот смайлик и отпровляеться в базу ...или как проще посоветуйте

   
 
 автор: sidPR   (20.10.2005 в 05:34)   письмо автору
 
   для: sidPR   (20.10.2005 в 02:32)
 

ну вот более мене вроде воткнул что к чему но всеравно одно непонятно вот что я написал для примера



<form name=formname> 
  <textarea name="text" cols="30" rows="5"></textarea> 
</form> 

<script language="JavaScript">
function Smilies(Smilie)
{
formname.text.value+=Smilie+" ";
formname.Form.text.focus();
}
//-->
</script> 
</head> 
<body> 
<a href=javascript:Smilies(':zloi:')><img src=smile/zloi.gif border=0></a>


при нажатии на смайлик вводиться в форму :zloi: + пишет выполнена загрузка страници но с ошибкой ..
+ непонятно что как дальше быть вот вставилось в форму :zloi: а в базу данных как будет вставляться мнеже нужно чтобы картинка смайла была место :zloi: ...
и еще нельзя ли чтобы в форму место :zloi: сразу вставлялся смайл и отоброжался как картинка ужэ в форме ... =\

   
 
 автор: cheops   (20.10.2005 в 11:38)   письмо автору
 
   для: sidPR   (20.10.2005 в 05:34)
 

1) Допустим вставлено у вас в текст вставлен тэг :zloi: и ему соотвествует изображение zloi.gif. Тогда перед выводом в окно браузера в текст можно вставить смайлик следующим образом
<?php
  $text 
preg_replace("|:([^:]+):|i","<img src='\\1.gif'>",$text);
?>

2) Чтобы изображение вставлялось непосредственно в текстовую область - нужно сильно извратится и использовать не текстовую область а фреймы и JavaScript - это технология создания так называемых визуальльных редакторов - сначала лучше так реализуйте.

   
 
 автор: sidPR   (21.10.2005 в 03:53)   письмо автору
 
   для: cheops   (20.10.2005 в 11:38)
 

а почему в моем коде пишет при добовлении zloi выполнено но с ошибкой ?

   
 
 автор: cheops   (21.10.2005 в 13:16)   письмо автору
 
   для: sidPR   (21.10.2005 в 03:53)
 

Щёлкните на значёк ошибки - что за ошибка?

   
 
 автор: sidPR   (21.10.2005 в 14:17)   письмо автору
 
   для: cheops   (21.10.2005 в 13:16)
 

строка: 10
Символ: 1
Ошибка: "formname.form.text" - есть null или не является объектом
код: 0

   
 
 автор: sidPR   (21.10.2005 в 14:19)   письмо автору
 
   для: sidPR   (21.10.2005 в 14:17)
 

все спасибо все врубил как все это делаеться :)

   
 
 автор: sidPR   (21.10.2005 в 14:34)   письмо автору
 
   для: sidPR   (21.10.2005 в 14:19)
 


<form name=formname> 
  <textarea name="text" cols="30" rows="5"></textarea> 
</form> 

<title>Панель смайлов</title> 
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251'> 
<link rel="stylesheet" type="text/css" href="css/styles.css"> 
<script language="JavaScript"> 
<!-- hide 
name = formname.text.value=value; 
// --> 
</script> 
</head><center> 
<body><table width="100%" height="100%" cellpadding="0" cellspacing="0"><tr> 


<?php 
$dir 
opendir ("smile/"); 
while ( 
$file readdir ($dir)) 

if (( 
$file != ".") && ($file != "..") && ($file != "index.php") && ($file != "Thumbs.db")) 

$first explode("."$file); 
print 
"<td><img style='cursor:hand;'  src='smile/".$first[0].".".$first[1]."' border=0"." onclick='formname.text.focus();formname.text.value +=name + \""."[".$first[0]."] "."\" '>"."</td>"


closedir ($dir); 
?> 
</tr></table></center> 
</body> 
</html> 



указывает на строку

name = formname.text.value=value; 

пишет : "value" определение отсуствует
че неправильно ?

   
 
 автор: sidPR   (22.10.2005 в 10:24)   письмо автору
 
   для: sidPR   (21.10.2005 в 14:34)
 

Все разобрался . стал интегрировать смайлы на сайтик чтобы в форму вставляло вот код


<title>Гостевая книга</title>
<center>
<table style="border:1pt dashed #c0c0c0; background-position: left center; BACKGROUND-ATTACHMENT: fixed; BACKGROUND-REPEAT: 

repeat-x" width="427" height="1" cellpadding="0" cellspacing="0"><tr> 
<td height="40" width="38" align="center"><img style='cursor:hand;'  src='smile/aggressive.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[aggressive] " '></td>
<td height="40" width="38" align="center"><img style='cursor:hand;'  src='smile/angry.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[angry] " '></td>
<td height="40" width="38" align="center"><img style='cursor:hand;'  src='smile/best.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[best] " '></td>
<td height="40" width="38" align="center"><img style='cursor:hand;'  src='smile/blink.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[blink] " '></td>
<td height="40" width="39" align="center"><img style='cursor:hand;'  src='smile/hmmm.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[hmmm] " '></td>
<td height="40" width="39" align="center"><img style='cursor:hand;'  src='smile/closedeyes.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[closedeyes] " '></td>
<td height="40" width="39" align="center"><img style='cursor:hand;'  src='smile/close_tema.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[close_tema] " '></td>
<td height="40" width="39" align="center"><img style='cursor:hand;'  src='smile/evilmad.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[evilmad] " '></td>
<td height="40" width="39" align="center"><img style='cursor:hand;'  src='smile/greedy.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[greedy] " '></td>
<td height="40" width="39" align="center"><img style='cursor:hand;'  src='smile/grin.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[grin] " '></td>
<td height="40" width="39" align="center"><img style='cursor:hand;'  src='smile/crazy.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[crazy] " '></td>
</tr>
  <tr>
<td height="40" width="38" align="center"><img style='cursor:hand;'  src='smile/weep.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[weep] " '></td>
<td height="40" width="38" align="center"><img style='cursor:hand;'  src='smile/q.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[q] " '></td>
<td height="40" width="38" align="center"><img style='cursor:hand;'  src='smile/rtfm.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[rtfm] " '></td>
<td height="40" width="38" align="center"><img style='cursor:hand;'  src='smile/hz.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[hz] " '></td>
<td height="40" width="39" align="center"><img style='cursor:hand;'  src='smile/cool2.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[cool2] " '></td>
<td height="40" width="39" align="center"><img style='cursor:hand;'  src='smile/blush.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[blush] " '></td>
<td height="40" width="39" align="center"><img style='cursor:hand;'  src='smile/hmm.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[hmm] " '></td>
<td height="40" width="39" align="center"><img style='cursor:hand;'  src='smile/cry.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[cry] " '></td>
<td height="40" width="39" align="center"><img style='cursor:hand;'  src='smile/huh.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[huh] " '></td>
<td height="40" width="39" align="center"><img style='cursor:hand;'  src='smile/confused.gif' border=0 onclick='formname.gb.focus();formname.gb.value +=name + "[confused] " '></td>
<td height="40" width="39" align="center">&nbsp;</td>
  </tr>
  </table></center></p>
<center>
<form name="gb" method="post" action="content/gb.php">

<p>
<p>

<TEXTAREA style="border:1pt dashed #c0c0c0; background-position: left center; BACKGROUND-ATTACHMENT: fixed; BACKGROUND-REPEAT: 

repeat-x" tabIndex=3 name=msg rows=8 cols=40></TEXTAREA>
<BR><INPUT class=input style="BORDER-RIGHT: silver 1pt dashed; BORDER-TOP: silver 1pt dashed; BORDER-LEFT: silver 1pt dashed; 

BORDER-BOTTOM: silver 1pt dashed" tabIndex=4 type=submit value=" Добавить  " 

name=submit></p>



</form></textarea>


1- почемуто нефига невстовляет :(
2- пишет выполнено с ошибкой а в ошибке пишет
строка: 265
символ: 1
ошибка: "formname" определение отсуствует
код: 0
URL-адрес: http://сайт/gta.php?menu=gbook&submenu=main
почему такое ? немогу понять... :(

   
 
 автор: cheops   (22.10.2005 в 12:15)   письмо автору
 
   для: sidPR   (22.10.2005 в 10:24)
 

Это связано с тем, что у вас форма называется не formname, а gb
<form name="gb" method="post" action="content/gb.php">

   
 
 автор: sidPR   (22.10.2005 в 12:40)   письмо автору
 
   для: cheops   (22.10.2005 в 12:15)
 

спасибо незаметил сразу :)
еще вопросик по поводу замены
$msg = str_replace("?","<img src='smile/q.gif' border='0'>",$msg);
$msg = str_replace(":)","<img src='smile/grin.gif' border='0'>",$msg);

таким образом если человек ввел :) то он замениться на изображение правильно или так нельзя делать ...

   
 
 автор: cheops   (22.10.2005 в 12:52)   письмо автору
 
   для: sidPR   (22.10.2005 в 12:40)
 

>таким образом если человек ввел :) то он заменится на
>изображение правильно или так нельзя делать ...
Да можно, даже Word так делает :))) Если будет неудобно, всегда можно отменить - жёстких правил, не соблюдение которых приводит к религиозной войне с пол Рунета, здесь нет :)))

   
 
 автор: sidPR   (22.10.2005 в 13:15)   письмо автору
 
   для: cheops   (22.10.2005 в 12:52)
 

Во тут такая трабла как зделать чтобы вставляло не в конец эти смайлики но и там где я поставил курсор =\

   
 
 автор: cheops   (22.10.2005 в 21:32)   письмо автору
 
   для: sidPR   (22.10.2005 в 13:15)
 

Посмотрите тему по ссылке http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=3772 - не совсем то, но близко, вообще этот вопрос лучше обсуждать в форуме HTML+CSS+JavaScript

   
Rambler's Top100
вверх

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