Быстрый лёгкий надёжный форумный движок
Вы не вошли.
Страницы 1
Тема закрыта
Как сделать чтобы смайлы парсились всегда? Тоесть, если даже все написано слитно, то смайл преобразовывался бы в картинку.
Этот регекс надо править:
$text = preg_replace("#(?<=.\W|\W.|^\W)".preg_quote($smiley_text[$i], '#')."(?=.\W|\W.|\W$)#m", '$1<img src="img/smilies/'.$smiley_img[$i].'" width="15" height="15" alt="'.substr($smiley_img[$i], 0, strrpos($smiley_img[$i], '.')).'" />$2', $text);
Нужно спецов по регекспам спрашивать.
ну здесь идет проверка на НЕ Слова СЛОВа и прочее.
Проще заменить строчку на $text=str_replace($arr1,$arr2,$text); где $arr1 равер списку замены. (какие символы заменять);
$arr2 равен '<img src="img/smilies/'.$smiley_img[$i].'" width="15" height="15" alt="'.substr($smiley_img[$i], 0, strrpos($smiley_img[$i], '.')).'" />' соответственно для каждой замены.
Регулярка тогда вообще теряет необходимость. и быстрее будет.
если укажете файл и номер строчки приведенного выше кода сделаю инструкцию поточнее.
Редактировался trijin (2006-06-30 13:18:35)
/include/parser.php - делай поиск "Convert a series of smilies to images", т.к. у меня моды стоят, номера строк изменены.
Найти
for ($i = 0; $i < $num_smilies; ++$i)
$text = preg_replace("#(?<=.\W|\W.|^\W)".preg_quote($smiley_text[$i], '#')."(?=.\W|\W.|\W$)#m", '$1<img src="img/smilies/'.$smiley_img[$i].'" width="15" height="15" alt="'.substr($smiley_img[$i], 0, strrpos($smiley_img[$i], '.')).'" />$2', $text);
return substr($text, 1, -1);
заменить на
for ($i = 0; $i < $num_smilies; ++$i)
$arr2[$i]='<img src="img/smilies/'.$smiley_img[$i].'" width="15" height="15" alt="'.substr($smiley_img[$i], 0,-4).'" />';
$text = str_replace($smiley_text,$arr2,$text);
return $text;
Хотел бы узнать мнение остальных, а зачем вообще было сделано с помощью регулярки? чтобы не переводились вот такие )))))))) ? хотя и такие переводятся.
знаю еще что очень любится переводится http/ м.б. из-за этого. но если все смайлы оформить как :smile01: то в принципе паралельно )
Редактировался trijin (2006-06-30 15:20:47)
ну тогда и менять всю эту строку.
это функция do_smilies ~358
упс. с помощью регулярки делалось, я так думаю, именно с целью менять только смайлы отделённые пробелами.
Ok, thx
Кстати, вот код из IPB2:
if ($in['SMILIES'] != 0 and $in['SIGNATURE'] == 0)
{
$txt = ' '.$txt.' ';
usort( $ibforums->cache['emoticons'] , array( 'post_parser', 'smilie_length_sort' ) );
if ( count( $ibforums->cache['emoticons'] ) > 0 )
{
foreach( $ibforums->cache['emoticons'] as $a_id => $row)
{
if ( $row['emo_set'] != $ibforums->skin['_emodir'] )
{
continue;
}
$code = $row['typed'];
$image = $row['image'];
//------------------------------
// Make safe for regex
//------------------------------
$code = preg_quote($code, "/");
$txt = preg_replace( "!(?<=[^\w&;/])$code(?=.\W|\W.|\W$)!ei", "\$this->convert_emoticon('$code', '$image')", $txt );
}
}
$txt = trim($txt);
if ( $ibforums->vars['max_emos'] )
{
if ($this->emoticon_count > $ibforums->vars['max_emos'])
{
$this->error = 'too_many_emoticons';
}
}
}
$txt = $this->bad_words($txt);
$txt = $this->bbcode_check($txt);
return $txt;
Мож кто переделает для пуна. Думаю так будет намного удобней.
А как зделать так чтоб смайлы не были стандартного размера? Тоесть все стандартные идут 15х15. Когда я добавил свои, то у меня их сжало да таких-же размеров. А они у меня все разные по зазмерам.
Думаю, поиск по строке width=15 или width="15 может очень помочь
Да. Находил и правил эти строки только вот проблема в том что если я там меняю размер, то все смайли не зависимо от того более у них разширение или меньшее становятся именно того размера что там указан.
Ты эти строки не правь а просто убери. Хоть и не по стандарту, но браузеры отобразять корректно.
Оо. Большое спасибо. Помогло. Как я сразу не догадался попробовать. Можно еще вопрос? Как мне зделать смайлы для админов? Чтоб они небыли доступны для обычных пользователей? В принципе можно запретить вывод в ХЕЛП команд которые выводят этот смаил, но тогда нужно зделать насколько ХЕЛПов которые будет выводиться в зависимости от уровня доступа. Вобщем не знаю.
Редактировался Tipok (2006-07-17 17:30:58)
Да и еще писать парсер, который будет проверять, оставлен пост админом или нет, чтобы, посмотрев код страницы, пользователи не смогли использовать "элитные" смайлы.
Найти
for ($i = 0; $i < $num_smilies; ++$i) $text = preg_replace("#(?<=.\W|\W.|^\W)".preg_quote($smiley_text[$i], '#')."(?=.\W|\W.|\W$)#m", '$1<img src="img/smilies/'.$smiley_img[$i].'" width="15" height="15" alt="'.substr($smiley_img[$i], 0, strrpos($smiley_img[$i], '.')).'" />$2', $text); return substr($text, 1, -1);
заменить на
for ($i = 0; $i < $num_smilies; ++$i) $arr2[$i]='<img src="img/smilies/'.$smiley_img[$i].'" width="15" height="15" alt="'.substr($smiley_img[$i], 0,-4).'" />'; $text = str_replace($smiley_text,$arr2,$text); return $text;
а как сделать так что бы он исключал из этого тег [img] ? а то http/ не проходит)
Ты эти строки не правь а просто убери. Хоть и не по стандарту, но браузеры отобразять корректно.
Подскажете? Строки убрал, но эффекта никакого нету. Есть желание загрузить смыйлы из QIP, которые размерами 51 на 51 максимально.
Здесь можно прочитать как добавить свои смайлики - Как сделать больше 15 смайлов?
Значения width и height нужно убрать в parser.php и в файлах модов mod_easy_bbcode.php, mod_modern_bbcode.php и т.д. если подобные моды установлены.
но эффекта никакого нету
Не может этого быть , где ты не видишь эффекта? В BB-панели? В самих сообщениях?
Страницы 1
Тема закрыта