Hallo, Gast! (Registrieren)

Wir wünschen allen Besuchern frohe und besinnliche Weihnachten!

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 7 Gast/Gäste
Mitglieder: Suche nach Profilfeld
#11
Du kannst es einmal mit folgenden Änderungen testen:

ersetze in der Datei "memberlist.php"
PHP-Code:
    $query $db->simple_select("users u""COUNT(*) AS users""{$search_query}");
    
$num_users $db->fetch_field($query'users'); 
durch
PHP-Code:
    $query $db->simple_select("users u""COUNT(*) AS users""{$search_query}");
    
$num_users $db->fetch_field($query"users");
    
    
// zus. Profilfeld
    
$search_name_userfield htmlspecialchars_uni($mybb->input['name_userfield']);
    if(
trim($mybb->input[''name_userfield']))
    {
        $search_query .= " AND f.fidX LIKE '
%".$db->escape_string_like($mybb->input['name_userfield'])."%'";
        $search_url .= "&fidX=".urlencode($mybb->input['
name_userfield']);
    } 
Hierbei muss "fidX" der Feld-ID des Profilfeldes "Name Profilfeld" (in Datenbank-Tabelle "mybb_userfields > fidX") entsprechen.
Den String "name_userfield" kannst du jew. nach deinen Wünschen ändern.

Ersetze im Template "memberlist_search"
Code:
<tr>
    <td class="tcat" colspan="2"><strong>{$lang->search_options}</strong></td>
</tr>
durch
Code:
<tr>
    <td class="trow1" width="20%"><strong><label for="name_userfield">Name Profilfeld</label></strong></td>
    <td class="trow1">
        <input type="text" class="textbox" name="name_userfield" id="icq" />
    </td>
</tr>
<tr>
    <td class="tcat" colspan="2"><strong>{$lang->search_options}</strong></td>
</tr>

(25.09.2009, 10:27)bigfraggle schrieb: 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?

Ersetze im Template "memberlist"
Code:
    <td class="tcat"><strong><label for="website">{$lang->website}</label></strong></td>
durch
Code:
    <td class="tcat"><strong><label for="name_userfield">Name Profilfeld</label></strong></td>

Ersetze
Code:
        <input type="text" class="textbox" name="website" id="website" style="width: 99%; margin-top: 4px;" value="{$search_website}" />
durch
Code:
        <input type="text" class="textbox" name="name_userfield" id="website" style="width: 99%; margin-top: 4px;" value="{$search_name_userfield}" />
Zitieren
#12
Hallo,

ich wollte die selbe Funktionalität in meinem Forum haben, da einige User danach gefragt haben.

Der Ansatz von linwinman ist schon einmal sehr gut, weißt aber Schwächen auf. Zum Beispiel funktioniert die Pagination (Treffer auf mehrere Seiten verteilen) nicht, wenn man nach Profilfeldern sucht und zum anderen ist es etwas nervig bei jeden neuen Profilfeld, welches man durchsuchen will die memberlist.php erneut zu bearbeiten. Außerdem gab es falsche Treffer, wenn man die Suche nach einem Profilfeld mit anderen Fakten (z.B. "Benutzername enthält") kombinierte.

Nach einigen Testen verwende ich nun folgendes:

memberlist.php
Suchen nach (Zeile ~184):
PHP-Code:
    $query $db->simple_select("users u""COUNT(*) AS users""{$search_query}");
    
$num_users $db->fetch_field($query"users"); 

Ersetzen durch:
PHP-Code:
    $query $db->query("
        SHOW FULL COLUMNS
        FROM "
.TABLE_PREFIX."userfields
    "
);
    
$columns 1;
    while(
$rows $db->fetch_array($query))
    {
        if(
trim($mybb->input['fid'.$columns]))
        {
            
$search_query .= " AND f.fid".$columns." LIKE '%".$db->escape_string_like($mybb->input['fid'.$columns])."%'";
            
$search_url .= "&fid".$columns."=".urlencode($mybb->input['fid'.$columns]);
        }
    
$columns++;
    }
    
$query $db->query("
        SELECT COUNT(*) AS users
        FROM "
.TABLE_PREFIX."users u
        LEFT JOIN "
.TABLE_PREFIX."userfields f ON (f.ufid=u.uid)
        WHERE 
{$search_query}
    "
);
    
$num_users $db->fetch_field($query"users"); 

Damit funktioniert auch wieder die Pagination und die Treffer stimmen zu 100% (auch bei Suchkombinationen).
Aber der größte Vorteil ist, dass nun alle Profilfelder durchsucht werden können, ohne dass man die memberlist.php noch einmal anfassen muss.

In das Template memberlist_search kann man nun je nach Profilfeld, welches man durchsuchen lassen möchte diesen Code einsetzen:

Code:
<tr>
    <td class="trow2" width="20%"><strong><label for="fid1">Location</label></strong></td>
    <td class="trow2">
        <input type="text" class="textbox" name="fid1" id="fid1" />
    </td>
</tr>

Wichtig hierbei ist, dass "label for", "name" und "id" nach dem Muster fidX (X = ID des Profilfeldes) benannt werden müssen! In dem Beispiel oben habe das bereit umgesetzt.

Natürlich können auch Dropdown-Felder verwendet werden. Hier am Beispiel vom Geschlecht:

Code:
<tr>
    <td class="trow2" width="20%"><strong>Sex</strong></td>
    <td class="trow2">
        <select name="fid3">
            <option value=""></option>
            <option value="Undisclosed">Undisclosed</option>
            <option value="Male">Male</option>
            <option value="Female">Female</option>
            <option value="Other">Other</option>
        </select>
    </td>
</tr>

Wie man sieht, gibt es bei diesen Beispiel kein "label for" und "id". Wird auch bei Dropdown-Feldern nicht benötigt. Hauptsache "name" enthällt immer fidX!

Ich hoffe die Beispiele waren anschaulich.

Wenn frostschutz mit seinem Plugin fertig ist, um Diffdateien auf MyBB anwenden zu können, werde ich auch eine Diffdatei für die memberlist.php erstellen. Smile

ACHTUNG: Nicht meine Änderungen UND die von linwinman durchführen! Es kann nur eine Modifikation verwendet werden!!!
Zitieren
#13
Gibt es hier schon was Neues?
Zitieren
#14
(04.12.2009, 17:41)darkon schrieb: Gibt es hier schon was Neues?

Hallo darkon und willkommen. Was meinst du mit neues? Das Problem ist bereits gelöst.
Zitieren
#15
Blush Ich hatte das so verstanden, daß einer von euch seine Idee praktisch als Mod verpackt...

Na dann werde ich mich die Tage mal ans Basteln machen, in der Hoffnung es hin zu bekommen. Big Grin
Zitieren
#16
Das kann man nicht als Plugin umsetzen...
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#17
Ich denke, er meint...

(08.10.2009, 08:37)querschlaeger schrieb: Wenn frostschutz mit seinem Plugin fertig ist, um Diffdateien auf MyBB anwenden zu können, werde ich auch eine Diffdatei für die memberlist.php erstellen. Smile
Zitieren
#18
Wenn ich die Änderungen an der memberlist.php vornehme gibt es stets nur eine weiße Seite.

Kann das an der 1.4.10 liegen?
Zitieren
#19
Ich denke nicht. Ohne eine Fehlermeldung kann man die aber schlecht helfen.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#20
Hi,
ich habe die Änderungen ebenfalls in MyBB 1.4.10 und alles funktioniert ohne Probleme. Welches Modifikation verwendest du denn? Welchen Editor benutzt du?
Zitieren