Редактор темы

Рейтинг в полной новости, вывод num и звезд

  • Автор темы Автор темы Frosty
  • Дата начала Дата начала

Frosty

Забанен
Регистрация
31 Мар 2017
Сообщения
935
Рейтинг реакций
134
Баллы
43
Возраст
37
1/3
Автор темы
Озадачился вывести рейтинг в полной новости немного иным путем, для своего шаблона. Выглядит это так

da6XS0uVSSOnkNRzYrGQqA.png


То есть если мы заметим, то с левой стороны у нас основной момент для гоосвания, а с права вывод в виде звезд по рейтингу через style="width:100%... + количество общий рейтинг.

Реализация вывода общего рейтинга с правой стороны
в шаблоне functions.php после

Код:
return $rated;
   
    }
 
}

Добавить

Код:
function ShowRatingDouble($id, $rating, $vote_num, $allow = true) {
    global $lang, $config;

    if( !$config['rating_type'] ) {
 
        if( $rating AND $vote_num ) $rating = round( ($rating / $vote_num), 0 );
        else $rating = 0;
 
        if ($rating < 0 ) $rating = 0;

        $rating1 = str_replace( ",", ".", $rating );
        $rating = $rating * 20;
 
        $rated = <<<HTML
    <div class='ratig-layer-{$id}'><div class="rating">
        <ul class="unit-rating">
        <li class="current-rating" style="width:{$rating}%;">{$rating}</li>
        <li><span title="{$lang['useless']}" class="r1-unit">1</span></li>
        <li><span title="{$lang['poor']}" class="r2-unit">2</span></li>
        <li><span title="{$lang['fair']}" class="r3-unit">3</span></li>
        <li><span title="{$lang['good']}" class="r4-unit">4</span></li>
        <li><span title="{$lang['excellent']}" class="r5-unit">5</span></li>
        </ul>
<div class="rating_digits"><div class="rating_digits_1">Рейтинг: {$rating1}/5 ({$vote_num} гол.)</div></div>
</div></div>
HTML;
 
        return $rated;
  }
}

в файле show.full.php после

Код:
$tpl->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], $user_group[$member_id['user_group']]['allow_rating'] ) );

добавить

Код:
$tpl->set( '{rating-2}', ShowRatingDouble( $row['id'], $row['rating'], $row['vote_num'], $user_group[$member_id['user_group']]['allow_rating'] ) );

в шаблон полной новости выводит через тег {rating-2}

Это реализация вывода общего рейтинга в виде звезд. Что бы реализовать рядом или в другом месте вывод общего итога голосования в виде цифры, то делаем следующее.

в шаблоне functions.php ищем

Код:
if( $rating AND $vote_num ) $rating = round( ($rating / $vote_num), 0 );
else $rating = 0;
if ($rating < 0 ) $rating = 0;
$rating = $rating * 20;

заменяем оба раза на

Код:
if( $rating AND $vote_num ) $rating = round( ($rating / $vote_num), 1 );
else $rating = 0;
if ($rating < 0 ) $rating = 0;
$rating = floor($rating * 20);

Этот момент я думаю все знают, он делает рейтинг чуть точнее. Решил добавить к теме.

Далее в файле show.full.php находим


Код:
$tpl->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], $user_group[$member_id['user_group']]['allow_rating'] ) );

чуть ниже вставляем

Код:
if ($row['vote_num'] == '0') $tpl->set( '{rating_nums}',"<span class=\"stareval-note no-rating\">?</span>");
else $tpl->set( '{rating_nums}', "<span class=\"stareval-note friends\">" . str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)) . "</span>");

В шаблоне в полной новости, выводим тегом {rating_nums}.

На этом все. Оформляем как удобно либо не оформляем.

Благодарность byroot за модификацию кода и подсказку!

 
Последнее редактирование:
Автор темы
Теперь в плане не много усовершенствовать. Жду подсказок.

Нужна еще одна доработка в существующем коде) нужно присвоить иконку к тегу
Код:
$tpl->set( '{rating_nums}', str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)));

Если ни одного голоса нет, то выводится знак вопросика, но он у меня в виде иконки, то есть если голоса есть за новость то показывает вот так
Код:
<span class="stareval-note friends">5</span>
А если нет ни одного голоса, то он должен выводить
Код:
<span class="stareval-note no-rating">?</span>
 
попробуй заменить
PHP:
$tpl->set( '{rating_nums}', str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)));
на
PHP:
if ($row['vote_num'] = '0') $tpl->set( '{rating_nums}',"<span class=\"stareval-note no-rating\">?</span>");
else $tpl->set( '{rating_nums}', str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)));
 
Автор темы
попробуй заменить
PHP:
$tpl->set( '{rating_nums}', str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)));
на
PHP:
if ($row['vote_num'] = '0') $tpl->set( '{rating_nums}',"<span class=\"stareval-note no-rating\">?</span>");
else $tpl->set( '{rating_nums}', str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)));

Без результата )
 
Автор темы
Не работает) Нужно что бы этот стиль убирался, когда нет голосов Screenshot. Щас ситуация такая, в новости где голоса есть выводится вопросик.
он у тебя дублируется в шаблоне чтоли? Почему код, который должен выводиться один раз, у тебя выводится дважды?
 
попробуй заменить
PHP:
$tpl->set( '{rating_nums}', str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)));
на
PHP:
if ($row['vote_num'] = '0') $tpl->set( '{rating_nums}',"<span class=\"stareval-note no-rating\">?</span>");
else $tpl->set( '{rating_nums}', str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)));
if ($row['vote_num'] = '0') 😱 wtf?
PHP:
$tpl->set( '{rating_nums}', str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)));
на
PHP:
if ($row['vote_num'] == '0') $tpl->set( '{rating_nums}',"<span class=\"stareval-note no-rating\">?</span>");
else $tpl->set( '{rating_nums}', str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)));
 
Автор темы
Смотри, у меня щас в шаблоне вот так

<span class="stareval-note friends">{rating_nums}</span>
Это когда есть голоса, а когда нет, то этот убирается <span class="stareval-note friends">{rating_nums}</span> и должен быть вот этот
<span class="stareval-note no-rating">?</span>
 
Frosty тогда надо вводить теги-условия. Либо
PHP:
$tpl->set( '{rating_nums}', str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)));
на
PHP:
if ($row['vote_num'] == '0') $tpl->set( '{rating_nums}',"<span class=\"stareval-note no-rating\">?</span>");
else $tpl->set( '{rating_nums}', "<span class=\"stareval-note friends\">" . str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)) . "</span>");
В шаблоне
PHP:
<span class="stareval-note friends">{rating_nums}</span>
На
PHP:
{rating_nums}
 
Последнее редактирование:
Автор темы
Frosty тогда надо вводить теги-условия. Либо
PHP:
$tpl->set( '{rating_nums}', str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)));
на
PHP:
if ($row['vote_num'] == '0') $tpl->set( '{rating_nums}',"<span class=\"stareval-note no-rating\">?</span>");
else $tpl->set( '{rating_nums}', "<span class=\"stareval-note friends\">" . str_replace(",",".",round($row['rating']/max(1,$row['vote_num']),1)) . "</span>");
В шаблоне
PHP:
<span class="stareval-note friends">{rating_nums}</span>
На
PHP:
{rating_nums}

Все верно, работает ) Черкани в лс пож-ста!
 
Бывает. Я как-то по невнимательности часа 2 искал почему не работает. 😀
бывает! иногда так же по свои сайтам что то правлю и не могу вкурить что не работает, но когда на своих сайтах то проверка когда проходит сразу и проверка равенства обычно проходит довольно быстро.
 
Выложите готовый вариант в первый пост
 
Автор темы
Выложите готовый вариант в первый пост

Так там итак готовый вариант, редактируете под свой шаблон и все. Если вы имеете ввиду вариант голосования с кнопкой отмены, то это индивидуальная доработка.
 

Похожие темы Последние темы Популярные темы

Назад
Сверху