Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

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

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

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

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

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

Возможно.

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

А так - это чистая математика.

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

  • Автор

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

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

 

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

Темы тоже есть. Стоит хук Количество созданных тем

Вывожу информацию о них посредством {$author['topics_started']}

 

 

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

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

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

 

вычисляйте рейтингу по формуле 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

  • Автор

@newbie,

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

 

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

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

  • Автор

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

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

Кнопку добавляйте в шаблон member_list_show.

			<li <if test="$this->request['sort_key'] == 'grating'">class='active'</if>>
			<a href='{parse url="app=members&module=list&{$url}&sort_key=grating&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

Текст по умолчанию - по рейтингу

  • Автор

@newbie,

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

  • 1 год спустя...

Подскажите, пожалуйста, как адаптировать этот метод под версию 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

Функция 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>

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

@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

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

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

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

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

Я Вам про логи, Вы мне про ...

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

 

Найти

		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"; не нужно добавлять.

Извиняюсь, до меня потом дошло, что нужно было логи показать :)

 

С новой правкой тоже не работает, выдает такую же ошибку:..

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Date: Mon, 23 Jan 2017 10:55:59 +0300
Error: 1054 - Unknown column 'm.topics_started' in 'field list'
IP Address: 127.0.0.1 - /index.php?/members/
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
mySQL query error: SELECT m.member_id, (FLOOR(m.posts/10) + FLOOR(m.topics_started/10) + FLOOR(m.tutorials_articles/3) + FLOOR(pp.pp_reputation_points/10)) AS grating FROM members m WHERE m.members_l_display_name !='' AND m.members_l_display_name  IS NOT NULL  AND m.member_group_id NOT IN(5) AND m.member_banned=0 AND ( ! ( members_bitoptions & 1 ) != 0) ORDER BY members_l_display_name asc LIMIT 0,20
.--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
| File                                                                       | Function                                                                      | Line No.          |
|----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------|
| C:\OpenServer\domains\test-34.ru\admin\sources\base\ipsController.php      | [public_members_list_view].doExecute                                          | 306               |
'----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------'
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Date: Mon, 23 Jan 2017 10:56:45 +0300
Error: 1054 - Unknown column 'pp.pp_reputation_points' in 'field list'
IP Address: 127.0.0.1 - /index.php?/members/
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
mySQL query error: SELECT m.member_id, (FLOOR(m.posts/100) + FLOOR(pp.pp_reputation_points/10)) AS grating FROM members m WHERE m.members_l_display_name !='' AND m.members_l_display_name  IS NOT NULL  AND m.member_group_id NOT IN(5) AND m.member_banned=0 AND ( ! ( members_bitoptions & 1 ) != 0) ORDER BY members_l_display_name asc LIMIT 0,20
.--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
| File                                                                       | Function                                                                      | Line No.          |
|----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------|
| C:\OpenServer\domains\test-34.ru\admin\sources\base\ipsController.php      | [public_members_list_view].doExecute                                          | 306               |
'----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------'
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Date: Mon, 23 Jan 2017 10:57:17 +0300
Error: 1054 - Unknown column 'm.topics_started' in 'field list'
IP Address: 127.0.0.1 - /index.php?/members/
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
mySQL query error: SELECT m.member_id, (FLOOR(m.posts/10) + FLOOR(m.topics_started/10) + FLOOR(m.tutorials_articles/3) + FLOOR(pp.pp_reputation_points/10)) AS grating FROM members m WHERE m.members_l_display_name !='' AND m.members_l_display_name  IS NOT NULL  AND m.member_group_id NOT IN(5) AND m.member_banned=0 AND ( ! ( members_bitoptions & 1 ) != 0) ORDER BY members_l_display_name asc LIMIT 0,20
.--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
| File                                                                       | Function                                                                      | Line No.          |
|----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------|
| C:\OpenServer\domains\test-34.ru\admin\sources\base\ipsController.php      | [public_members_list_view].doExecute                                          | 306               |
'----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------'
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Date: Mon, 23 Jan 2017 10:58:39 +0300
Error: 1054 - Unknown column 'm.topics_started' in 'field list'
IP Address: 127.0.0.1 - /index.php?/members/
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
mySQL query error: SELECT m.member_id, (FLOOR(m.posts/10) + FLOOR(m.topics_started/10) + FLOOR(m.tutorials_articles/3) + FLOOR(pp.pp_reputation_points/10)) AS grating FROM members m WHERE m.members_l_display_name !='' AND m.members_l_display_name  IS NOT NULL  AND m.member_group_id NOT IN(5) AND m.member_banned=0 AND ( ! ( members_bitoptions & 1 ) != 0) ORDER BY members_l_display_name asc LIMIT 0,20
.--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
| File                                                                       | Function                                                                      | Line No.          |
|----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------|
| C:\OpenServer\domains\test-34.ru\admin\sources\base\ipsController.php      | [public_members_list_view].doExecute                                          | 306               |
'----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------'

Изменено пользователем Strategius

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.