Коды всех смайликов «ВКонтакте» с обозначениями   •   Online-инструменты
1 872 просм
20 комм
Поделиться:

Улучшаем рейтинг материалов DLE + выводим общую оценку в нужном месте

Для тех, кто не знал, мы недавно обновили наши онлайн инструменты. Сделали их более удобными и функциональными. Но сейчас речь идет не об этом. В процессе реализации мы столкнулись с некоторыми проблемами, а именно:

1. Стандартный рейтинг звездами в DLE показался нам не совсем точным;
2. Нам потребовалось вывести числом общую оценку рейтинга в нужном нам месте.

Первую мы смогли обнаружить с помощью второй проблемы, когда вывели число рейтинга, который показывал нам оценку 4.7, в то время, как звезды показывали нам показатель в 4.5. Решить обе проблемы нам удалось, и сейчас мы расскажем вам, как мы это сделали.

Повышаем точность рейтинга

Для того чтобы сделать ваш рейтинг более точным, выполним следующее:

1. Открываем файл functions.php в папке /engine/modules/, на 281 строке находим:

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

2. И заменяем все на:

if($rating AND $vote_num) {
	$rating = round(($rating / $vote_num), 1);
} else {
	$rating = 0;
}
if($rating < 0) {
	$rating = 0;
}
$rating = floor($rating * 20);

Вот такими манипуляциями мы сделали наш рейтинг более точным.

Выводим общую оценку рейтинга

Для того чтобы вывести в нужном месте общую оценку рейтинга числом, делаем следующее:

1. Открываем файлы show.full.php в папке /engine/modules/ находим строчку:

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

и после нее вставляем:

$tpl->set('{rating_nums}', str_replace(",", ".", round($row['rating'] / max(1,$row['vote_num']),1)));

Сохраняем и отправляем файл обратно на сайт.

2. Далее, открываем файл show.short.php в папке /engine/modules/ находим строчку:

$tpl->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], 1 ) );

и после нее вставляем:

$tpl->set('{rating_nums}', str_replace(",", ".", round($row['rating'] / max(1,$row['vote_num']),1)));

Сохраняем и отправляем файл обратно на сайт.

На сайте, в нужном вам месте используйте тег {rating_nums} для вывода общей оценки

Важное замечание, 1 здесь – это сколько должно выводиться знаков после запятой, то есть рейтинг будет в виде 4.7, если вы измените 1 на 2, то будет, например, 4.67.

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

Если у вас остались вопросы – задавайте их в комментариях.

20
комментарий
Навигация:
1 2
Chessman
29.11 в 15:11
Кстати про рейтинг. была б очень полезной статья про микроразметку рейтинга да и вообще всего сайта на dle. Находил много полезностей на эту тему у Алаичъа но там старая инфа, не рискнул применять к своим сайтам.
  • 1
Артем Малков
29.11 в 15:13
Chessman, Мы не давно делали размету для наших онлайн сервисов - все работает. Так что позже опубликуем статейку на эту тему
  • 1
Gh8st
3.03 в 14:05
Спасибо за отличный хак :) Так же интересует микроразметка рейтинга.
  • 0
Gh8st, всегда пожалуйста. А с микроразметкой рейтинга вы можете ознакомиться здесь - https://artem-malcov.ru/stati_i_sovety/mikrorazmetkareytinga-polnoy-novosti-v-dle
  • 1
Serg
10.09 в 12:35
Здравствуйте, вопрос можно? Относительно "Выводим общую оценку рейтинга" - у меня строка которую надо заменить немного отличается, Она вот такая
if( $config['short_rating'] and $user_group[$member_id['user_group']]['allow_rating'] )
$tpl->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], 1 ) );

Методом "тыка" я выяснил что если убрать вторую строку и добавить ваш код, то все работает (иначе - движок падает), но терзают смутные сомненья, не отключил ли я что-то нужное и не вылезет ли мне это боком потом?)
  • 1
Serg, спасибо за замечание! Поправили статью. wink
  • 0
Serg
11.09 в 17:22
на дле10 оно так не работает( при наличии данной строки - ошибка... Работает только если убрать ту строку...а иначе ругается на "unexpected else" в 298 строке...
А та строка которую я убрал критична или можно и без нее?
  • 0
Serg, всего скорее у вас там такие строки:

if( $config['short_rating'] and $user_group[$member_id['user_group']]['allow_rating'] ) $tpl->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], 1 ) );
else $tpl->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], 0 ) );

Замените их на:

if($config['short_rating'] and $user_group[$member_id['user_group']]['allow_rating'] ) {
$tpl->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], 1 ) );
} else {
$tpl->set( '{rating}', ShowRating( $row['id'], $row['rating'], $row['vote_num'], 0 ) );
}

И дальше, сделайте все как написано в инструкции - ошибок быть не должно
  • 1
Serg
12.09 в 21:36
спасибо! так все без ошибок работает...
  • 0
Epictrium
10.10 в 21:44
Все работает на ура!

Однако есть одно НО - в теге {custom} новый тег {rating_nums} отображается как {rating_nums}, а не как число.
А вот в теге {content} новый тег отображается корректно.

Очень неприятная проблема. Прошу Вашей помощи, Артем =)
  • 1
Epictrium, если я правильно понял о чем речь, то:

1. Откройте файл main.php в папке /engine/modules/, и найдите в нем строку содержащую:

if (stripos ( $tpl->copy_template, "{custom" ) !== false) {

Выше нее вставьте:

$row_num_rate = $row['vote_num'];
$tpl->set( '{vote_nums}', $row_num_rate );

Сохраните изменения и отправьте файл обратно на сайт + очистите кэш сайта если он используется.

Если все получилось - отпишитесь в комментариях.
  • 0
Epictrium
11.10 в 00:47
Увы, не помогло.

Попробую разъяснить ситуацию более подробно:

1) Следовал инструкциям этого поста. Все сделал, новый тег вроде работает (думал я);

2) Вставлял {rating_nums} в шаблоны: shortstory.tpl, fullstory.tpl, relatednews.tpl (дублирует файл "shortstory.tpl", а также используется в качестве шаблона для тега "{custom}". Пример - "{custom ... template="relatednews" ... }");

3) Там, где шаблон используется по дефолту при помощи тега "{content}" (этот тег по-умолчанию использует шаблон "shortstory.tpl"), все работает на ура! Тег "{rating_nums}" работает, тем самым показывая число. На странице полной новости тоже все окей! ОДНАКО, возникает ситуация, в которой тэг "{custom}", выводя новости и опираясь на шаблон "relatednews.tpl" (НАПОМИНАЮ о том, что "{custom ... template="relatednews" ... }") показывает не ЧИСЛО, а ТЕКСТ, который содержит лишь название тега {rating_nums}.

Я надеюсь, ситуация Вам теперь ясна во всех красках!) Я развожу руками, будучи чайником в php..

А что думаете Вы по этому поводу, Артем? nerd
  • 0
Epictrium, А после того, как вы сделали правки из предыдущего моего комментария - что у вас произошло?
  • 0
Epictrium
11.10 в 01:56
Ровным счетом - ничего. Сделал все как Вы сказали:

1) Добавил две строчки;

2) Очистил кэш сайта.

И проблема как была, так и осталась =(
  • 0
Epictrium, Какая версия движка?
  • 0
Оставить комментарий:
Нажимая кнопку «Отправить» вы даете согласие на обработку своих персональных данных.
Ваше Имя
Ваш E-mail
Текст комментария