Für alle, die es auch versuchen möchten, habe ich hier zum Tag der deutschen Einheit noch mal die einzelnen Mod-Schritte zusammengefasst.
Die Ajax-Livesearch-Funktion mit der bei der Mitgliedersuche im Namensfeld schon während des Eintippens Vorschläge gemacht werden, ist zwar grob implementiert, aber dann doch nicht ins Search-Template integriert, weil so bisher nicht die richtigen Inhalte übermittelt werden. Der Aufwand war mir zu groß, eigentlich braucht man es auch nicht und das war ursprünglich ja auch nur für das Feld 'Benutzername' so vorgesehen.
Getestet mit phpBB Deutsch 3.2.10
Mein benutzerdefiniertes Profilfeld hat die Feld-Kennung "plz_wohnort".
Wenn ihr eine andere Kennung benutzen wollt, müsst ihr in allen 4 Dateien "plz_wohnort" durch "mein_eigenes_feld" und "PLZ_WOHNORT" durch "MEIN_EIGENES_FELD" ersetzen. Die Groß- und Kleinschrteibung muss dabei erhalten bleiben.
Die angegebenen Zeilennummern beziehen sich jeweils auf die unveränderte Orginaldatei.
Nicht vergessen: Backup der alten Dateien machen!
Öffne: /memberlist.php
Finde:
(ab Zeile 919)
Code: Alles auswählen
case 'livesearch':
$username_chars = $request->variable('username', '', true);
$sql = 'SELECT username, user_id, user_colour
FROM ' . USERS_TABLE . '
WHERE ' . $db->sql_in_set('user_type', $user_types) . '
AND username_clean ' . $db->sql_like_expression(utf8_clean_string($username_chars) . $db->get_any_char());
$result = $db->sql_query_limit($sql, 10);
$user_list = array();
while ($row = $db->sql_fetchrow($result))
{
$user_list[] = array(
'user_id' => (int) $row['user_id'],
'result' => $row['username'],
'username_full' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
'display' => get_username_string('no_profile', $row['user_id'], $row['username'], $row['user_colour']),
);
}
$db->sql_freeresult($result);
$json_response = new \phpbb\json_response();
$json_response->send(array(
'keyword' => $username_chars,
'results' => $user_list,
));
break;
Ersetze mit:
Code: Alles auswählen
case 'livesearch':
$username_chars = $request->variable('username', '', true);
$sql = 'SELECT username, u.user_id, user_colour, pf_plz_wohnort
FROM ' . USERS_TABLE . ' u
LEFT JOIN ' . PROFILE_FIELDS_DATA_TABLE . ' fd ON (u.user_id = fd.user_id)
WHERE ' . $db->sql_in_set('user_type', $user_types) . '
AND username_clean ' . $db->sql_like_expression(utf8_clean_string($username_chars) . $db->get_any_char());
$result = $db->sql_query_limit($sql, 10);
$user_list = array();
while ($row = $db->sql_fetchrow($result))
{
$user_list[] = array(
'user_id' => (int) $row['user_id'],
'result' => $row['username'],
'plz_wohnort' => $row['pf_plz_wohnort'],
'username_full' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']),
'display' => get_username_string('no_profile', $row['user_id'], $row['username'], $row['user_colour'], $row['pf_plz_wohnort']),
);
}
$db->sql_freeresult($result);
$json_response = new \phpbb\json_response();
$json_response->send(array(
'keyword' => $username_chars,
'results' => $user_list,
));
break;
Finde:
(ab Zeile 957)
Code: Alles auswählen
// Sorting
$sort_key_text = array('a' => $user->lang['SORT_USERNAME'], 'c' => $user->lang['SORT_JOINED'], 'd' => $user->lang['SORT_POST_COUNT']);
$sort_key_sql = array('a' => 'u.username_clean', 'c' => 'u.user_regdate', 'd' => 'u.user_posts');
Ersetze mit:
Code: Alles auswählen
// Sorting
$sort_key_text = array('a' => $user->lang['SORT_USERNAME'], 'c' => $user->lang['SORT_JOINED'], 'd' => $user->lang['SORT_POST_COUNT'], 'n' => $user->lang['SORT_PLZ_WOHNORT']);
$sort_key_sql = array('a' => 'u.username_clean', 'c' => 'u.user_regdate', 'd' => 'u.user_posts', 'n' => 'u.plz_wohnort');
$sort_key_text['n'] = $user->lang['PLZ_WOHNORT'];
$sort_key_sql['n'] = 'pf_plz_wohnort';
Finde:
(ab Zeile 1007)
Code: Alles auswählen
// Search URL parameters, if any of these are in the URL we do a search
$search_params = array('username', 'email', 'jabber', 'search_group_id', 'joined_select', 'active_select', 'count_select', 'joined', 'active', 'count', 'ip');
Ersetze mit:
Code: Alles auswählen
// Search URL parameters, if any of these are in the URL we do a search
$search_params = array('username', 'plz_wohnort', 'email', 'jabber', 'search_group_id', 'joined_select', 'active_select', 'count_select', 'joined', 'active', 'count', 'ip');
Finde:
(Zeile 1015)
Code: Alles auswählen
$username = $request->variable('username', '', true);
Danach einfügen:
Code: Alles auswählen
$plz_wohnort = $request->variable('plz_wohnort', '', true . '*');
Finde:
(Zeile 1055)
Code: Alles auswählen
$sql_where .= ($username) ? ' AND u.username_clean ' . $db->sql_like_expression(str_replace('*', $db->get_any_char(), utf8_clean_string($username))) : '';
Danach einfügen:
Code: Alles auswählen
$sql_where .= mb_strtolower($plz_wohnort) ? ' AND LOWER(pf_plz_wohnort) ' . $db->sql_like_expression(str_replace('*', $db->get_any_char(), utf8_clean_string($plz_wohnort))) . ' ' : '';
Finde:
(Ab Zeile 1333)
Code: Alles auswählen
// Count the users ...
$sql = 'SELECT COUNT(u.user_id) AS total_users
FROM ' . USERS_TABLE . " u$sql_from
WHERE " . $db->sql_in_set('u.user_type', $user_types) . "
$sql_where";
$result = $db->sql_query($sql);
$total_users = (int) $db->sql_fetchfield('total_users');
$db->sql_freeresult($result);
Ersetze mit:
Code: Alles auswählen
// Count the users ...
$sql = 'SELECT COUNT(u.user_id) AS total_users
FROM (' . USERS_TABLE . " u
$sql_from)
LEFT JOIN " . PROFILE_FIELDS_DATA_TABLE . " fd
ON (u.user_id = fd.user_id)
WHERE (" . $db->sql_in_set('u.user_type', $user_types) . "
$sql_where)";
$result = $db->sql_query($sql);
$total_users = (int) $db->sql_fetchfield('total_users');
$db->sql_freeresult($result);
Finde:
(Zeile 1353)
Danach einfügen:
Code: Alles auswählen
'plz_wohnort' => array('plz_wohnort', '', true. '*'),
Finde:
(Zeile 1508)
Danach einfügen:
Finde:
(Ab Zeile 1535)
Code: Alles auswählen
// Get us some users :D
$sql = "SELECT u.user_id
FROM " . USERS_TABLE . " u
$sql_from
WHERE " . $db->sql_in_set('u.user_type', $user_types) . "
$sql_where
ORDER BY $order_by";
$result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
Ersetze mit:
Code: Alles auswählen
// Get us some users :D
if(isset($sort_key_sql['n'])) {
$sql = "SELECT u.user_id
FROM (" . USERS_TABLE . " u
$sql_from)
LEFT JOIN " . PROFILE_FIELDS_DATA_TABLE . " fd
ON (u.user_id = fd.user_id)
WHERE (" . $db->sql_in_set('u.user_type', $user_types) . "
$sql_where)
ORDER BY $order_by";
} else {
$sql = "SELECT u.user_id
FROM " . USERS_TABLE . " u
$sql_from
WHERE " . $db->sql_in_set('u.user_type', $user_types) . "
$sql_where
ORDER BY $order_by";
}
$result = $db->sql_query_limit($sql, $config['topics_per_page'], $start);
Finde:
(Zeile 1709)
Danach einfügen:
Code: Alles auswählen
'S_PLZ_WOHNORT' => (isset($cp_row['row']) && sizeof($cp_row['row'])) ? true : false,
Finde:
(Zeile 1748)
Code: Alles auswählen
'U_SORT_USERNAME' => $sort_url . '&sk=a&sd=' . (($sort_key == 'a' && $sort_dir == 'a') ? 'd' : 'a'),
Danach einfügen:
Code: Alles auswählen
'U_SORT_PLZ_WOHNORT' => $sort_url . '&sk=n&sd=' . (($sort_key == 'n' && $sort_dir == 'a') ? 'd' : 'a'),
Öffne: /language/de/common.php
Finde:
(Zeile 382)
Danach einfügen:
Code: Alles auswählen
'PLZ_WOHNORT' => 'PLZ Wohnort',
'SORT_PLZ_WOHNORT' => 'PLZ',
Öffne: /styles/prosilver/template/memberlist_body.html
Finde:
(Zeile 69)
Code: Alles auswählen
<table class="table1 memberlist" id="memberlist">
<thead>
<tr>
<th class="name" data-dfn="{L_RANK}{L_COMMA_SEPARATOR}<!-- IF S_SHOW_GROUP and .memberrow -->{L_GROUP_LEADER}<!-- ELSE -->{L_USERNAME}<!-- ENDIF -->"><span class="rank-img"><a href="{U_SORT_RANK}">{L_RANK}</a></span><a href="{U_SORT_USERNAME}"><!-- IF S_SHOW_GROUP and .memberrow -->{L_GROUP_LEADER}<!-- ELSE -->{L_USERNAME}<!-- ENDIF --></a></th>
<th class="posts"><a href="{U_SORT_POSTS}#memberlist">{L_POSTS}</a></th>
<th class="info"><!-- BEGIN custom_fields --><!-- IF not custom_fields.S_FIRST_ROW -->{L_COMMA_SEPARATOR} <!-- ENDIF -->{custom_fields.PROFILE_FIELD_NAME}<!-- END custom_fields --></th>
<th class="joined"><a href="{U_SORT_JOINED}#memberlist">{L_JOINED}</a></th>
<!-- IF U_SORT_ACTIVE --><th class="active"><a href="{U_SORT_ACTIVE}#memberlist">{L_LAST_ACTIVE}</a></th><!-- ENDIF -->
{% EVENT memberlist_body_memberlist_after %}
</tr>
</thead>
<tbody>
Ersetze mit:
Code: Alles auswählen
<table class="table1 memberlist" id="memberlist">
<thead>
<tr>
<th class="name" data-dfn="{L_RANK}{L_COMMA_SEPARATOR}<!-- IF S_SHOW_GROUP and .memberrow -->{L_GROUP_LEADER}<!-- ELSE -->{L_USERNAME}<!-- ENDIF -->"><span class="rank-img"><a href="{U_SORT_RANK}">{L_RANK}</a></span><a href="{U_SORT_USERNAME}"><!-- IF S_SHOW_GROUP and .memberrow -->{L_GROUP_LEADER}<!-- ELSE -->{L_USERNAME}<!-- ENDIF --></a></th>
<th class="posts"><a href="{U_SORT_POSTS}#memberlist">{L_POSTS}</a></th>
<!-- IF U_SORT_PLZ_WOHNORT --><th class="info"><a href="{U_SORT_PLZ_WOHNORT}#memberlist">{L_PLZ_WOHNORT}</a></th><!-- ENDIF -->
<th class="joined"><a href="{U_SORT_JOINED}#memberlist">{L_JOINED}</a></th>
<!-- IF U_SORT_ACTIVE --><th class="active"><a href="{U_SORT_ACTIVE}#memberlist">{L_LAST_ACTIVE}</a></th><!-- ENDIF -->
{% EVENT memberlist_body_memberlist_after %}
</tr>
</thead>
<tbody>
Finde:
(ab Zeile 128)
Code: Alles auswählen
<td class="info">
{%- for field in memberrow.custom_fields -%}
<div>{% if field.S_PROFILE_CONTACT %}<a href="{{ field.PROFILE_FIELD_CONTACT }}">{% endif %}{{ field.PROFILE_FIELD_VALUE }}{% if field.S_PROFILE_CONTACT %}</a>{% endif %}</div>
{%- else -%}
{%- endfor -%}
</td>
Ersetze mit:
Code: Alles auswählen
<td class="info"><!-- IF memberrow.PROFILE_PLZ_WOHNORT_VALUE --><div>{memberrow.PROFILE_PLZ_WOHNORT_VALUE}</div><!-- ELSE --> <!-- ENDIF --></td>
Öffne: /styles/prosilver/template/memberlist_body.html
Finde:
(Zeile 27)
DAVOR einfügen:
Code: Alles auswählen
<dl>
<dt><label for="plz_wohnort">{L_PLZ_WOHNORT}{L_COLON}</label></dt>
<dd><input type="text" name="plz_wohnort" id="plz_wohnort" value="{PLZ_WOHNORT}" class="inputbox" /></dd>
</dl>
Alle 4 Dateien in die entsprechenden Verzeichnisse hochladen und phpBB-Cache leeren.
Viel Glück!