1

Тема: Parser Smilies

добавление смайлов стандартными хухами сделано очень не удобно. Заменить стандартный смайлы без извращенность очень сложно smile
Для форума который расширяется правкой кода или сборками - этой еще подходит:)

главная проблема в

$text = preg_replace("#(?<=[>\s])".preg_quote($smiley_text, '#')."(?=\W)#m", '<img src="'.$base_url.'/img/smilies/'.$smiley_img.'" width="15" height="15" alt="'.substr($smiley_img, 0, strrpos($smiley_img, '.')).'" />', $text);

предлагаю изменить массив smiles

$smilies = array(
    ':)' =>
        array(
        'title'    => 'Smile',
        'img'     => 'smile.png'
        ),
    '=)' =>
        array(
        'title'    => 'Smile',
        'img'     => 'smile.png'
        ),
    ':|' =>
        array(
        'title'    => 'Neutral',
        'img'     => 'neutral.png'
        ),
    ':(' =>
        array(
        'title'    => 'Sad',
        'img'     => 'sad.png'
        ),
    '=(' =>
        array(
        'title'    => 'Sad',
        'img'    => 'sad.png'
        ),
    ':D' =>
        array(
        'title'    => 'Big smile',
        'img'    => 'big_smile.png'
        ),
    '=D' =>
        array(
        'title'    => 'Big smile',
        'img'    => 'big_smile.png'
        ),
    ':o' =>
        array(
        'title' => 'Yikes',
        'img'    => 'yikes.png'
        ),
    ':O' =>
        array(
        'title' => 'Yikes',
        'img'    => 'yikes.png'
        ),
    ';)' =>
        array(
        'title'    => 'Wink',
        'img'    => 'wink.png'
        ),
    ':/' =>
        array(
        'title'    => 'Hmm',
        'img'    => 'hmm.png'
        ),
    ':P' =>
        array(
        'title'    => 'Tongue',
        'img'    => 'tongue.png'
        ),
    ':p' =>
        array(
        'title'    => 'Tongue',
        'img'    => 'tongue.png'
        ),
    ':lol:' =>
        array(
        'title'    => 'Lol',
        'img'    => 'lol.png'
        ),
    ':mad:' =>
        array(
        'title'    => 'Mad',
        'img'    => 'mad.png'
        ),    
    ':rolleyes:' =>
        array(
        'title'    => 'Rolleyes',
        'img'    => 'roll.png'
        ),
    ':cool:' =>
        array(
        'title'    => 'Cool',
        'img'    => 'cool.png'
        )
);

и саму функцию do_smilies

function do_smilies($text)
{
    global $forum_config, $base_url, $smilies;

    $return = ($hook = get_hook('ps_do_smilies_start')) ? eval($hook) : null;
    if ($return != null)
        return $return;

    $text = ' '.$text.' ';

    foreach ($smilies as $smiley_text => $smiley_img)
    {
        if (strpos($text, $smiley_text) !== false)
        {
            $src = isset($smiley_img['src']) ? $smiley_img['src'] : $base_url.'/img/smilies/';
            $width = isset($smiley_img['width']) ? $smiley_img['width'] : '15';
            $height = isset($smiley_img['height']) ? $smiley_img['height'] : '15';
            $text = preg_replace("#(?<=[>\s])".preg_quote($smiley_text, '#')."(?=\W)#m", '<img src="'.$src.$smiley_img['img'].'" width="'.$width.'" height="'.$height.'" alt="'.$smiley_text.'" title="'.$smiley_img['title'].'"/>', $text);
        }
    }

    $return = ($hook = get_hook('ps_do_smilies_end')) ? eval($hook) : null;

    return substr($text, 1, -1);
}

а какие у вас есть идеи?

Блог | GitHub

ХХХ: Cлучайно через мозиллу удалил фотки с майл.ру . Как восстановить? Переустановка файрфокса ничего не дала

Сайт KANekT

Поделиться

2

Re: Parser Smilies

Я не занимался плотно смайлами. Но знаю точно, что существующая реализация несовершенна и неудобна с точки зрения писателя расширений и этот вариант выглядит более удачным.
Есть конкретные примеры как это можно использовать в дальнейшем?

Сайт hcs

Поделиться

3

Re: Parser Smilies

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

<hook id="ps_start"><![CDATA[
$smilies[':)'] =
array(
    'title'    => 'Smile',
    'img'    => 'smile.gif',
    'src'    => $ext_info['url'].'/img/'
);
]]></hook>

   
Позволит переопределить стандартный смайл и загрузить его из папки расширения.
Вдруг кому он не нравиться в стандартном исполнении.

какие нужны еще примеры? написать расширение?

например в BBCode buttons: smiles bar высота и ширины вырезаются.
scr делается не правильный, чтобы расширения работало нужно смайлы скопировать в папку /forum/img/

        <!-- modify smiles size for posted message (viewtopic.php) -->
        <hook id="vt_row_pre_display"><![CDATA[
            $forum_page['message']['message'] = str_replace('width="15" height="15"', '', $forum_page['message']['message']);
        ]]></hook>
        <!-- modify smiles size for message preview (post.php) -->
        <hook id="po_preview_pre_display"><![CDATA[
            $forum_page['preview_message'] = str_replace('width="15" height="15"', '', $forum_page['preview_message']);
        ]]></hook>
Блог | GitHub

ХХХ: Cлучайно через мозиллу удалил фотки с майл.ру . Как восстановить? Переустановка файрфокса ничего не дала

Сайт KANekT

Поделиться

4

Re: Parser Smilies

Теги ширины и высоты требовал xhtml strict, как с этими делами в html5 не знаю, может сведущие люди в курсе?
Сейчас мы не считаем что исправлять в 1.4 работу смайлов хорошая идея, т.к. ядро готово к релизу. Но в дальнейшую разработку надо включать, никто не спорит. Вот ты бы взял да и сделал ветку для изменения механизма обработки смайлов?
Кстати только что пришла мысль, что эту модификацию можно еще сделать расширением, в хуке ps_do_smilies_start полностью переписываем функцию, в ps_start с наивысшим приоритетом меняем формат массива смайлов.

Сайт hcs

Поделиться

5

Re: Parser Smilies

hcs пишет:

Вот ты бы взял да и сделал ветку для изменения механизма обработки смайлов?

сделаю. Надо же чтобы добавление смайлов было по человечески smile

Блог | GitHub

ХХХ: Cлучайно через мозиллу удалил фотки с майл.ру . Как восстановить? Переустановка файрфокса ничего не дала

Сайт KANekT

Поделиться

6

Re: Parser Smilies

hcs пишет:

Теги ширины и высоты требовал xhtml strict, как с этими делами в html5 не знаю, может сведущие люди в курсе?

http://dev.w3.org/html5/spec/Overview.html#attr-dim-width пишет:

The width and height attributes on img, iframe, embed, object, video, and, when their type attribute is in the Image Button state, input elements may be specified to give the dimensions of the visual content of the element (the width and height respectively, relative to the nominal direction of the output medium), in CSS pixels. The attributes, if specified, must have values that are valid non-negative integers.

Так что, как я понимаю, они не обязательны (по крайней мере, в текущей редакции HTML5).

Поделиться

7

Re: Parser Smilies

Высота и ширина необходимы, что бы браузер резервировал место для еще не загруженной картинки. Это помогает избежать дёрганья страницы после загрузки картинки.

Смайл. Дата. Подпись.

Поделиться

8

Re: Parser Smilies

Да это понятно, но сейчас, слава богу, уже не 90-ые и люди уже не сидят на модемах 14400
(да и сами смайлы грузятся достаточно быстро, т.ч.  особо прыгать не должно).
Ну а если все-таки оставлять в коде размер для них обязательным, то по-крайней мере нужно иметь возможность задавать этот размер напрямую, потому что даже эти "квиповские" смайлы имеют разные размеры (и в высоту, и в ширину).

Поделиться

9

Re: Parser Smilies

[Релиз] Smiles for Developer

Блог | GitHub

ХХХ: Cлучайно через мозиллу удалил фотки с майл.ру . Как восстановить? Переустановка файрфокса ничего не дала

Сайт KANekT

Поделиться