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

Вопрос по Моду "Filter member list"

Ответы на вопросы, связанные с модами для phpBB 2.0.x, кроме относящихся к форуму Для авторов (phpBB 2.0.x).
SNA
phpBB 1.4.1
Сообщения: 44
Стаж: 18 лет 5 месяцев

Вопрос по Моду "Filter member list"

Сообщение SNA »

К сожалению в разделе по модам не смог создать тему, поэтому приходится спрашивать здесь.

установил мод Filter member list версии 1.0.8

никак не могу допереть, как его заставить фильтровать исключительно по цифрам, а не по совпадению любого куска текста.
Т.е. если я задам например фильтровать пользователей по какому-то параметру равному 2, то для него будет в одной куче 2, 12, 22 и т.д.

Хотел сделать дроп-меню и только из него выбор - тоже нифига не получается...

подскажите хоть в каком месте мода нужно сделать эти изменения.

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

## EasyMod 0.0.10a compliant
################################################################# 
## MOD Title: 		Filter member list
## MOD Author: 		Shannado <sven@shannado.nl> (Sven) http://www.shannado.nl/forumorg
## MOD Description: With this MOD an user is able to filter the memberslist.
## MOD Version: 	1.0.8
##		
## 
## Installation Level: 	Easy
## Installation Time: 	10 - 20 Minutes 
## Files To Edit: 		memberlist.php, 
##						lang_main.php, 
##						memberlist_body.tpl
## Included Files: N/A
############################################################## 
## For Security Purposes, Please Check: http://www.phpbb.com/mods/ for the 
## latest version of this MOD. Downloading this MOD from other sites could cause malicious code 
## to enter into your phpBB Forum. As such, phpBB will not offer support for MOD's not offered 
## in our MOD-Database, located at: http://www.phpbb.com/mods/ 
############################################################## 
## Author Notes: 
## 
############################################################## 
##
##	When you don't like the extra selectbox AND you don't mind that user only can filter on 'Username'
##	Then you don't put '{L_MEMBERLIST_FILTER_SEL}&nbsp;{S_FILTER_SELECT}&nbsp;' in the memberlist_body.tpl
##	By default the MOD filters on Username.
##	Change  $lang['Memberlist_filter'] = "keyword (wildcards allowed) "; into 
##		$lang['Memberlist_filter'] = "username (wildcards allowed) ";
##
##	An user is able to filter on email, but if a user has set his email on hidden, then the user
##	will not show up in the list, if the filter matches the criteria. This does not concern if the user is an ADMIN
##
############################################################## 
## MOD History: 
## 
## ------------
## 01-01-2002 - 0.9.0 beta 
##	- Beta
##
## 01-01-2002 - 0.9.1 beta
##	- The pagination will not take into account the filter used, 
##	  and as a result the pagination will be created based on the total members.
##	  Thanks goto JamesB for finding the bug and making the solution for this bug
##
## 01-01-2002 - 0.9.5 beta
##	- Text stays in the textarea when you hit the sort button or clicking for the next page
##	- User is able to filter on Username, location, email OR website
##
## 01-01-2002 - 0.9.6 beta
##	- When nothing matches the critera a message will be show
##
## 01-01-2002 - 0.9.7 beta
##	- Forgot to change some code in the HOWTO
##
## 01-01-2002 - 1.0.0 FINAL
##	- Final
##	- No changes
##
## 01-01-2002 - 1.0.1 FINAL
##	- Some minor code cosmetic updates
##
## 01-01-2002 - 1.0.2 FINAL
##	- Add rank to the filter
##
## 01-01-2002 - 1.0.3 FINAL
##	- Fixed small typos
##
## 01-01-2002 - 1.0.4 FINAL
##	- Fixed small typos
##
## 01-01-2002 - 1.0.5 FINAL
##	- Fixed small typos
##
## 01-01-2002 - 1.0.6 FINAL
##	- Made phpBB v2.0.2 complaint and EasyMod 0.0.7 complaint
##
## 01-01-2002 - 1.0.7 FINAL
##	- Made phpBB v2.0.4 complaint and fixed a small bug
##
## 05-12-2003 - 1.0.8 FINAL
##	- Made phpBB v2.0.6 complaint and EasyMod 0.0.10a complaint
##	- Adjusted to the new Template
################################################################# 
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD 
################################################################# 
# 
#-----[ OPEN ]------------------------------------------ 
#  
language/lang_english/lang_main.php

# 
#-----[ FIND ]------------------------------------------ 
# 
//
// That's all, Folks!


# 
#-----[ BEFORE, ADD ]------------------------------------------ 
# 
// Filter memberslist MOD
$lang['Memberlist_filter'] = 'keyword (wildcards allowed) ';
$lang['Memberlist_filter_sel'] = 'Choose filter: ';
$lang['Click_return_memberlist'] = 'Click %sHere%s to return to the memberlist';

# 
#-----[ OPEN ]------------------------------------------ 
# 
memberlist.php

# 
#-----[ FIND ]------------------------------------------ 
# 
//
// Memberlist sorting
//

# 
#-----[ BEFORE, ADD ]------------------------------------------ 
# 
//
// Filter Memberlist MOD - BEGIN
//

$filter_mode_types_text = array($lang['Sort_Username'], $lang['Sort_Location'], $lang['Sort_Email'],  $lang['Sort_Website'], $lang['Poster_rank']); 
$filter_mode_types = array('username', 'location', 'email', 'website', 'rank'); 

$select_filter_mode = '<select name="filter_mode">';
for($i = 0; $i < count($filter_mode_types_text); $i++) 
{
	$selected = ( $filter_mode == $filter_mode_types[$i] ) ? ' selected="selected"' : '';
	$select_filter_mode .= "<option value=\"" . $filter_mode_types[$i] . "\"$selected>" . $filter_mode_types_text[$i] . "</option>";
}
$select_filter_mode .= '</select>';

//
// Filter Memberlist MOD - END
//

# 
#-----[ FIND ]------------------------------------------ 
# 
//
// Generate page
//

# 
#-----[ BEFORE, ADD ]------------------------------------------ 
# 
//
// Filter Memberlist MOD - BEGIN
//
if ( isset($HTTP_POST_VARS['filter']) || isset($HTTP_GET_VARS['filter']) )
{
	$filter = ( isset($HTTP_POST_VARS['filter']) ) ? $HTTP_POST_VARS['filter'] : $HTTP_GET_VARS['filter'];

	if (empty($filter) )
	{
		$sql_filter = '';
	}
	else
	{
		$username_filter = "*". $filter . "*"; 
		$username_filter = preg_replace('/\*/', '%', trim(strip_tags($username_filter)));

		if ( isset($HTTP_GET_VARS['filter_mode']) || isset($HTTP_POST_VARS['filter_mode']) )
		{
			$filter_mode = ( isset($HTTP_POST_VARS['filter_mode']) ) ? $HTTP_POST_VARS['filter_mode'] : $HTTP_GET_VARS['filter_mode'];

			switch( $filter_mode )
			{

				case 'username':
					$sql_filter = " AND username LIKE '" . str_replace("\'", "''", $username_filter) . "'";
					break;
				case 'location':
					$sql_filter = " AND user_from LIKE '" . str_replace("\'", "''", $username_filter) . "'";
					break;
				case 'email':
					if ($userdata['user_level'] == ADMIN )
					{
						$sql_filter = " AND user_email LIKE '" . str_replace("\'", "''", $username_filter) . "'";
					}
					else
					{
						$sql_filter = " AND user_viewemail != '0' AND user_email LIKE '" . str_replace("\'", "''", $username_filter) . "'";
					}
					break;
				case 'website':
					$sql_filter = " AND user_website LIKE '" . str_replace("\'", "''", $username_filter) . "'";
					break;
				case 'rank':
					$sql_filter = " AND r.rank_title LIKE '" . str_replace("\'", "''", $username_filter) . "'";
					break;
				default:
					$sql_filter = " AND username LIKE '" . str_replace("\'", "''", $username_filter) . "'";
					break;
			}
		}
		else
		{
			$sql_filter = " AND username LIKE '" . str_replace("\'", "''", $username_filter) . "'";
		}

	}
}
else
{
	$sql_filter = '';
}

//
// Filter Memberlist MOD - END
//

# 
#-----[ FIND ]------------------------------------------ 
# 
	'L_POSTS' => $lang['Posts'], 

# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
	'FILTER' => $filter,
	'L_MEMBERLIST_FILTER' => $lang['Memberlist_filter'], 
	'L_MEMBERLIST_FILTER_SEL' => $lang['Memberlist_filter_sel'], 
	'S_FILTER_SELECT' => $select_filter_mode,

# 
#-----[ FIND ]------------------------------------------ 
#
$sql = "SELECT username

# 
#-----[ IN-LINE FIND ]------------------------------------------ 
# 
, user_allowavatar

# 
#-----[ IN-LINE AFTER, ADD ]------------------------------------------ 
# 
, r.rank_title 


# 
#-----[ FIND ]------------------------------------------ 
#
	FROM " . USERS_TABLE . "
	WHERE user_id <> " . ANONYMOUS . "

# 
#-----[ IN-LINE FIND ]------------------------------------------ 
# 
	USERS_TABLE . "

# 
#-----[ IN-LINE AFTER, ADD ]------------------------------------------ 
# 
 LEFT JOIN " . RANKS_TABLE . " r ON r.rank_id = user_rank

# 
#-----[ IN-LINE FIND ]------------------------------------------ 
# 
<> " . ANONYMOUS . "

# 
#-----[ IN-LINE AFTER, ADD ]------------------------------------------ 
# 
 $sql_filter


# 
#-----[ FIND ]------------------------------------------ 
# 
	while ( $row = $db->sql_fetchrow($result) );
}


# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
else
{
	$message = $lang['No_match'] . '<br /><br />' . sprintf($lang['Click_return_memberlist'], '<a href="' . append_sid('memberlist.'.$phpEx) . '">', '</a>' );
	message_die(GENERAL_MESSAGE, $message);
}


# 
#-----[ FIND ]------------------------------------------ 
# 
		FROM " . USERS_TABLE . "
		WHERE user_id <> " . ANONYMOUS;

# 
#-----[ REPLACE WITH ]------------------------------------------ 
# 
		FROM " . USERS_TABLE . " LEFT JOIN " . RANKS_TABLE . " r 
		ON r.rank_id = user_rank
		WHERE user_id <> " . ANONYMOUS . " $sql_filter"; 

# 
#-----[ FIND ]------------------------------------------ 
# 
	$pagination = generate_pagination("memberlist.$phpEx?mode=$mode&order=$sort_order", $total_members, $board_config['topics_per_page'], $start). '&nbsp;';


# 
#-----[ IN-LINE FIND ]------------------------------------------ 
#
	memberlist.$phpEx?mode=$mode&order=$sort_order

# 
#-----[ IN-LINE AFTER, ADD ]------------------------------------------ 
# 
	&filter=$filter&filter_mode=$filter_mode
		
# 
#-----[ OPEN ]------------------------------------------ 
# 
templates/subSilver/memberlist_body.tpl

# 
#-----[ FIND ]------------------------------------------ 
# 
<form method="post" action="{S_MODE_ACTION}">
  <table width="100%" cellspacing="2" cellpadding="2" border="0" align="center">
	<tr> 
	  <td align="left"><span class="nav"><a href="{U_INDEX}" class="nav">{L_INDEX}</a></span></td>
	  <td align="right" nowrap="nowrap"><span class="genmed">{L_SELECT_SORT_METHOD}:&nbsp;{S_MODE_SELECT}&nbsp;&nbsp;{L_ORDER}&nbsp;{S_ORDER_SELECT}&nbsp;&nbsp; 
		<input type="submit" name="submit" value="{L_SUBMIT}" class="liteoption" />
		</span></td>
	</tr>
  </table>

# 
#-----[ REPLACE WITH ]------------------------------------------ 
# 
  <table width="100%" cellspacing="2" cellpadding="2" border="0" align="center">
	<form method="post" action="{S_MODE_ACTION}">
	<tr>
		<td align="right" nowrap="nowrap" colspan="2"><span class="genmed">{L_SELECT_SORT_METHOD}:&nbsp;{S_MODE_SELECT}&nbsp;&nbsp;{L_ORDER}&nbsp;{S_ORDER_SELECT}&nbsp;&nbsp;</span></td>
	</tr>
	<tr>
		<td align="left" valign="bottom"><span class="nav"><a href="{U_INDEX}" class="nav">{L_INDEX}</a></span></td>
		<td align="right" nowrap="nowrap"><span class="genmed">{L_MEMBERLIST_FILTER_SEL}&nbsp;{S_FILTER_SELECT}&nbsp;{L_MEMBERLIST_FILTER}<input type="text" style="width: 150px" name="filter" class="post" size="28" value="{FILTER}" />
		<input type="submit" name="submit" value="{L_SUBMIT}" class="liteoption" />
		</span></td>
	</tr>
	</form>
  </table>

# 
#-----[ FIND ]------------------------------------------ 
# 
</table></form>

# 
#-----[ REPLACE WITH ]------------------------------------------ 
# 
</table>

# 
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------ 
# 
# EoM
Добавлено спустя 20 минут 13 секунд:

А еще если кто знает - подскажите как сделать чтобы фильтр не сбрасывался на вариант по умолчанию каждый раз, а оставался на последнем выбранном. Т.е. если я выбрал фильтр по количеству сообщений, чтобы после вывода списка пользователей меню фильтра так и осталось "по количеству сообщений", а если выбрал по дате регистрации - то соотв. по дате
Аватара пользователя
epislon
phpBB 1.2.0
Сообщения: 16
Стаж: 16 лет 7 месяцев

Сообщение epislon »

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

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

# 
#-----[ OPEN ]------------------------------------------ 
# 
	memberlist.php

# 
#-----[ FIND ]------------------------------------------ 
# 
if ( isset($HTTP_GET_VARS['mode']) || isset($HTTP_POST_VARS['mode']) )
{
	$mode = ( isset($HTTP_POST_VARS['mode']) ) ? htmlspecialchars($HTTP_POST_VARS['mode']) : htmlspecialchars($HTTP_GET_VARS['mode']);
}
else
{
	$mode = 'joined';
}
# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
if ( isset($HTTP_GET_VARS['filter_mode']) || isset($HTTP_POST_VARS['filter_mode']) )
{
	$filter_mode = ( isset($HTTP_POST_VARS['filter_mode']) ) ? htmlspecialchars($HTTP_POST_VARS['filter_mode']) : htmlspecialchars($HTTP_GET_VARS['filter_mode']);
}
else
{
	$filter_mode = '';
}
Непонятно, почему и куда пропала эта часть кода...


У меня же другой вопрос:
Вот часть кода мода:

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

# 
#-----[ FIND ]------------------------------------------ 
# 	while ( $row = $db->sql_fetchrow($result) );
}

# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 
else
{
	$message = $lang['No_match'] . '<br /><br />' . sprintf($lang['Click_return_memberlist'], '<a href="' . append_sid('memberlist.'.$phpEx) . '">', '</a>' );
	message_die(GENERAL_MESSAGE, $message);
}
Неожиданное появление "else". "if" не было, а "else" предлагается добавить. Непонятненько.

Вернуться в «Поддержка модов для phpBB 2.0.x»