Перейти к публикации
View in the app

A better way to browse. Learn more.

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

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

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

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

Опубликовано:

Все работает, спасибо большое!

  • 8 месяцев спустя...
Опубликовано:

А возможно ли добавить этот рейтинг в форум как репутацию, чтобы он кэшировался в базе данных и по его переменной можно было создавать условия доступа к функциям форума?

 

Например:

 

<if test="$member['grating'] > 1">Отображение кнопки, если рейтинг больше единицы</if>

Опубликовано:
А возможно ли добавить этот рейтинг в форум как репутацию, чтобы он кэшировался в базе данных и по его переменной можно было создавать условия доступа к функциям форума?

Не всегда и не везде доступны данные.

Например:

 

Вообще можно так

Отображение кнопки, если рейтинг больше единицы

Опубликовано:
Не всегда и не везде доступны данные.

А нельзя сделать, чтобы рейтинг один раз рассчитался и хранился в таблице, и данные будут браться из нее?

 

<if test="(floor($member['posts']/100) + floor($member['pp_reputation_points']/10)) > 1">Отображение кнопки, если рейтинг больше единицы</if>

Так конечно можно, но это много где необходимо будет исправлять.

Опубликовано:
А нельзя сделать, чтобы рейтинг один раз рассчитался и хранился в таблице, и данные будут браться из нее?

Так это же переменная величина, которая зависит от постов и репутации.

Так конечно можно, но это много где необходимо будет исправлять.

Добавьте функцию, например, в класс IPSMember.

Опубликовано:
Так это же переменная величина, которая зависит от постов и репутации.

Понял. Да, это слишком сложно получается.

 

Добавьте функцию, например, в класс IPSMember.

А как это сделать, не подскажете?

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

Опубликовано:

А как это сделать, не подскажете?

 

Открываете admin/sources/base/ipsMember.php

И добавляете что-то типа

	public static function rating($member)
{
	if (isset($member['posts']) and isset($member['pp_reputation_points']))
	{
		return (floor($member['posts']/100) + floor($member['pp_reputation_points']/10));
	}

	return 0;
}

Далее в шаблоне используете

<if test="IPSMember::rating($member) > 1">Отображение кнопки, если рейтинг больше единицы</if>

Опубликовано:

@newbie, а Вы не подскажете, как добавить к Вашему методу из поста #15 дополнительные выборки в виде сортировки по репутации и статьям (компонент установлен).

 

Добавляю эти выборки в выпадающий список (что в расширенных фильтрах поиска), но почему-то работает только выборка по $grating.

 

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

меняю на:

 

$grating = "(FLOOR(m.posts/100) + FLOOR(pp.pp_reputation_points/10)) AS grating";
		$reputation = "(FLOOR(pp.pp_reputation_points)) AS reputation";
		$articles = "(FLOOR(m.tutorials_articles)) AS articles";
		$this->DB->build( array( 'select'    => "m.member_id, {$grating}, {$reputation}, {$articles}",

А эта строка:

 

if ( $_queryPP )

Заменена на:

 

if ( $_queryPP or 1==1 )

Но выборка в выпадающем списке работает только по $grating, по репутации и статьям выдает ошибку базы данных. Подозреваю, что из-за обращения к не существующим полям в таблице members, но по рейтингу-то работает...

 

Лог ошибки:

 

mySQL query error: SELECT m.member_id FROM members m  LEFT JOIN pfields_content p ON ( p.member_id=m.member_id ) 
LEFT JOIN profile_portal pp ON ( pp.pp_member_id=m.member_id )   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 articles desc LIMIT 0,20

Опубликовано:

Лог ошибки:

Тут только запрос. Где сама ошибка?

Опубликовано:
Тут только запрос. Где сама ошибка?

Вот, все что было в файле...

 

Date: Mon, 16 Oct 2017 09:02:38 +0000
Error: 1054 - Unknown column 'articles' in 'order clause'
IP Address: /index.php?app=members&module=list
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
mySQL query error: SELECT m.member_id FROM members m  LEFT JOIN pfields_content p ON ( p.member_id=m.member_id ) 
LEFT JOIN profile_portal pp ON ( pp.pp_member_id=m.member_id )   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 articles desc LIMIT 0,20
.--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------.
| File                                                                       | Function                                                                      | Line No.          |
|----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------|
| test.ru\admin\sources\base\ipsController.php    | [public_members_list_view].doExecute                                          | 306               |
'----------------------------------------------------------------------------+-------------------------------------------------------------------------------+-------------------'

Опубликовано:

Вот ошибка

Unknown column 'articles' in 'order clause'

Прикрепите измененный файл, чтобы посмотреть, что Вы там сделали

Опубликовано:

@newbie, а, понял. Значит, всё-таки в статьях ошибка закопалась?

Вот, это тот файл, с которым тестировал: view.php

Опубликовано:

			$this->DB->build( array( 'select'    => 'm.member_id' . (($this->sort_key == 'grating') ? ", (FLOOR(m.posts/100) + FLOOR(m.topics_started/10) + FLOOR(m.tutorials_articles/5) + FLOOR(pp.pp_reputation_points/20)) AS grating" : ''),
								 ............................................................
								 'order'	 => $this->sort_key . ' ' . $this->sort_order,

Обратите внимание на select.

Когда сортировка идет по grating, то select выглядит как

SELECT m.member_id, (FLOOR(m.posts/100) + FLOOR(m.topics_started/10) + FLOOR(m.tutorials_articles/5) + FLOOR(pp.pp_reputation_points/20)) AS grating

Во всех остальных случаях

SELECT m.member_id

А в order используется $this->sort_key, значение которого при вышеуказанной ошибке равно articles. Естественно данного поля нет.

Опубликовано:

@newbie, если честно, не понял... Строка

 

$this->DB->build( array( 'select'    => 'm.member_id' . (($this->sort_key == 'grating') ? ", (FLOOR(m.posts/100) + FLOOR(m.topics_started/10) + FLOOR(m.tutorials_articles/5) + FLOOR(pp.pp_reputation_points/20)) AS grating" : ''),

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

 

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

Исправил, как Вы написали, но все равно не работает.

Опубликовано:

У меня отвечает за кнопку выборки по рейтингу,

За кнопку отвечает html.

А здесь идет выборка пользователей.

Вообще у нас 2 похожих запроса

 

		if ( $notInMembers > 0 OR $this->sort_key != 'members_l_display_name' OR $this->request['request_method'] == 'post' )
	{
		$_max = $this->DB->buildAndFetch( array( 'select'	 => 'COUNT( * ) as cnt',
								 				 'from'		 => array( 'members' => 'm' ),
												 'where'	 => implode( " AND ", $query ),
												 'add_join'	 => $joins ) );

		$this->DB->build( array( 'select'	 =>' m.member_id',
								 'from'		 => array( 'members' => 'm' ),
								 'where'	 => implode( " AND ", $query ),
								 'order'	 => 'm.' . $this->sort_key . ' ' . $this->sort_order,
								 'limit'	 => array( $this->first, $this->max_results ),
								 'add_join'	 => $joins ) );
	}
	else
	{
		$_max = $this->DB->buildAndFetch( array( 'select'	 => 'COUNT( * ) as cnt',
								 				 'from'		 => 'members m',
												 'where'	 => implode( " AND ", $query ) ) );

		$this->DB->build( array( 'select'	 => 'm.member_id',
								 'from'		 => array( 'members' => 'm' ),
								 'where'	 => implode( " AND ", $query ),
								 'order'	 => 'm.' . $this->sort_key . ' ' . $this->sort_order,
								 'limit'	 => array( $this->first, $this->max_results ) ) );
	}

 

и править нужно оба.

А точнее только первый, т.к. в else мы никогда не попадем.

А у Вас в первом чуть-чуть изменено, и во втором чуть-чуть.

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

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.