Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Trotor

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

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

А как в настройках админки кол-во сообщений заменить на кол-во рейтинга?

А какая разница? Читайте "Минимальное количество сообщений для получения звания" как "Минимальный рейтинг, необходимый для получения звания".

Вы же в коде кол-во постов меняете на свое значение. И не более.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

 

Например:

 

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

Поделиться сообщением


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

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

Например:

 

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

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

  • Upvote 2

Поделиться сообщением


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

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

 

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

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

Поделиться сообщением


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

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

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

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

Поделиться сообщением


Ссылка на сообщение
10/10/17 11:45 (изменено)
Так это же переменная величина, которая зависит от постов и репутации.

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

 

Добавьте функцию, например, в класс 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>

  • Upvote 2

Поделиться сообщением


Ссылка на сообщение

@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}",

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

Поделиться сообщением


Ссылка на сообщение

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

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

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

×
×
  • Создать...