Hostem Опубликовано 26 Мая 2005 Жалоба Поделиться Опубликовано 26 Мая 2005 При обработке смайлов перед отправкой поста в БД количество preg_replace (которое просматривает весь текст) равно количеству смайлов. Предлагаю смайлики разделить на две группы: обычные ( такие как "" ) и те, где текст между двоеточиями (такое как ). Обычные нужно обрабатывать стандартным способом. А другие будут иметь вид :smile: и переделываться в <!--emo&:smile:--><img src='html_directory/emoticons/smile.gif' border='0' style='vertical-align:middle' alt='smile' /><!--endemo-->. Как у себя реализовал. В пост_парсере, перед обычной вставкой смайлов установил такую строку:$txt = preg_replace( "#\:([a-zA-Z0-9_\-+]+)\:#ie", "\$this->regex_check_img_emoticon('\\1')", $txt ); Т.е. мы преобразвываем по функции regex_check_img_emoticon все, что находится между двоеточиями содержащее символы латинскго алфавита, или цифры, или "_", "-", "+". Функция regex_check_img_emoticon обрабатывает то, что между двоеточиями, считает кол-во смайлов, проверяет есть ли файл "папка_смайлов/то_что_между_двоеточиями.gif". В случае существования файла и не превышения максимально дозволеного кол-ва смайлов в посте перерабатываем ту подстроку в смайл. function regex_check_img_emoticon($url="") { global $ibforums; if (!$url) return; $default = ":".$url.":"; // Make sure we've not overriden the set image # limit $emo_url=$ibforums->vars['html_dir']."emoticons/{$url}.gif"; if (!file_exists($emo_url)) return $default; ++$this->emoticon_count; if ($ibforums->vars['max_emos']) { if ($this->emoticon_count > $ibforums->vars['max_emos']) { $this->error = 'too_many_emoticons'; return $default; } } return "<!--emo&:{$url}:--><img src='{$ibforums->vars['EMOTICONS_URL']}/{$url}.gif' border='0' style='vertical-align:middle' alt='$image' /><!--endemo-->"; } На две групы смайлы разделены полем parse_type в таблице ibf_emoticons. И запрос к обычным смайлам (перед самой обработкой):$DB->query("SELECT typed, image from ibf_emoticons [b]WHERE parse_type=0[/b]");Т.е. уже количество preg_replace для смайлов не количество_смайлов, а количество_смайлов_с_parse_type=0+1. Можно еще одну группу смайлов выделить - которые вставляются тэгом . Если надо перерабатывать не только в gif, то наш шаблон смайлов можно изменить что-то вроде :smile*:, где * значит что gif, а если вместо * стоит например, +, то это будет jpg. Ну и в админке уже генерировать это поле "before" если указано parse_type=1. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.