Hallo,
ist es irgendwie möglich, die Mitgliedersuche so zu erweitern, dass man auch nach einem bestimmten (eigenen) Profilfeld suchen kann?
Gruß
bigfraggle
Hm, danke für den Link. Habe ich mir mal angeschaut...
Leider finde ich dort keine Info, wie ich nach einem Profilfeld suchen bzw. sortieren kann.
Zumindest nicht, was aktuellere Versionen angeht.
Nimm hierfür folgende Änderungen vor:
1. in Datei
"memberlist.php"
ersetze
PHP-Code:
case "postnum":
$sort_field = "u.postnum";
break;
durch
PHP-Code:
case "postnum":
$sort_field = "u.postnum";
break;
case "name_userfield": // "name_userfield" kann frei definiert werden
$sort_field = "f.fidX";
break;
ersetze
PHP-Code:
$user['postnum'] = my_number_format($user['postnum']);
durch
PHP-Code:
$user['postnum'] = my_number_format($user['postnum']);
$user['name_userfield'] = htmlspecialchars_uni($user['fidX']);
Hierbei muss "fidX" der Feld-ID des Profilfeldes "Name Profilfeld" (in Datenbank-Tabelle "mybb_userfields > fidX") entsprechen.
2. in "Admin-CP > dein Theme > Benutzerliste Templates":
2.1 in Template
"memberlist"
ersetze
Code:
<td class="thead" colspan="5"><strong>{$lang->member_list}</strong></td>
durch
Code:
<td class="thead" colspan="6"><strong>{$lang->member_list}</strong></td>
ersetze
Code:
<td class="tcat" width="10%" align="center"><span class="smalltext"><strong>{$lang->posts}</strong></span></td>
durch
Code:
<td class="tcat" width="10%" align="center"><span class="smalltext"><strong>{$lang->posts}</strong></span></td>
<td class="tcat" width="10%" align="center"><span class="smalltext"><strong>'Name Profilfeld'</strong></span></td>
ersetze
Code:
<option value="postnum"{$sort_selected['postnum']}>{$lang->sort_by_posts}</option>
durch
Code:
<option value="postnum"{$sort_selected['postnum']}>{$lang->sort_by_posts}</option>
<option value="name_userfield"{$sort_selected['name_userfield']}>sortiert nach: 'Name Profilfeld'</option>
2.2 in Template
"memberlist_search"
ersetze
Code:
<option value="postnum">{$lang->sort_by_posts}</option>
durch
Code:
<option value="postnum">{$lang->sort_by_posts}</option>
<option value="name_userfield">sortiert nach: 'Name Profilfeld'</option>
2.3 in Template
"memberlist_user"
ersetze
Code:
<td class="{$alt_bg}" align="center">{$user['postnum']}</td>
durch
Code:
<td class="{$alt_bg}" align="center">{$user['postnum']}</td>
<td class="{$alt_bg}" align="center">{$user['name_userfield']}</td>
Huh, danke für den Code. Ist ja ne ganze Menge.
Teste das die Tage mal in Ruhe aus.
Wollte nur schon einmal ein Feedback geben und danke sagen...
So, jetzt ein "richtiges" Danke!
Funktioniert soweit...
Zwei Fragen habe ich aber noch.
1. Ich möchte in der erweiterten Mitgliedersuche auch nach meinem Profilfeld 2 suchen. Ich dachte, folgender zusätzlicher Code in der memberlist.php würde helfen, hat er aber nicht...
PHP-Code:
// Profilfeld 2 contains
$search_website = htmlspecialchars_uni($mybb->input['fid2']);
if(trim($mybb->input['fid2']))
{
$search_query .= " AND f.fid2 LIKE '%".$db->escape_string_like($mybb->input['fid2'])."%'";
$search_url .= "&fid2=".urlencode($mybb->input['fid2']);
}
Beim Suchen bekomme ich folgenden Fehler:
Code:
SQL Error:
1109 - Unknown table 'f' in where clause
Query:
SELECT COUNT(*) AS users FROM mybboard_users u WHERE 1=1 AND f.fid2 LIKE '%eingegebener_suchbegriff%'
Ich verstehe soweit, dass er f.fid2 nicht erkennt. Dachte erst, ich könnte u.fid2 nehmen, geht aber (natürlich) auch nicht... Leider kenne ich mich mit PHP/SQL nicht so aus...
2. Kann ich in der Mitgliederübersicht das Suchen nach Website gegen ein Suchen nach Profilfeld 2 austauschen? Wenn 1) gelöst ist, müsste ich doch nur noch das Template anpassen, oder?
Zu 1) Im Grunde musst du die oben angegebenen Schritte nochmal durchführen und jeweils die ID und den Namen des Profilfeldes anpassen. D.h. anstatt die Stellen zu ersetzen ergänzt du das neue Feld. Beispiel:
PHP-Code:
case "postnum":
$sort_field = "u.postnum";
break;
case "name_userfield": // "name_userfield" kann frei definiert werden
$sort_field = "f.fidX";
break;
case "weiteres_feld":
$sort_field = "f.fidX";
break;
Zu 2) Ich würde einfach nur das Formularfeld im entsprechenden Template entfernen bzw. auskommentieren.
Hm, ich glaube da hast du mich falsch verstanden... oder ich habe mich ungenau ausgedrückt.
Um das Profilfeld 2 ging es bei mir ja schon die ganze Zeit. Mit den Codes von linwinman habe ich aber lediglich das Profilfeld in die Mitgliederübersicht integriert und deren Sortierung um das Profilfeld erweitert. Nun geht es mir darum, in der erweiterten Mitgliedersuche bzw. in der einfachen Mitgliedersuche auf der Mitgliederseite ein Suchfeld für Profilfeld 2 zu packen.
Ah, jetzt hab ich das verstanden. Der Fehler wird in Zeile 184 hervorgerufen, wo die Benutzerdaten abgerufen werden. Dabei wird nur auf die Tabelle users zurückgegriffen, die natürlich nicht die eigenen Profilfelder beinhaltet. D.h. du musst die Datenbankabfrage umschreiben, um die Tabelle userfields ebenfalls abzufragen. Schau dir dazu mal die Zeilen 207-214 an.
Ok, ich kann das zumindest schon einmal nachvollziehen... ^^
Im für mich entscheidenden Teil wird nur die Tabelle users herangezogen, weswegen fid2 hier unbekannt ist. Klar. Demnach muss ich dieser hier...
PHP-Code:
$query = $db->simple_select("users u", "COUNT(*) AS users", "{$search_query}");
...in sowas abändern.
PHP-Code:
$query = $db->query("
SELECT u.*, f.*
FROM ".TABLE_PREFIX."users u
LEFT JOIN ".TABLE_PREFIX."userfields f ON (f.ufid=u.uid)
WHERE {$search_query}
ORDER BY {$sort_field} {$sort_order}
LIMIT {$start}, {$per_page}
");
Leider lassen mich meine geringsten Kenntnisse hier etwas im Stich...
Würde mich freuen, wenn jemand den Code posten könnte...
Kann niemand helfen?