1

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

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

Поделиться

2

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

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

Сайт hcs

Поделиться

3 (30.06.2006 02:18 отредактировано 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.ru/forum/viewforum.php?id=10 пол года в дауне - скоро вернется =)

Поделиться

4

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

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

Поделиться

5 (30.06.2006 04:20 отредактировано 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.ru/forum/viewforum.php?id=10 пол года в дауне - скоро вернется =)

Поделиться

6

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

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

Сайт hcs

Поделиться

7

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

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

Сайт hcs

Поделиться

8

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

Ok, thx smile

Поделиться

9

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

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

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

Поделиться

11

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

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

"Мнение большинства не является критерием истины."

Сайт SDTux

Поделиться

12

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

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

Поделиться

13

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

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

Сайт hcs

Поделиться

14 (17.07.2006 06:30 отредактировано Tipok)

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

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

Поделиться

15

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

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

"Мнение большинства не является критерием истины."

Сайт SDTux

Поделиться

16

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

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

hcs пишет:

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

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

Поделиться

18

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

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

Andy пишет:

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

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

PunBB.Ru ☭

Сайт nobody

Поделиться