Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#1 2006-06-30 12:12:24

Bear
Гость

Пробелы и смайлы

Как сделать чтобы смайлы парсились всегда? Тоесть, если даже все написано слитно, то смайл преобразовывался бы в картинку.

#2 2006-06-30 12:27:54

hcs
Гость

Re: Пробелы и смайлы

Этот регекс надо править:

$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);

Нужно спецов по регекспам спрашивать.

#3 2006-06-30 13:16:16

trijin
Гость

Re: Пробелы и смайлы

ну здесь идет проверка на НЕ Слова СЛОВа и прочее.
Проще заменить строчку на $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)

#4 2006-06-30 14:18:50

Bear
Гость

Re: Пробелы и смайлы

/include/parser.php - делай поиск "Convert a series of smilies to images", т.к. у меня моды стоят, номера строк изменены.

#5 2006-06-30 15:18:55

trijin
Гость

Re: Пробелы и смайлы

Найти

    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;

Хотел бы узнать мнение остальных, а зачем вообще было сделано с помощью регулярки? чтобы не переводились вот такие smile)))))))) ? хотя и такие переводятся.
знаю еще что очень любится переводится httphmm/ м.б. из-за этого. но если все смайлы оформить как :smile01: то в принципе паралельно )

Редактировался trijin (2006-06-30 15:20:47)

#6 2006-06-30 15:20:09

hcs
Гость

Re: Пробелы и смайлы

ну тогда и менять всю эту строку.
это функция do_smilies ~358

#7 2006-06-30 15:21:25

hcs
Гость

Re: Пробелы и смайлы

упс. с помощью регулярки делалось, я так думаю, именно с целью менять только смайлы отделённые пробелами.

#8 2006-06-30 15:42:08

Bear
Гость

Re: Пробелы и смайлы

Ok, thx smile

#9 2006-07-13 07:36:23

Bear
Гость

Re: Пробелы и смайлы

Кстати, вот код из 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;

Мож кто переделает для пуна. Думаю так будет намного удобней.

#10 2006-07-16 18:25:11

Tipok
Гость

Re: Пробелы и смайлы

А как зделать так чтоб смайлы не были стандартного размера? Тоесть все стандартные идут 15х15. Когда я добавил свои, то у меня их сжало да таких-же размеров. А они у меня все разные по зазмерам. sad

#11 2006-07-16 19:46:41

SDTux
Гость

Re: Пробелы и смайлы

Думаю, поиск по строке width=15 или width="15 может очень помочь wink

#12 2006-07-16 23:10:18

Tipok
Гость

Re: Пробелы и смайлы

Да. Находил и правил эти строки только вот проблема в том что если я там меняю размер, то все смайли не зависимо от того более у них разширение или меньшее становятся именно того размера что там указан. sad

#13 2006-07-17 03:16:12

hcs
Гость

Re: Пробелы и смайлы

Ты эти строки не правь а просто убери. Хоть и не по стандарту, но браузеры отобразять корректно.

#14 2006-07-17 17:10:17

Tipok
Гость

Re: Пробелы и смайлы

Оо. Большое спасибо. Помогло. Как я сразу не догадался попробовать. Можно еще вопрос?  Как мне зделать смайлы для админов? Чтоб они небыли доступны для обычных пользователей? В принципе можно запретить вывод в ХЕЛП команд которые выводят  этот смаил, но тогда нужно зделать насколько ХЕЛПов которые будет выводиться в зависимости от уровня доступа. Вобщем не знаю.

Редактировался Tipok (2006-07-17 17:30:58)

#15 2006-07-18 04:45:05

SDTux
Гость

Re: Пробелы и смайлы

Да и еще писать парсер, который будет проверять, оставлен пост админом или нет, чтобы, посмотрев код страницы, пользователи не смогли использовать "элитные" смайлы.

#16 2006-08-22 15:09:23

CR
Гость

Re: Пробелы и смайлы

trijin пишет:

Найти

    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] ? а то httphmm/ не проходит)

#17 2007-09-19 21:44:52

Andy
Гость

Re: Пробелы и смайлы

hcs пишет:

Ты эти строки не правь а просто убери. Хоть и не по стандарту, но браузеры отобразять корректно.

Подскажете? Строки убрал, но эффекта никакого нету. Есть желание загрузить смыйлы из QIP, которые размерами 51 на 51 максимально.

#18 2007-09-19 22:49:30

nobody
Гость

Re: Пробелы и смайлы

Здесь можно прочитать как добавить свои смайлики - Как сделать больше 15 смайлов?
Значения width и height нужно убрать в parser.php и в файлах модов mod_easy_bbcode.php, mod_modern_bbcode.php и т.д. если подобные моды установлены.

Andy пишет:

но эффекта никакого нету

Не может этого быть smile, где ты не видишь эффекта? В BB-панели? В самих сообщениях?

Подвал доски

Под управлением FluxBB. Хостинг Hostens