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

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


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

Здрасте. Уважаемые прогеры, помогите сделать мод для рейтинга! версия форума 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)

 

Спасибо

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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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

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

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