Общий цифровой рейтинг - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

Правила раздела

Здесь обсуждаются вопросы по настройке и администрированию форумов IPB 3.x.
Пожалуйста, не оффтопьте, если зашли сюда случайно, и обратите внимание на соседние разделы.
Установка, настройка и обслуживание форумов IPB 2.x.
Оформление форумов, включая верстку скинов.
Размещение рекламы на форумах.
SEO оптимизация форума.
Техническая поддержка наших скинов и модов.

СвернутьПрикрепленные теги

Теги не найдены

  • 3 Страниц +
  • 1
  • 2
  • 3

Общий цифровой рейтинг

#1 Пользователь не на сайте   Haktar ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 781
  • Регистрация: 14-Июнь 09
  • Репутация: 19
  • IPB version:3.1.x
 

Отправлено 19 Ноябрь 2015 - 14:10

Хотелось бы создать так сказать общий цифровой рейтинг пользователя на основании количества сообщений, тем, репутации, очков рейтинга в профиле, и других цифровых показателей пользователя. Скажем 100 сообщений это 1 балл рейтинга, 10 тем - тоже 1 балл, и так далее, и что бы общий показатель выводить в тему.
Возможно ли такое реализовать?
1

#2 Пользователь на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 283
  • Регистрация: 26-Октябрь 11
  • Репутация: 886
  • IPB version:I have no IPB
 

Отправлено 20 Ноябрь 2015 - 08:16

Просмотреть сообщениеHaktar сказал(а):

Возможно ли такое реализовать?

Возможно.
Но не все перечисленные данные есть по умолчанию. Например, нет деления на посты и темы. В этом случае можно посмотреть в сторону хука "Number Of Topics Started".
А так - это чистая математика.
0

#3 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 9 033
  • Регистрация: 20-Март 09
  • Репутация: 2 403
  • IPB version:3.1.x
 

Отправлено 20 Ноябрь 2015 - 19:55

А в чем проблема? Все данные есть (за исключения тем), вычисляйте рейтингу по формуле floor( общее количество / за какое количество ) + n.
0

#4 Пользователь не на сайте   Haktar ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 781
  • Регистрация: 14-Июнь 09
  • Репутация: 19
  • IPB version:3.1.x
 

Отправлено 21 Ноябрь 2015 - 03:40

Просмотреть сообщениеsiv1987 сказал(а):

А в чем проблема? Все данные есть (за исключения тем), вычисляйте рейтингу по формуле floor( общее количество / за какое количество ) + n.

А не напишите как это реализовать подробно?

Просмотреть сообщениеsiv1987 сказал(а):

(за исключения тем)

Темы тоже есть. Стоит хук Количество созданных тем
Вывожу информацию о них посредством {$author['topics_started']}


Просмотреть сообщениеnewbie сказал(а):

В этом случае можно посмотреть в сторону хука "Number Of Topics Started".

Да, давно стоит.
0

#5 Пользователь на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 283
  • Регистрация: 26-Октябрь 11
  • Репутация: 886
  • IPB version:I have no IPB
 

Отправлено 21 Ноябрь 2015 - 15:53

Просмотреть сообщениеHaktar сказал(а):

А не напишите как это реализовать подробно?
Что Вам не понятно? :)

Просмотреть сообщениеsiv1987 сказал(а):

вычисляйте рейтингу по формуле floor( общее количество / за какое количество ) + n

"общее количество" - $author['topics_started'], $author['posts'] и т.д.
"за какое количество" - 100 сообщений, 10 тем и т.д.
"n" - та же самая формула floor( общее количество / за какое количество ).
Если давать не по 1 баллу, то формула будет выглядеть floor( общее количество / за какое количество ) * X. X - количество баллов.

Пример для тем и сообщений.
{parse expression="floor( $author['topics_started'] / 10 ) + floor( $author['posts'] / 100 )"}


Не знаю, после установки вышеуказанного хука $author['posts'] - чисто сообщения или как и по дефолту вместе с темами.
Если последнее, то $author['posts'] / 100 замените на ($author['posts'] - $author['topics_started']) / 100
2

#6 Пользователь не на сайте   Haktar ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 781
  • Регистрация: 14-Июнь 09
  • Репутация: 19
  • IPB version:3.1.x
 

Отправлено 21 Ноябрь 2015 - 17:40

newbie,
Ух ты - отлично, работает на ура! Большое спасибо.

Просмотреть сообщениеnewbie сказал(а):

Не знаю, после установки вышеуказанного хука $author['posts'] - чисто сообщения или как и по дефолту вместе с темами.

Нет, работает отдельно, не зависит от сообщений.
0

#7 Пользователь не на сайте   Haktar ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 781
  • Регистрация: 14-Июнь 09
  • Репутация: 19
  • IPB version:3.1.x
 

Отправлено 21 Ноябрь 2015 - 19:40

И ещё. Как добавить выборку по рейтингу в Список пользователей - http://ipbskins.ru/f...php?app=members (колонку с количеством рейтинга я уже туда добавил)? То есть кнопку вроде Имя пользователя, Количество сообщений, Дата регистрации.
0

#8 Пользователь на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 283
  • Регистрация: 26-Октябрь 11
  • Репутация: 886
  • IPB version:I have no IPB
 

Отправлено 22 Ноябрь 2015 - 09:46

Просмотреть сообщениеHaktar сказал(а):

То есть кнопку вроде Имя пользователя, Количество сообщений, Дата регистрации.

Кнопку добавляйте в шаблон member_list_show.
			<li <if test="$this->request['sort_key'] == 'grating'">class='active'</if>>
				<a href='{parse url="app=members&amp;module=list&amp;{$url}&amp;sort_key=grating&amp;sort_order=desc" template="members_list" base="public" seotitle="false"}' title='Сортировка по рейтингу'>По рейтингу</a>
			</li>


Также нужно будет отредактировать файл admin/applications/members/modules_public/list/view.php
1. Ниже
										'members_profile_views'		=> 'm_dd_views',

Добавляете
										'grating'					=> 'sort_by_grating',

2. Выше
			$this->DB->build( array( 'select'	 =>' m.member_id',

Добавляете
			$grating = "(FLOOR(m.posts/100) + FLOOR(pp.pp_reputation_points/10)) AS grating";
Тут сами определите, что Вам надо.
3.
			$this->DB->build( array( 'select'	 =>' m.member_id',
заменяете на
			$this->DB->build( array( 'select'	 => "m.member_id, {$grating}",

4. Ниже находите
									 'order'	 => 'm.' . $this->sort_key . ' ' . $this->sort_order,
и заменяете на
									 'order'	 => $this->sort_key . ' ' . $this->sort_order,

5. Добавляете языковую фразу для выпадающего меню.
Приложение - Пользователи
Набор слов - public_list
Ключ - sort_by_grating
Текст по умолчанию - по рейтингу
3

#9 Пользователь не на сайте   Haktar ответил: »

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 781
  • Регистрация: 14-Июнь 09
  • Репутация: 19
  • IPB version:3.1.x
 

Отправлено 22 Ноябрь 2015 - 16:07

newbie,
Большое спасибо. Всё получилось!
0

#10 Пользователь не на сайте   Strategius ответил: »

 
 
  • Advanced
  • ***
  • Смотреть блог
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 678
  • Регистрация: 27-Март 16
  • Репутация: 42
  • IPB version:3.4.x
 

Отправлено 22 Январь 2017 - 16:49

Подскажите, пожалуйста, как адаптировать этот метод под версию 3.4.9? Делаю все по инструкции из поста #8, при переходе в список пользователей выбивает ошибку базы данных :(

И еще, с таким кодом вывода рейтинга в шаблоны рушится верстка почему то (и на тестовой версии 3.1.4 тоже):

Цитата

{parse expression="floor( $author['topics_started'] / 10 ) + floor( $author['posts'] / 100 )"}

Работает только с таким кодом:

{parse expression="floor( $author['posts'] / 100 )"}

Т.е. не работает с несколькими floor + почему-то...

Сообщение изменено: Strategius (22 Январь 2017 - 16:49)

0

#11 Пользователь не на сайте   Dmitriy427 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Specialist
  • Сообщений: 606
  • Регистрация: 15-Октябрь 11
  • Репутация: 172
  • Откуда:Россия, Тула
  • IPB version:3.3.x
 

Отправлено 23 Январь 2017 - 01:08

Функция floor() просто округляет результат деления и, естественно, не имеет отношения к вашим проблемам. В шаблонaх "userInfoPane" и "post" можете для вычисления интегрального рейтинга взять, помимо $author['posts'] ( для шаблона "post" это переменная $post['author']['posts'] ), значения переменных $author['pp_rating_value'] - средний рейтинг профиля, $author['pp_rating_hits'] - количество оценок профиля и $author['pp_reputation_points'] - репутация.

Переменную $author['topics_started'] с количеством открытых автором топиков можно вернуть правкой в файле /admin/applications/forums/modules_public/forums/topics.php, по-идее, но это увеличит число запросов к базе, в зависимости от количества ответов на странице.
После:
			$row['member_id']     = $row['mid'];

Добавить:
			$count = $this->DB->buildAndFetch( array( 'select' => 'count(*) as tstarted', 'from' => 'topics', 'where' => 'starter_id='.$row['member_id'] ) );
			$row['topics_started'] = $count['tstarted'];


P.S. Если Вы сделали эту правку, то код с использованием переменной $author['topics_started'] помещайте в условие вида:
<if test="$this->request['app'] == 'forums'">{parse expression="floor( $author['topics_started'] / 10 ) + floor( $author['posts'] / 100 )"}</if>

Иначе будут ошибки на страницах личных сообщений и других страницах, где используется этот шаблон.
1

#12 Пользователь не на сайте   Strategius ответил: »

 
 
  • Advanced
  • ***
  • Смотреть блог
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 678
  • Регистрация: 27-Март 16
  • Репутация: 42
  • IPB version:3.4.x
 

Отправлено 23 Январь 2017 - 01:30

Dmitriy427, проблему с floor() удалось решить, за переменные большое спасибо!

Осталась проблема с несовместимостью правки файла admin/applications/members/modules_public/list/view.php из поста #8 (правка для версии 3.1.4, а для 3.4 не подходит), при открытии списка пользователей выбивает ошибку базы данных...

Методом тыка определил, что проблема в строке

$this->DB->build( array( 'select'    => "m.member_id, {$grating}",

Не хочет работать из-за {$grating}...

Сообщение изменено: Strategius (23 Январь 2017 - 01:36)

0

#13 Пользователь на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 283
  • Регистрация: 26-Октябрь 11
  • Репутация: 886
  • IPB version:I have no IPB
 

Отправлено 23 Январь 2017 - 09:48

Просмотреть сообщениеStrategius сказал(а):

при открытии списка пользователей выбивает ошибку базы данных...

которые логируются.
0

#14 Пользователь не на сайте   Strategius ответил: »

 
 
  • Advanced
  • ***
  • Смотреть блог
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 678
  • Регистрация: 27-Март 16
  • Репутация: 42
  • IPB version:3.4.x
 

Отправлено 23 Январь 2017 - 09:59

Цитата

которые логируются

А возможно ли как-нибудь сделать сортировку по рейтингу в 3.4? Очень нужна эта кнопка, хотел по умолчанию ее сделать вместо сортировки по имени :(
0

#15 Пользователь на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 283
  • Регистрация: 26-Октябрь 11
  • Репутация: 886
  • IPB version:I have no IPB
 

Отправлено 23 Январь 2017 - 10:21

Я Вам про логи, Вы мне про ...
Не хотите смотреть логи, сами посмотрим.

Найти
		if ( $_queryPP )
Заменить на
		if ( $_queryPP or 1==1 )


Или заменить на
		if ( $_queryPP or $this->sort_key == 'grating')

а
$this->DB->build( array( 'select'	 => ' m.member_id',

заменить на
$this->DB->build( array( 'select'	 => 'm.member_id' . (($this->sort_key == 'grating') ? ", (FLOOR(m.posts/100) + FLOOR(pp.pp_reputation_points/10)) AS grating" : ''),

Тогда $grating = "(FLOOR(m.posts/100) + FLOOR(pp.pp_reputation_points/10)) AS grating"; не нужно добавлять.
2

Сообщить об этой теме:


  • 3 Страниц +
  • 1
  • 2
  • 3


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2017 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна