Скрыть объявление
ВАШИ ПРАВА ОГРАНИЧЕНЫ!

Зарегистрируйтесь на форуме, чтобы стать полноценным участником сообщества!

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

Тема в разделе "Хаки DLE", создана пользователем Frosty, 24 июн 2017.

24.06.17 в 15:26
26.06.17 в 17:25
17
1.848
1
  1. TopicStarter Overlay
    Frosty

    Забанен

    Регистрация:
    31 мар 2017
    Сообщения:
    941
    Лучших ответов:
    1
    Рейтинги:
    +188 / 18 / -0
    Озадачился вывести рейтинг в полной новости немного иным путем, для своего шаблона. Выглядит это так

    [​IMG]

    То есть если мы заметим, то с левой стороны у нас основной момент для гоосвания, а с права вывод в виде звезд по рейтингу через 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 за модификацию кода и подсказку!

     
    #1 Frosty, 24 июн 2017
    Последнее редактирование: 24 июн 2017
    • Нравится Нравится x 1
  2. TopicStarter Overlay
    Frosty

    Забанен

    Регистрация:
    31 мар 2017
    Сообщения:
    941
    Лучших ответов:
    1
    Рейтинги:
    +188 / 18 / -0
    Теперь в плане не много усовершенствовать. Жду подсказок.

    Нужна еще одна доработка в существующем коде) нужно присвоить иконку к тегу
    Код:
    $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>
     
  3. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.205 / 74 / -0
    попробуй заменить
    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)));
     
  4. TopicStarter Overlay
    Frosty

    Забанен

    Регистрация:
    31 мар 2017
    Сообщения:
    941
    Лучших ответов:
    1
    Рейтинги:
    +188 / 18 / -0
    Без результата )
     
  5. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.205 / 74 / -0
    тогда
    if ( !$row['vote_num'] )...
     
  6. TopicStarter Overlay
    Frosty

    Забанен

    Регистрация:
    31 мар 2017
    Сообщения:
    941
    Лучших ответов:
    1
    Рейтинги:
    +188 / 18 / -0
    Не работает) Нужно что бы этот стиль убирался, когда нет голосов Screenshot. Щас ситуация такая, в новости где голоса есть выводится вопросик.
     
  7. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.205 / 74 / -0
    он у тебя дублируется в шаблоне чтоли? Почему код, который должен выводиться один раз, у тебя выводится дважды?
     
  8. DotNet

    Кодер

    Регистрация:
    6 фев 2017
    Сообщения:
    54
    Лучших ответов:
    0
    Рейтинги:
    +34 / 0 / -0
    if ($row['vote_num'] = '0') :eek: 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)));
     
  9. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.205 / 74 / -0
    разве это не аналог !$row['vote_num'] ?
     
  10. DotNet

    Кодер

    Регистрация:
    6 фев 2017
    Сообщения:
    54
    Лучших ответов:
    0
    Рейтинги:
    +34 / 0 / -0
  11. TopicStarter Overlay
    Frosty

    Забанен

    Регистрация:
    31 мар 2017
    Сообщения:
    941
    Лучших ответов:
    1
    Рейтинги:
    +188 / 18 / -0
    Смотри, у меня щас в шаблоне вот так

    <span class="stareval-note friends">{rating_nums}</span>
    Это когда есть голоса, а когда нет, то этот убирается <span class="stareval-note friends">{rating_nums}</span> и должен быть вот этот
    <span class="stareval-note no-rating">?</span>
     
  12. DotNet

    Кодер

    Регистрация:
    6 фев 2017
    Сообщения:
    54
    Лучших ответов:
    0
    Рейтинги:
    +34 / 0 / -0
    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}
     
    #12 DotNet, 24 июн 2017
    Последнее редактирование: 24 июн 2017
    • Нравится Нравится x 1
  13. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.205 / 74 / -0
  14. TopicStarter Overlay
    Frosty

    Забанен

    Регистрация:
    31 мар 2017
    Сообщения:
    941
    Лучших ответов:
    1
    Рейтинги:
    +188 / 18 / -0
    Все верно, работает ) Черкани в лс пож-ста!
     
  15. DotNet

    Кодер

    Регистрация:
    6 фев 2017
    Сообщения:
    54
    Лучших ответов:
    0
    Рейтинги:
    +34 / 0 / -0
    Бывает. Я как-то по невнимательности часа 2 искал почему не работает. :D
     
  16. byroot

    Забанен

    Регистрация:
    10 окт 2015
    Сообщения:
    12.297
    Лучших ответов:
    54
    Рейтинги:
    +5.205 / 74 / -0
    бывает! иногда так же по свои сайтам что то правлю и не могу вкурить что не работает, но когда на своих сайтах то проверка когда проходит сразу и проверка равенства обычно проходит довольно быстро.
     
  17. Winston?!

    VIP Кинотрафик v2

    Регистрация:
    31 дек 2016
    Сообщения:
    1.231
    Лучших ответов:
    2
    Рейтинги:
    +94 / 11 / -0
    Выложите готовый вариант в первый пост
     
  18. TopicStarter Overlay
    Frosty

    Забанен

    Регистрация:
    31 мар 2017
    Сообщения:
    941
    Лучших ответов:
    1
    Рейтинги:
    +188 / 18 / -0
    Так там итак готовый вариант, редактируете под свой шаблон и все. Если вы имеете ввиду вариант голосования с кнопкой отмены, то это индивидуальная доработка.
     
Яндекс.Метрика