Перейти к контенту

Модификация рейтинга тем с кол-вом.


Рекомендуемые сообщения

Здрасте. Уважаемые прогеры, помогите сделать мод для рейтинга! версия форума 2.1.5 Там есть уже рейтинг, но этот рейтинг показывает только звездочки, а мне нужно чтобы ешё показывал количество юзеров, которые ставили оценки. И нужно чтобы это отображалось и в самой теме и в списке тем. На данный момент у меня только звездочки! вот тут есть пример как мне надо:

тут в списке тем http://ufamob.net.ru/forum/index.php?showforum=22

тут в самой теме http://ufamob.net.ru/forum/index.php?showtopic=1768

Хозяин форума не хочет дать мне ни мод ни подсказку как это сделать! Вся надежда на вас! Помогите плиз. Заранее спасибо!

ps: поиском перебороздил всё что можно! Глазами просмотрел больше 500 тем...похожего ничего нет! Если кто что знает, буду благодарен за любую информацию!

Ссылка на комментарий
Поделиться на других сайтах

Шаблоны форума -> skin_forum -> render_forum_row

 

Находим там:

<div style='float:right'>{$data['_rate_img']}</div>

Заменяем на:

<div style='float:right'>{$data['_rate_img']}{$data['topic_rating_hits']}</div>

 

Это выведет у нас в showforum, рядом со звездочками количество проголосовавших.

 

{$data['topic_rating_hits']} — показывает количество проголосовавших за эту тему. Имейте ввиду, если значение будет равно 0, то он все равно будет показываться. Даже если рейтинг в этом форуме выключен, то 0 будет показываться. Я думаю, что необходимые условия (forum_allow_rating) вы дальше сможете написать уже сами, дабы избавиться от нуля. :D

Для тем — тоже самое, только функция в шаблоне другая.

 

Смотрите таблицы в БД:

  • ibf_topics (topic_rating_total, topic_rating_hits),
  • ibf_topic_ratings,
  • ibf_forums (forum_allow_rating — значения можно использовать в условии).

Ссылка на комментарий
Поделиться на других сайтах

итак, вот рабочий скрипт рейтинга в первоначальном варианте (если сможете, можно упростить):

1.Находим файл cache/skin_cache/cacheid_2/skin_forum.php

2. Открываем его любым текстовым редактором.

3. Находим следующее место:

//===========================================================================
// <ips:render_forum_row:desc:>
//===========================================================================
function render_forum_row($data="",$class1='row2',$class2='row1',$classposts='row2',$inforum=0) {
$IPBHTML = "";
//--starthtml--//

$IPBHTML .= <<<EOF <!-- Begin Topic Entry {$data['tid']} -->
<tr> 
<td align="center" class="$class2" id='tid-folder-{$data['tid']}' onclick='return topic_toggle_folder("{$data['tid']}");'>{$data['folder_img']}</td>
<td align="center" class="$class2">{$data['topic_icon']}</td>
<td class="$class2" valign="middle">
    <div style='float:right'>{$data['_rate_img']}</div>

и заменяем его на этот:

//===========================================================================
// <ips:render_forum_row:desc:>
//===========================================================================
function render_forum_row($data="",$class1='row2',$class2='row1',$classposts='row2',$inforum=0) {
$IPBHTML = "";
//--starthtml--//
if ( $data['topic_rating_hits'] > 0 ) { //запрещает выводить там где рейтинг не предусмотрен
$kol = $data['topic_rating_hits']; //количество голосов
$skob = "("; 
$skob2 = ")"; //скобки к голосам
$sred = $data['topic_rating_total'] / $kol; //средний балл рейтинга
$sred = substr ($sred,0,4); //округляет балл до десятых (4.6) если вдруг число не делится ровно.
}
$IPBHTML .= <<<EOF <!-- Begin Topic Entry {$data['tid']} -->
<tr> 
<td align="center" class="$class2" id='tid-folder-{$data['tid']}' onclick='return topic_toggle_folder("{$data['tid']}");'>{$data['folder_img']}</td>
<td align="center" class="$class2">{$data['topic_icon']}</td>
<td class="$class2" valign="middle">
    <div style='float:right'>{$data['_rate_img']}<br/>  {$sred}  {$skob}{$kol}{$skob2}</div>

Чуть позже допишу и для самого поста (там где ставим оценку). Ещё раз огромное спасибо Jax за то что поставил на путь истиный :D

Изменено пользователем МАРАДЁР
Ссылка на комментарий
Поделиться на других сайтах

Зачем столько

&nbsр;

?

<center> не проще сделать? :D

 

Да и эта вещь

 

$skob = "(";

$skob2 = ")";

 

лишняя, можно было бы все в одну переменную запихнуть ;)

 

Вообще, метод конечно деревянный, но если работает - гуд.

Ссылка на комментарий
Поделиться на других сайтах

вообще много плохого

например

$sred = substr ($sred,0,4); //округляет балл до десятых (4.6) если вдруг число не делится ровно.

есть чушь

потому что в пхп есть php.net/round

$skob = "(";

$skob2 = ")";

зачем?

 

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

 

открываем

./sources/action_public/forums.php

ищем

	function render_entry($topic)
{
	$topic = $this->parse_data( $topic );

добавляем после

$topic['topic_rating'] = @round($topic['topic_rating_total']/$topic['topic_rating_hits'],2);

идем в админку - внешний вид - изменить html фрагменты - render_forum_row

ищем

<div style='float:right'>{$data['_rate_img']}

добавляем после

<if="data['topic_rating_hits']>0"><br/><center>{$data['topic_rating']} ({$data['topic_rating_hits']})</center></if>

Ссылка на комментарий
Поделиться на других сайтах

Ну вот, видите, столько вариантов сразу появилось :D я просто в файле forums.php не понял ни че, не захотело у меня количество появляться ;)

Arhar, спасибо :) попробую и этот способ,если получится, то оставлю так, раз шаблоны нельзя коверкать.

 

А где можно посмотреть синтаксис вот такого на писания в шаблонах:\

<if="data['topic_rating_hits']>0"><br/><center>{$data['topic_rating']} ({$data['topic_rating_hits']})</center></if>

На будущее было бы не плохо знать...

Ссылка на комментарий
Поделиться на других сайтах

IPB HTML Logic ? Лучше нету.
Ссылка на комментарий
Поделиться на других сайтах

А теперь переходим к показу среднего балла и кол-ва голосов в окне рейтинга в самой теме (то что около "Опции форума").

Как я понял, нужно начинать с файла topic.php...думаю что нужно изменять тут:

if ( $this->topic['topic_rating_total'] )
		{
			$this->topic['_rate_int'] = round( $this->topic['topic_rating_total'] / $this->topic['topic_rating_hits'] );
		}

И соответственно изменить шаблон skin_topic -> topic_rating_image.

Логически должно быть так

 <img src='{ipb.vars['img_url']}/rating_{$rating_id}.gif' border='0' alt='{$rating_id}' /><br/>{$data['topic_rating']} ({$data['topic_rating_hits']})

Но вот что то не получается..наверника что то в файле topic.php нужно добавить...а вот что, не знаю :D Возможно там не используется атрибут $data, вроде должно быть $post , но тоже не получается!

Помогите с переменными плиз!

Ссылка на комментарий
Поделиться на других сайтах

дело в том, что в topic_rating_image передается только одна переменная - _rate_int

так что придется добавить необходимые в редактировании этого шаблона - справа вверху выпадающее меню - редактирование входящих переменных

и добавить в строчке в топикс.пхп

$this->topic['_rate_img']  = $this->ipsclass->compiled_templates['skin_topic']->topic_rating_image($this->topic['_rate_int']);

 

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

Ссылка на комментарий
Поделиться на других сайтах

Я понял только что нужно добавить что то типа:

$this->topic['_rate_img']  = $this->ipsclass->compiled_templates['skin_topic']->topic_rating_image($this->topic['_rate_int'])->topic['topic_rating_hits']->topic['topic_rating_total'];

С этим то ещё можно разобраться, а вот на счёт входящих переменных это беда...поэтому дальше у меня ни каких мыслей! Придётся остановиться на достигнутом и довольствоваться тем что хоть в списке тем это показывается, пока какой нибудь добрый человек не подскажет как делать дальше...:D

Ссылка на комментарий
Поделиться на других сайтах

  • 6 месяцев спустя...

Кстати, эта же модификация отлично подходит и для форумов версии 2.3.1 и выше. Так как там уже есть рейтинг по голосам и показывается в самой теме, голосовали вы или нет, а так же количество голосов, то остаётся дополнить и вынести рейтинг в список тем!

Окончательная модификация:

 

открываем

./sources/action_public/forums.php

ищем

	function render_entry($topic)
{
	$topic = $this->parse_data( $topic );

добавляем после

$topic['topic_rating'] = @round($topic['topic_rating_total']/$topic['topic_rating_hits'],2);

идем в админку - внешний вид - изменить html шаблоны - skin_forum - render_forum_row

ищем

<div style='float:right'>{$data['_rate_img']}

добавляем после

<if="$data['topic_rating_hits']>0"><br/><center>{$data['topic_rating']} ({$data['topic_rating_hits']})</center></if>

Внешний вид изменяем для каждого скина.

Если нет ни одного голоса, то рейтинг не показывается.

Огромный респект за поправки Arhar и Jax за то что указал путь истиный :D Тема исчерпана окончательно!

Ссылка на комментарий
Поделиться на других сайтах

Фи.

$topic['topic_rating'] = $topic['topic_rating_hits'] ? round($topic['topic_rating_total']/$topic['topic_rating_hits'],2) : 0;

Ссылка на комментарий
Поделиться на других сайтах

  • 2 месяца спустя...

Посмотрел http://ufamob.net.ru/forum/index.php?showforum=22

 

Да, это почти тоже что и я ищу. Может кто-то помочь:

- заменить звёздочки в рейтинге на текст

- в результатах показать кол-во голосов за каждый вариант (будет 2-3, а не 5)

 

Спасибо

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.