Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Top X Posters

Идеи для расширения функциональности phpBB 2.0.x
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 4 месяца
Поблагодарили: 13 раз
Контактная информация:

Top X Posters

Сообщение VVVas »

Есть вот такой мод

Код: Выделить всё

########################################################################################################
## MOD Title: Top X Posters 
## MOD Author: AbelaJohnB < abela@johnabela.com > (John B. Abela) http://www.johnabela.com/mods/
## MOD Description: Allows you to post the "Top 'x'" members of your forum on your forum.
И у меня такой небольшой запросец. А можно выводить не по количеству постов, а по количеству постов в день? И как это делается?
я люблю daft punk | новый sugoi.ru
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 4 месяца
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas »

Сделал, но вроде бы есть бага, не могу понять где глючит.
В оригинале было

Код: Выделить всё

		$sql = "SELECT u.user_id, u.username, u.user_posts, u.user_level, count(u.user_id) as user_posts
		FROM " . USERS_TABLE . " u, " . POSTS_TABLE . " p 
		WHERE (u.user_id <> " . ANONYMOUS . ") AND (u.user_id = p.poster_id) 
		GROUP BY user_id, username
		ORDER BY user_posts DESC
		LIMIT $str_input";
Я сделал вот так

Код: Выделить всё

		$sql = "SELECT u.user_id, u.username, u.user_posts, u.user_level, u.user_regdate, count(u.user_id) as user_posts
		FROM " . USERS_TABLE . " u, " . POSTS_TABLE . " p 
		WHERE (u.user_id <> " . ANONYMOUS . ") AND (u.user_id = p.poster_id) 
		GROUP BY user_id, username
		ORDER BY ( user_posts / ( ( " . time() . " - user_regdate ) / 86400 )) DESC
		LIMIT $str_input";
Но есть маленька проблемка - сортирует не так, обратите внимание на пользователей Ari и Vladson, их нужно поменять местами по логике, а они не поменяны. Не подскажете где я ошибся?

Добавлено спустя 36 минут 37 секунд:

Такое ощущение, что он просто плюет на значение после запятой и всё, вот надо выдернуть это назад. Как это можно замутить?
я люблю daft punk | новый sugoi.ru
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 2 месяца
Откуда: Novosibirsk,RU
Контактная информация:

Сообщение [R: R@m$e$ :U] »

VVVas
имхо, потому что user_posts занято в таблице USERS_TABLE =) попробуй другое название =)
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 4 месяца
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas »

[R: R@m$e$ :U] писал(а):имхо, потому что user_posts занято в таблице USERS_TABLE =) попробуй другое название =)
А можно как-нить в виде примерного кода, а то не понял как мне это использовать.

И почему только с двумя пользователями?
я люблю daft punk | новый sugoi.ru
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 4 месяца
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas »

Во, вроде понял причину. ИМХО, причина заключается в том что на форуме стоит часовой пояс +3, ну и какой-либо часовой пояс у пользователей. Так вот поскольку мы используем просто time то это все считается по GMT0 и соответственно возле конца суток, форум это уже обсчитывает как завтра, а для в профиле обсчитывается как сегодня, из-за этого и разница и неверная сортировка (хотя реально она верно идет просто для другого времени).

Теперь вопрос: как вплести коректировку по времени всего форума (если смотри гость) и по времени из профиля просматривающего пользователя (если смотри пользователь). Насколько понял так сделано при просмотре профиля, но вот в этот мод мне это перенести не удалось. Кто-нить подскажет как это сделать?
я люблю daft punk | новый sugoi.ru
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 2 месяца
Откуда: Novosibirsk,RU
Контактная информация:

Сообщение [R: R@m$e$ :U] »

VVVas
я имел в виду это...
$sql = "SELECT u.user_id, u.username, u.user_posts, u.user_level, u.user_regdate, count(u.user_id) as user_posts
=)) попробуй так...
$sql = "SELECT u.user_id, u.username, u.user_posts, u.user_level, u.user_regdate, count(u.user_id) as posts
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 4 месяца
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas »

[R: R@m$e$ :U]
Попробую, но проблема ИМХО всё же со временем. К тому же сейчас это никак мне не проверить: помогло или нет.

Добавлено спустя 55 минут 58 секунд:

Вот в birthday hack есть поправка на часовой пояс (см. index.php), а здесь её нет и из-за этого в определенных ситуациях получается такой глючок. Как прикрутить проверку на часовой пояс к этому коду или объясните мне почему я лезу не в ту степь?

Добавлено спустя 1 час 10 минут 10 секунд:

Продолжаю извращения. Поскольку счетчик постов у меня кое-где отключен, то мне нужно выводить количество сообщений как в профиле, а не те которые ещё и не посчитались, посему теперь код выглядит так:

Код: Выделить всё

      $sql = "SELECT u.user_id, u.username, u.user_posts, u.user_level, u.user_regdate, count(u.user_id)
      FROM " . USERS_TABLE . " u, " . POSTS_TABLE . " p 
      WHERE (u.user_id <> " . ANONYMOUS . ") AND (u.user_id = p.poster_id) 
      GROUP BY user_id, username 
      ORDER BY ( user_posts / ( ( " . time() . " - user_regdate ) / 86400 )) DESC 
      LIMIT $str_input";
Насколько это криво и как надо было сделать?

Добавлено спустя 38 секунд:

удалил as user_posts
я люблю daft punk | новый sugoi.ru
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 4 месяца
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas »

Ещё всплывает такой нюанс: в первый день у пользователя значение постов в день улетает в бесконечность (потому что дней у него 0, а 0 на самом деле нет, и по этому делим на бесконечно малое и получаем в итоге бесконечно большое) - надо с этим бороться. Опять же как-то править обработку даты. Никто не подскажет?
я люблю daft punk | новый sugoi.ru
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 4 месяца
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas »

И по поводу предыдущей проблемы, связана она не столько с часовыми поясами, она связана со временем регистрации. И решиться она как мне кажеться тем же путем что и проблема деления на 0, описанная мною выше.
я люблю daft punk | новый sugoi.ru
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 4 месяца
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas »

И так решение, просто нужно применить к

Код: Выделить всё

( ( " . time() . " - user_regdate ) / 86400 )
сначала round, а потом max (1, значение полученное от предыдущей операции). Но к сожалению, в строку ORDER BY это засунуть не получается. Никто не подскажет как это сделать?
я люблю daft punk | новый sugoi.ru
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 2 месяца
Откуда: Novosibirsk,RU
Контактная информация:

Сообщение [R: R@m$e$ :U] »

VVVas
удалил as user_posts
а тогда чем у тебя будет определятся твой count(u.user_id)? следовательно так не пойдет... надо как-то определить... или не считать вообще...

кста... на тему часовых поясов... а если попробовать что-нить вроде...

Код: Выделить всё

if ($userdata['user_id'] != ANONYMOUS )
{
	$tz = $userdata['user_timezone'];
}
else
{
	$tz = $board_config['board_timezone'];
}

      $sql = "SELECT u.user_id, u.username, u.user_posts, u.user_level, u.user_regdate, count(u.user_id) as users
      FROM " . USERS_TABLE . " u, " . POSTS_TABLE . " p 
      WHERE (u.user_id <> " . ANONYMOUS . ") AND (u.user_id = p.poster_id) 
      GROUP BY user_id, username 
      ORDER BY ( user_posts / ( ( " . time() + (3600 * $tz) . " - user_regdate ) / 86400 )) DESC 
      LIMIT $str_input";
или около того....
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 4 месяца
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas »

[R: R@m$e$ :U]
А с бесконечностью что предложишь делать?

И в любом случае поправку на временную зону надо вводить после высчета времени пребывания на форуме, иначе может получиться отрицательное значение. ИМХО, теоретически должно быть так или я ошибаюсь в логике?

Код: Выделить всё

ORDER BY ( user_posts / ((( " . time() . " - user_regdate ) + (3600 * $tz)) / 86400 )) DESC
я люблю daft punk | новый sugoi.ru
Аватара пользователя
[R: R@m$e$ :U]
phpBB Maniac
Сообщения: 1464
Стаж: 19 лет 2 месяца
Откуда: Novosibirsk,RU
Контактная информация:

Сообщение [R: R@m$e$ :U] »

VVVas
по-мойму, это тоже самое, только порядок другой =))) и я не могу понять почему отрицательное? если posts = 0 ?
Руководство пользователя | FAQ | Правила | Как устанавливать MOD'ы
ВОСПОЛЬЗУЙСЯ ПОИСКОМ, ТАМ ЕСТЬ БОЛЬШИНСТВО ОТВЕТОВ
ЕСЛИ НЕ ПОМОГЛО, ИСПОЛЬЗУЙ ШАБЛОН ЗАПРОСА, ПОМОГИ В РЕШЕНИИ ЗАДАЧИ
БЕСПЛАТНО ПОМОГУ ТОЛЬКО НА ФОРУМЕ!!! (ЛС НЕ В СЧЕТ)

Оставь благодарность, подтверди работоспособность совета.

ВСЕ ПРАВА НА МОДЫ ОТДАНЫ m157y
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 4 месяца
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas »

Вообщем я почти достиг того чего хотел и в некоторой степени достиг даже большего. Но оно не использует тот же принцип расчета PPD (post per day, количества сообщений в день), который использует phpBB при выводе PPD при просмотре профиля. Теперь собственно решение, и потом снова пояснения.
Для начала на сайте R45 (http://www.rasadam.com/) было найдено его решение, которое как я понял одобрил AbelaJohnB, по поводу того как считать посты не по факту поста, по счетчику (нужно если у вас отключен счетчи в каких либо форумах, дефолтом top 'x' poster считает посты по фактическому наличию их). Предлагалось заменить запрос на такой вариант.

Код: Выделить всё

      $sql = "SELECT user_id, username, user_posts, user_level 
      FROM " . USERS_TABLE . " 
      WHERE <* смотри ниже пояснение *> 
      ORDER BY user_posts DESC 
      LIMIT $str_input";
* - от места этого запроса в коде, там идет выбор кого отображать: всех с модерами/без/с админом/без оного.

Дальше собственно моя модификация. Я пишу её относительно оригинального кода, я использую вариацию R45.

Код: Выделить всё

############################################################## 
## MOD Title:		Top 'X' Poster ADD-ON sort by PPD
## MOD Author:		VVVas < v[at]vvvas.ru > (Vasiliy V Mishustin) http://www.vvvas.ru
## MOD Description:	This ADD-ON for "Top 'X' Poster" by AbelaJohnB < abela@johnabela.com > 
##			(John B. Abela) http://www.johnabela.com/mods/ 
##               	This ADD-ON changes original sorting users for sorting by Post Per Day (PPD).
##			And add's after registration the minimum quantity of days function before
##                      the user will be start considered at display in Top "X" poster section.
##
## MOD Version:		0.0.3
## Compatibility:	2.0.16
##
## Installation Level:	easy 
## Installation Time:	10 Minutes
## Files To Edit:	2
##			index.php
##			includes/functions.php
##
## Included files:	n/a
############################################################## 
## For Security Purposes, Please Check: http://www.phpbbguru.net/mods/ for the 
## latest version of this MOD. Downloading this MOD from other sites could cause malicious code 
## to enter into your phpBB Forum. 
############################################################## 
## Installation Notes:
## This mod REQUIRE the "Top 'X' Poster" by AbelaJohnB < abela@johnabela.com > (John B. Abela)
## http://www.johnabela.com/mods/, this is only a ADD-ON for this mod
##
## Author Notes: 
## This Add-on using changes offered by R45 <n/a> (n/a) http://www.rasadam.com/.
##
## Negative value corresponds 0. I' m not recommend to use value less than 10.
## Value 0 categorically is not recommended because of that that
## just the registered user in current of the first day will be at top of a rating even with one post.
## 
## Thanks:
## sunchess  <n/a> (n/a) http://lab.com.ru
##  
############################################################## 
## MOD History: 
## 
##   2005-07-17 - Version 0.0.3 
##      - Initial release 
## 
############################################################## 
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD 
##############################################################

# 
#-----[ OPEN ]------------------------------------------ 
# 
index.php 
# 
#-----[ FIND ]------------------------------------------ 
# 
// START MOD: TOP 'X' USERS (AbelaJohnB) 
// PLEASE SEE THE INSTALL FILE FOR FURTHER INFORMATION ON WHAT TO DISPLAY AND HOW MANY TO DISPLAY. 
	'TOP_POSTERS' => top_posters('10', 0, 0), // Replace This Line If You Want Alternative Settings Displayed 
# 
#-----[ REPLACE WITH ]------------------------------------------ 
# 
// START MOD: TOP 'X' USERS (AbelaJohnB) 
// PLEASE SEE THE INSTALL FILE FOR FURTHER INFORMATION ON WHAT TO DISPLAY AND HOW MANY TO DISPLAY. 
	'TOP_POSTERS' => top_posters('10', 0, 0, '10'), // Replace This Line If You Want Alternative Settings Displayed 
# 
#-----[ OPEN ]------------------------------------------ 
# 
includes/functions.php 
# 
#-----[ FIND ]------------------------------------------ 
# 
//		top_posters('10', x, x) will return Top Ten Members 
# 
#-----[ REPLACE WITH ]------------------------------------------ 
# 
//		top_posters('10', x, x, 'x') will return Top Ten Members 
# 
#-----[ FIND ]------------------------------------------ 
# 
//		top_posters('5', x, x) will return Top Five Members 
# 
#-----[ REPLACE WITH ]------------------------------------------ 
# 
//		top_posters('5', x, x, 'x') will return Top Five Members 
# 
#-----[ AFTER ADD ]------------------------------------------ 
# 
// 
//	The minimum quantity of days after registration before the user will start to be 
//	considered at display in Top 'X' Poster section. 
//      Negative value corresponds 0. I do not recommend to use value less than 10 because of bias of these 
//      data. Value 0 categorically is not recommended because of that that just the registered user in 
//      current of the first day will be at top of a rating even with one message. 
//      Example: 
//               top_posters('x', x, x, '10') will return Members 10 days a minimum after registration 
// 
#
#-----[ FIND ]------------------------------------------ 
# 
//               top_posters('10', 1, 1) Top Ten Members, Show both ADMIN & MOD 
//               top_posters('10', 1, 0) Top Ten Members, Show both ADMIN, but not MOD 
//               top_posters('10', 0, 1) Top Ten Members, Show both MOD, but not ADMIN 
//               top_posters('10', 0, 0) Top Ten Members, Show neither ADMIN nor MOD 
# 
#-----[ REPLACE WITH ]------------------------------------------ 
# 
//               top_posters('10', 1, 1, '10') Top Ten Members, Show both ADMIN & MOD, 10 days a minimum after registration 
//               top_posters('10', 1, 0, '5') Top Ten Members, Show both ADMIN, but not MOD, 5 days a minimum after registration 
//               top_posters('10', 0, 1, '30') Top Ten Members, Show both MOD, but not ADMIN, 30 days a minimum after registration 
//               top_posters('10', 0, 0, '100') Top Ten Members, Show neither ADMIN nor MOD, 100 days a minimum after registration 
# 
#-----[ FIND ]------------------------------------------ 
# 
function top_posters($str_input, $show_admin, $show_mod) 
# 
#-----[ REPLACE WITH ]------------------------------------------ 
# 
function top_posters($str_input, $show_admin, $show_mod, $min_day) 
# 
#-----[ FIND ]------------------------------------------ 
# 
	$sql = "SELECT u.user_id, u.username, u.user_posts, u.user_level, count(u.user_id) as user_posts 
	FROM " . USERS_TABLE . " u, " . POSTS_TABLE . " p 
	WHERE (u.user_id <> " . ANONYMOUS . ") AND (u.user_id = p.poster_id) 
	GROUP BY user_id, username 
	ORDER BY user_posts DESC 
	LIMIT $str_input"; 
# 
#-----[ REPLACE WITH ]------------------------------------------ 
# 
	$sql = "SELECT user_id, username, user_posts, user_level, user_regdate 
	FROM " . USERS_TABLE . " 
	WHERE (user_id <> " . ANONYMOUS . ") AND (user_regdate < (" . time() . " - $min_day*86400)) 
	ORDER BY ( user_posts / ( ( " . time() . " - user_regdate ) / 86400 )) DESC 
	LIMIT $str_input"; 
# 
#-----[ FIND ]------------------------------------------ 
# 
	$sql = "SELECT u.user_id, u.username, u.user_posts, u.user_level, count(u.user_id) as user_posts 
	FROM " . USERS_TABLE . " u, " . POSTS_TABLE . " p 
	WHERE (u.user_id <> " . ANONYMOUS . ") AND (u.user_id = p.poster_id) AND (u.user_level != " . MOD . ") 
	GROUP BY user_id, username 
	ORDER BY user_posts DESC 
	LIMIT $str_input"; 
# 
#-----[ REPLACE WITH ]------------------------------------------ 
# 
	$sql = "SELECT user_id, username, user_posts, user_level, user_regdate 
	FROM " . USERS_TABLE . " 
	WHERE (user_id <> " . ANONYMOUS . ") AND (user_level != " . MOD . ") AND (user_regdate < (" . time() . " - $min_day*86400)) 
	ORDER BY ( user_posts / ( ( " . time() . " - user_regdate ) / 86400 )) DESC 
	LIMIT $str_input"; 
# 
#-----[ FIND ]------------------------------------------ 
# 
	$sql = "SELECT u.user_id, u.username, u.user_posts, u.user_level, count(u.user_id) as user_posts 
	FROM " . USERS_TABLE . " u, " . POSTS_TABLE . " p 
	WHERE (u.user_id <> " . ANONYMOUS . ") AND (u.user_id = p.poster_id) AND (u.user_level != " . ADMIN . ") 
	GROUP BY user_id, username 
	ORDER BY user_posts DESC 
	LIMIT $str_input"; 
# 
#-----[ REPLACE WITH ]------------------------------------------ 
# 
	$sql = "SELECT user_id, username, user_posts, user_level, user_regdate 
	FROM " . USERS_TABLE . " 
	WHERE (user_id <> " . ANONYMOUS . ") AND (user_level != " . ADMIN . ") AND (user_regdate < (" . time() . " - $min_day*86400)) 
	ORDER BY ( user_posts / ( ( " . time() . " - user_regdate ) / 86400 )) DESC 
	LIMIT $str_input"; 
# 
#-----[ FIND ]------------------------------------------ 
# 
	$sql = "SELECT u.user_id, u.username, u.user_posts, u.user_level, count(u.user_id) as user_posts 
	FROM " . USERS_TABLE . " u, " . POSTS_TABLE . " p 
	WHERE (u.user_id <> " . ANONYMOUS . ") AND (u.user_id = p.poster_id) AND (u.user_level != " . ADMIN . ") AND (u.user_level != " . MOD . ") 
	GROUP BY user_id, username 
	ORDER BY user_posts DESC 
	LIMIT $str_input"; 
# 
#-----[ REPLACE WITH ]------------------------------------------ 
# 
	$sql = "SELECT user_id, username, user_posts, user_level, user_regdate 
	FROM " . USERS_TABLE . " 
	WHERE (user_id <> " . ANONYMOUS . ") AND (user_level != " . ADMIN . ") AND (user_level != " . MOD . ") AND (user_regdate < (" . time() . " - $min_day*86400)) 
	ORDER BY ( user_posts / ( ( " . time() . " - user_regdate ) / 86400 )) DESC 
	LIMIT $str_input"; 
# 
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------ 
# 
# EoM
Собственно добавил ещё одну переменную или как это называеться, отвечающую за минимальное количество дней перед тем как пользователь начнет принимать участие в рейтинге. Отрицательно значение соответствуе нулю. Значение 0 использовать категорически не рекомендую, потому что человек в первые сутки после регистрации даже с 1 сообщением будет находиться в рейтинге скорее всего, то есть абсолютно не объективно. И если у вас много регистрируються и они в первый же день оставляют посты, а потом могут исчезать, то с 0 значением дней вам эта моя вариация сделает только каку. Советую ставить значение от 10, ну минимум от 5, но только если у вас очень-очень непопулярный форум. В принципе лучшим значением для большого форума будет 30. Форум класса моего наверное идеально 10. Себе поставил такое.

Добавлено спустя 5 минут 13 секунд:

Если кому придет в голову как считать PPD так как он считаеться в профиле, то пишите, попробуем, буду очень рад.
В профиле это дело считаеться так же, только время жизни пользователя ещё обрабатываеться round, а полученное значени от этой обработки сравнивается с 1 и из ни выбираеться наибольшее.

Добавлено спустя 1 минуту 50 секунд:

Не надо ставит мне в упрек кривой код - я не знаю PHP вообще. Если вы напишите это лучше - молодцы, постите сюда и если это заработает, то я буду вам безмерно благодарен.

Добавлено спустя 1 минуту 26 секунд:

Ещё. Английский я тоже не знаю, там наверняка всё коряво. Если сумеет написать грамотное пояснение на английском, то тоже буду вам признателен.
я люблю daft punk | новый sugoi.ru
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 19 лет 4 месяца
Поблагодарили: 13 раз
Контактная информация:

Сообщение VVVas »

Вариация на тему: сортируем по количеству поинтов (мод Points System)

Код: Выделить всё

# 
#-----[ OPEN ]------------------------------------------ 
# 
includes/functions.php
# 
#-----[ FIND ]------------------------------------------ 
#
   $sql = "SELECT u.user_id, u.username, u.user_posts, u.user_level, count(u.user_id) as user_posts 
   FROM " . USERS_TABLE . " u, " . POSTS_TABLE . " p 
   WHERE (u.user_id <> " . ANONYMOUS . ") AND (u.user_id = p.poster_id) 
   GROUP BY user_id, username 
   ORDER BY user_posts DESC 
   LIMIT $str_input";
# 
#-----[ REPLACE WITH ]------------------------------------------ 
#
$sql = "SELECT user_id, username, user_points, user_level 
   FROM " . USERS_TABLE . " 
   WHERE (user_id <> " . ANONYMOUS . ") 
   GROUP BY user_id, username 
   ORDER BY user_points DESC 
   LIMIT $str_input";
# 
#-----[ FIND ]------------------------------------------ 
# 
   $sql = "SELECT u.user_id, u.username, u.user_posts, u.user_level, count(u.user_id) as user_posts 
   FROM " . USERS_TABLE . " u, " . POSTS_TABLE . " p 
   WHERE (u.user_id <> " . ANONYMOUS . ") AND (u.user_id = p.poster_id) AND (u.user_level != " . MOD . ") 
   GROUP BY user_id, username 
   ORDER BY user_posts DESC 
   LIMIT $str_input";
# 
#-----[ REPLACE WITH ]------------------------------------------ 
#
$sql = "SELECT user_id, username, user_points, user_level 
   FROM " . USERS_TABLE . " 
   WHERE (user_id <> " . ANONYMOUS . ") AND (user_level != " . MOD . ") 
   GROUP BY user_id, username 
   ORDER BY user_points DESC 
   LIMIT $str_input";
# 
#-----[ FIND ]------------------------------------------ 
# 
   $sql = "SELECT u.user_id, u.username, u.user_posts, u.user_level, count(u.user_id) as user_posts 
   FROM " . USERS_TABLE . " u, " . POSTS_TABLE . " p 
   WHERE (u.user_id <> " . ANONYMOUS . ") AND (u.user_id = p.poster_id) AND (u.user_level != " . ADMIN . ") 
   GROUP BY user_id, username 
   ORDER BY user_posts DESC 
   LIMIT $str_input";
# 
#-----[ REPLACE WITH ]------------------------------------------ 
#
$sql = "SELECT user_id, username, user_points, user_level 
   FROM " . USERS_TABLE . " 
   WHERE (user_id <> " . ANONYMOUS . ") AND (user_level != " . ADMIN . ") 
   GROUP BY user_id, username 
   ORDER BY user_points DESC 
   LIMIT $str_input";
# 
#-----[ FIND ]------------------------------------------ 
# 
   $sql = "SELECT u.user_id, u.username, u.user_posts, u.user_level, count(u.user_id) as user_posts 
   FROM " . USERS_TABLE . " u, " . POSTS_TABLE . " p 
   WHERE (u.user_id <> " . ANONYMOUS . ") AND (u.user_id = p.poster_id) AND (u.user_level != " . ADMIN . ") AND (u.user_level != " . MOD . ") 
   GROUP BY user_id, username 
   ORDER BY user_posts DESC 
   LIMIT $str_input";
# 
#-----[ REPLACE WITH ]------------------------------------------ 
#
$sql = "SELECT user_id, username, user_points, user_level 
   FROM " . USERS_TABLE . " 
   WHERE (user_id <> " . ANONYMOUS . ") AND (user_level != " . ADMIN . ") AND (user_level != " . MOD . ") 
   GROUP BY user_id, username 
   ORDER BY user_points DESC 
   LIMIT $str_input";
# 
#-----[ FIND ]------------------------------------------ 
# 
$top_posters .= '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'>' . $row['username'] . '</a>&nbsp;(' . $row['user_posts'] . '), ';
# 
#-----[ REPLACE WITH ]------------------------------------------ 
#
$top_posters .= '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'>' . $row['username'] . '</a>&nbsp;(' . $row['user_points'] . '), ';
# 
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------ 
# 
# EoM
я люблю daft punk | новый sugoi.ru
Закрыто

Вернуться в «Запросы модов для phpBB 2.0.x»