Портал / Portal

whuru

Пользователь
Помогите научить портал определять постер из тела сообщения с ББ-кодом
Код:
[poster][/poster]

Место определения в коде я нашел, но дальше моих познаний не хватает. Пробовал из bbcode.php брал:
PHP:
$bbcode_tpl['poster'] = <<<HTML
    <img src="\\1" style="float: right; max-width:550px; max-height:500px;" title="$1" onload="cvi_glossy.add(this,{radius:30,nogradient:true,angle:-33,shadow:30})"/>
   
HTML;

безуспешно.

Вот кусок кода, где portal.php постер выбирает:
PHP:
    preg_match_all('/<var class="postImg postImgAligned img-(.*?)" title="(.*?)">&#10;<\/var>/', $topics[$i]['post_html'], $poster, PREG_SET_ORDER);
    preg_match_all('/<var class="postImg" title="(.*?)">&#10;<\/var>/', $topics[$i]['post_html'], $poster2, PREG_SET_ORDER);
 
G

Gemini_13

Гость
а что конкретно не получается? показывай, как делаешь и бум разбиратся. нужно сделать аналог этих двух строчек, но под постер и трогать ббкод.пхп не нужно
PHP:
    preg_match_all('/<var class="postImg postImgAligned img-(.*?)" title="(.*?)">&#10;<\/var>/', $topics[$i]['post_html'], $poster, PREG_SET_ORDER);
    preg_match_all('/<var class="postImg" title="(.*?)">&#10;<\/var>/', $topics[$i]['post_html'], $poster2, PREG_SET_ORDER);
 

whuru

Пользователь
Мне надо сделать, чтобы сначала искал код [poster], если нет, то остальные тэги. Делал так:
PHP:
 preg_match_all('/[COLOR=#000000][COLOR=#dd0000]<img src="\\1" style="float: right; max-width:550px; max-height:500px;" title="$1" onload="cvi_glossy.add(this,{radius:30,nogradient:true,angle:-33,shadow:30})"/>[/COLOR][/COLOR]/', $topics[$i]['post_html'], $poster, PREG_SET_ORDER);
preg_match_all('/<var class="postImg postImgAligned img-(.*?)" title="(.*?)">&#10;<\/var>/', $topics[$i]['post_html'], $poster, PREG_SET_ORDER);
    preg_match_all('/<var class="postImg" title="(.*?)">&#10;<\/var>/', $topics[$i]['post_html'], $poster2, PREG_SET_ORDER);
 
G

Gemini_13

Гость
PHP:
preg_match_all('/[COLOR=#000000][COLOR=#dd0000]<img src="\\1" style="float: right; max-width:550px; max-height:500px;" title="$1" onload="cvi_glossy.add(this,{radius:30,nogradient:true,angle:-33,shadow:30})"/>[/COLOR][/COLOR]/', $topics[$i]['post_html'], $poster, PREG_SET_ORDER);
уважаемый, если и дальше будем копипастить что попало и куда попало лишь бы сделать вид, что были какие-то попытки что-то сделать, то можно остаться с носом и никто не будет помогать.

1. интересно что тут делает тег color? еще и два раза.
2. слеши нужно экранировать. в твоем случае слеши "/" нужно писать "\/".
3. "\\1" и "$1" - вообще не понятно чего они тут делают. это с ббкод.пхп и к чистым регуляркам не относится никак. пиши в этих местах "(.*?)".

когда исправишь скажешь работает или нет. если нет, то тогда будем дальше смотреть.

Инфо по регуляркам:

Please Login or Register to view hidden text.

 

whuru

Пользователь
Вставил такое выражение:

PHP:
    preg_match_all('/<img src="(.*?)" style="float: right; max-width:550px; max-height:500px;" title="(.*?)" onload="cvi_glossy.add(this,{radius:30,nogradient:true,angle:-33,shadow:30})"\/>/', $topics[$i]['post_html'], $poster, PREG_SET_ORDER);

Не находит по такому определению постеры
 
G

Gemini_13

Гость
покажи весь кусок кода, а то кажется мне, что картинки и постеры у тебя под одной переменной $poster
 

whuru

Пользователь
PHP:
    for ($i = 0; $i < count($topics); $i++)
    {
    preg_match_all('/<var class="postImg postImgAligned img-(.*?)" title="(.*?)">&#10;<\/var>/', $topics[$i]['post_html'], $poster, PREG_SET_ORDER);
    preg_match_all('/<img src="(.*?)" style="float: right; max-width:550px; max-height:500px;" title="(.*?)" onload="cvi_glossy.add(this,{radius:30,nogradient:true,angle:-33,shadow:30})"\/>/', $topics[$i]['post_html'], $poster, PREG_SET_ORDER); 
    preg_match_all('/<var class="postImg" title="(.*?)">&#10;<\/var>/', $topics[$i]['post_html'], $poster2, PREG_SET_ORDER);
 
    $url = '';
    if (@$poster[0][2])
    {
        $url = $poster[0][2];
    }
    elseif (@$poster2[0][1])
    {
        $url = $poster2[0][1];
    }
 
    $title_post = $topics[$i]['post_html'];
    $pos = strpos($title_post, 'Описание');
    $title_post = substr($title_post, $pos);
    if ($pos = strpos($title_post, 'Качество'))
    {
    $pos = strpos($title_post, 'Качество');
    $title_post = strip_tags(html_entity_decode(substr($title_post, 0, $pos)));
    }
    elseif ($pos = strpos($title_post, '<span class="post-hr">'))
    {
    $pos = strpos($title_post, '<span class="post-hr">');
    $title_post = strip_tags(html_entity_decode(substr($title_post, 0, $pos)));
    }
    elseif ($pos = strpos($title_post, '<div class="sp-wrap">'))
    {
    $pos = strpos($title_post, '<div class="sp-wrap">');
    $title_post = strip_tags(html_entity_decode(substr($title_post, 0, $pos)));
    }
    elseif ($pos = strpos($title_post, '<br />'))
    {
    $pos = strpos($title_post, '<br />');
    $title_post = strip_tags(html_entity_decode(substr($title_post, 0, $pos)));
    }
 
        $template->assign_block_vars('topics', array(
            'TOPIC_TITLE' => $topics[$i]['topic_title'],
            'U_VIEW_TOPIC' => TOPIC_URL . $topics[$i]['topic_id'],
            'POSTER' => profile_url(array('username' => $topics[$i]['username'], 'user_rank' => $topics[$i]['user_rank'])),
            'SIZE' => humn_size($topics[$i]['size']),
            'TOPIC_POSTER_ID' => $topics[$i]['user_id'],
            'TIME' => bb_date($topics[$i]['topic_time']),
            'POSTER_IMG' => '<img border="1" src="'.$url.'" align="left" style="margin-bottom:8px;margin-right:8px;max-width:200px;max-height:200px;">',
            'REPLIES' => '<a href='. TOPIC_URL . $topics[$i]['topic_id'] .'>Комментариев:&nbsp;'. $topics[$i]['topic_replies'] .'</a>',
            'DESCRIPTION' => $title_post,
            'DOWNLOAD' => '<a href="download.php?id='. $topics[$i]['attach_id'] .'"><b>Скачать</b></a>',
        ));
    }

Этот вариант тэги:
Код:
[poster][/poster]
не видит, находит только:
Код:
[img=right][/img]
и если нет такого, то просто:
Код:
[img][/img]
 

krumax

Пользователь
whuru,
добавляем регулярку (обрати внимание, у меня ограничен размер вывода постера, а у тебя может нет)
PHP:
preg_match_all('/<img src="(.*?)" style="float: right; max-width:550px; max-height:500px;" title="(.*?)" onload="(.*?)"\/>/', $topics[$i]['post_html'], $poster3, PREG_SET_ORDER);
и вот это

PHP:
elseif (@$poster3[0][1])
{
$url = $poster3[0][1];
}
 
Сверху