|
|
|
| Доброго времени суток!
Вопрос вот в чем. Написал я форум небольшой, и теперь надо в него вставить смайлики. Ну, можно, конечно, просто "в лоб" заменять =) на картинку, но смайликов у меня оказалось 92 штуки, и придется видимо, использовать обозначения типа :pivo: Честно говоря, стало лень писать в коде 92 замены (а потом еще 92 - для редактирования сообщения), и возникла идея заменять группы символов, ограниченные двоеточием, на картинки, имена которых получаются добавлением к этой группе символов расширения. То есть, проще говоря, вместо :pivo: вставить <img src=smilies/pivo.gif>.
Здесь две проблемы. Первая - как это сделать? eregi_replace заменит только один раз. И вторая - что, если особо одаренный юзер напишет между двоеточиями что-нибудь "неположенное"? Т.е., надо еще проверить, есть ли такой файл.
В общем, предполагаю, что так, как я хочу, сделать не удастся, и придется мне добросовестно описывать каждый смайлик, но все-таки, может, что-то можно сделать?
Спасибо! | |
|
|
|
|
|
|
|
для: Киналь
(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);
?>
|
| |
|
|
|
|
|
|
|
для: 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]);
?>
|
обратите внимание на имена гифов, и то на что они заменяют. | |
|
|
|
|
|
|
|
для: cheops
(08.07.2005 в 20:24)
| | Я думал так сделать, но тогда никакой "взломостойкости" - например, написать в сообщении [: width=1000 height=2000 :]. На выходе будет <img src= width=1000 height=2000 /> - то есть пустой прямоугольник 1000х2000. Да, кстати, я как-то раз видел такой смайлик - :]. Его могут поставить и просто так.
Я-то думал, может, как-то получить массив всех "псевдо-смайликов" из сообщения, а потом для каждого элемента проверять, существует ли файл с таким именем.
По поводу же способа method'а - это понятно, что проще всего заменять "в лоб", но, во-первых, лень, а во-вторых, неэлегантно=) Или я не так понял код? Там вроде, некоторая последовательность символов заменяется на картинку. Или все сложнее? Если так, то поясните, пожалуйста! | |
|
|
|
|
|
|
|
для: Киналь
(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, зато это самый производительный вариант. | |
|
|
|
|
|
|
|
для: cheops
(09.07.2005 в 20:09)
| | А вот это здорово! Красиво. Так и сделаю.
Жалко, сам не догадался:)) | |
|
|
|
|
|
|
|
для: cheops
(09.07.2005 в 20:09)
| | Я не помню это мой вариант или ваш исправленный? | |
|
|
|
|
|
|
|
для: Akira
(09.07.2005 в 23:11)
| | Нет в форуме сейчас по-другому - у приведённого выше варианта есть недостаток - он не целляет автоматически смайлики, которые помещаются в директорию smile, как в вашем варианте. | |
|
|
|
|
|
|
|
для: cheops
(10.07.2005 в 11:29)
| | Да, кстати, можно ведь массив смайликов формировать динамически. тогда будет достаточно поместить новый смайлик в папку, и он будет доступен.
Хех, можно ведь и в самомо форуме панели смайликов динамическе делать. Тогда вообще все "само" будет=) Неплохо))) | |
|
|
|
|
|
|
|
для: Киналь
(10.07.2005 в 11:51)
| | Можно, но дорогова-то будет для формирования каждого сообщения открывать и читать папку со смайликами. | |
|
|
|
|
|
|
|
для: cheops
(10.07.2005 в 11:29)
| | А может включить в админку редактирование смайлов? | |
|
|
|
|
|
|
|
для: Akira
(10.07.2005 в 15:13)
| | Так и так их легко редактировать - не нужные просто удаляются, а те которые требуются закидываются в директорию smile. | |
|
|
|
|
автор: igrik (10.07.2005 в 18:31) |
|
|
для: Akira
(09.07.2005 в 23:11)
| | Есть минус у просто читания файлов из директории. Помню разбирал phpBB , там предусмотрен вариант, что на каждый смайл есть несколько вариантов написания. Например:
:) :)) :-) :smile:
Многие на автомате вставляют такие смайлики и хорошо когда они тоже на автомате преобразуются. | |
|
|
|
|
|
|
|
для: igrik
(10.07.2005 в 18:31)
| | Можно при помощи регулярных выражений предварительно преобразовывать такие смайлы к принятому в текущей системе [:glad:], а потом уже заменять из директории... | |
|
|
|
|
|
|
|
для: cheops
(11.07.2005 в 00:24)
| | пожалуйста ктонибуть привидите пример с формой а рядом с формой смайлы и при нажатии смайлы вставляються =\ а то чето немогу понять либо делаю чтото нетак =( | |
|
|
|
|
|
|
|
для: sidPR
(20.10.2005 в 00:08)
| | Да вы скачайте этот форум из раздела downloads - в нём они уже прикручены, только отлючены здесь. | |
|
|
|
|
|
|
|
для: cheops
(20.10.2005 в 00:57)
| | да не я хачю к своей гостевой прикрутить неполучаеться =( | |
|
|
|
|
|
|
|
для: sidPR
(20.10.2005 в 02:17)
| | В текст сообщений у вас смайлы попадают? Приведите их и соответствие им изображений? | |
|
|
|
|
|
|
|
для: cheops
(20.10.2005 в 02:24)
| | эм... несовсем понял вопроса ... короче вот есть форма .. на стринаце вот выведены 2 смайлика к примеру с двумя адресами предположим 1.gif и 2.gif
вот на них стоят ссылки как я пока незнаю че указывать при нажатии на смайлик в форму вставляет например 1- =) 2- :) вот но при вставке в форму ети значени сразу превращялись в изображение тоесть в форме сразу появляеться етот смайлик и отпровляеться в базу ...или как проще посоветуйте | |
|
|
|
|
|
|
|
для: 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: сразу вставлялся смайл и отоброжался как картинка ужэ в форме ... =\ | |
|
|
|
|
|
|
|
для: sidPR
(20.10.2005 в 05:34)
| | 1) Допустим вставлено у вас в текст вставлен тэг :zloi: и ему соотвествует изображение zloi.gif. Тогда перед выводом в окно браузера в текст можно вставить смайлик следующим образом
<?php
$text = preg_replace("|:([^:]+):|i","<img src='\\1.gif'>",$text);
?>
|
2) Чтобы изображение вставлялось непосредственно в текстовую область - нужно сильно извратится и использовать не текстовую область а фреймы и JavaScript - это технология создания так называемых визуальльных редакторов - сначала лучше так реализуйте. | |
|
|
|
|
|
|
|
для: cheops
(20.10.2005 в 11:38)
| | а почему в моем коде пишет при добовлении zloi выполнено но с ошибкой ? | |
|
|
|
|
|
|
|
для: sidPR
(21.10.2005 в 03:53)
| | Щёлкните на значёк ошибки - что за ошибка? | |
|
|
|
|
|
|
|
для: cheops
(21.10.2005 в 13:16)
| | строка: 10
Символ: 1
Ошибка: "formname.form.text" - есть null или не является объектом
код: 0 | |
|
|
|
|
|
|
|
для: sidPR
(21.10.2005 в 14:17)
| | все спасибо все врубил как все это делаеться :) | |
|
|
|
|
|
|
|
для: 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
(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"> </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
почему такое ? немогу понять... :( | |
|
|
|
|
|
|
|
для: sidPR
(22.10.2005 в 10:24)
| | Это связано с тем, что у вас форма называется не formname, а gb
<form name="gb" method="post" action="content/gb.php">
|
| |
|
|
|
|
|
|
|
для: 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);
таким образом если человек ввел :) то он замениться на изображение правильно или так нельзя делать ... | |
|
|
|
|
|
|
|
для: sidPR
(22.10.2005 в 12:40)
| | >таким образом если человек ввел :) то он заменится на
>изображение правильно или так нельзя делать ...
Да можно, даже Word так делает :))) Если будет неудобно, всегда можно отменить - жёстких правил, не соблюдение которых приводит к религиозной войне с пол Рунета, здесь нет :))) | |
|
|
|
|
|
|
|
для: cheops
(22.10.2005 в 12:52)
| | Во тут такая трабла как зделать чтобы вставляло не в конец эти смайлики но и там где я поставил курсор =\ | |
|
|
|
|
|
|
|
для: sidPR
(22.10.2005 в 13:15)
| | Посмотрите тему по ссылке http://www.softtime.ru/forum/read.php?id_forum=4&id_theme=3772 - не совсем то, но близко, вообще этот вопрос лучше обсуждать в форуме HTML+CSS+JavaScript | |
|
|
|