MyBB.de Forum
Mitgliederliste mit Hilfe von Profilfeldern durchsuchen - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: Anpassungen (https://www.mybb.de/forum/forum-47.html)
+--- Forum: Plugin-Diskussionen (https://www.mybb.de/forum/forum-38.html)
+--- Thema: Mitgliederliste mit Hilfe von Profilfeldern durchsuchen (/thread-22190.html)

Seiten: Seiten: 1 2


Mitgliederliste mit Hilfe von Profilfeldern durchsuchen - querschlaeger - 26.03.2010

Hi,

dies ist ein Hack für die Erweiterte Mitgliedersuche. Standardmäßig kann man nicht nach Profilfeldern filtern, aber mit dieser einfachen Codemodifikation wird es möglich! Smile

  1. Öffne die Datei memberlist.php mit einem geeigneten Texteditor.
    1. Suche:
      PHP-Code:
      // Showing advanced search page?
      if($mybb->input['action'] == "search")
      {
          eval(
      "\$search_page = \"".$templates->get("memberlist_search")."\";");
          
      $plugins->run_hooks("memberlist_search");
          
      output_page($search_page);    


    2. Ersetze mit:
      PHP-Code:
      // Showing advanced search page?
      if($mybb->input['action'] == "search")
      {
          
      $altbg "trow2";
          
      $query $db->simple_select("profilefields""*""type!='checkbox' AND type!='multiselect' AND type!='textarea' AND editable=1 AND hidden=0", array('order_by' => 'disporder'));
          while(
      $profilefield $db->fetch_array($query))
          {
              
      $profilefield['type'] = htmlspecialchars_uni($profilefield['type']);
              
      $thing explode("\n"$profilefield['type'], "2");
              
      $type $thing[0];
              
      $options $thing[1];
              
      $field "fid{$profilefield['fid']}";
              
      $select '<option value=""></option>';
              
      $userfield $user[$field];
              if(
      $type == "select")
              {
                  
      $expoptions explode("\n"$options);
                  if(
      is_array($expoptions))
                  {
                      foreach(
      $expoptions as $key => $val)
                      {
                          
      $val trim($val);
                          
      $val str_replace("\n""\\n"$val);
                          
      $select .= "<option value=\"{$val}\">{$val}</option>";
                      }
                      if(!
      $profilefield['length'])
                      {
                          
      $profilefield['length'] = 1;
                      }
                      
      $code "<select id=\"{$field}\" name=\"{$field}\" size=\"{$profilefield['length']}\">{$select}</select>";
                  }
              }
              elseif(
      $type == "radio")
              {
                  
      $expoptions explode("\n"$options);
                  if(
      is_array($expoptions))
                  {
                      foreach(
      $expoptions as $key => $val)
                      {
                          
      $code .= "<input type=\"radio\" class=\"radio\" name=\"{$field}\" value=\"{$val}\" /> <span class=\"smalltext\">{$val}</span><br />";
                      }
                  }
              }
              else
              {
                  
      $maxlength "";
                  if(
      $profilefield['maxlength'] > 0)
                  {
                      
      $maxlength " maxlength=\"{$profilefield['maxlength']}\"";
                  }
                  
      $code "<input id=\"{$field}\" type=\"text\" name=\"{$field}\" class=\"textbox\" size=\"{$profilefield['length']}\"{$maxlength} value=\"\" />";
              }
              if(
      $type != "radio")
              {
                  
      $profilefield['name']="<label for=\"{$field}\">{$profilefield['name']}</label>";
              }
              
      $customfields.="<tr><td class=\"{$altbg}\"><strong>{$profilefield['name']}</strong></td><td class=\"{$altbg}\">{$code}</td></tr>";
              
      $altbg alt_trow();
              
      $code "";
              
      $select "";
              
      $val "";
              
      $options "";
              
      $expoptions "";
          }
          eval(
      "\$search_page = \"".$templates->get("memberlist_search")."\";");
          
      $plugins->run_hooks("memberlist_search");
          
      output_page($search_page);    


    3. Suche:
      PHP-Code:
          $query $db->simple_select("users u""COUNT(*) AS users""{$search_query}"); 

    4. Ersetze mit:
      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}
          "
      ); 
  2. Gehe zum Admin CP und öffne das Template memberlist_search.
    1. Suche:
      Code:
      <tr>
         <td class="trow1" style="vertical-align: top;" width="20%"><strong><label for="username">{$lang->username}</label></strong></td>
         <td class="trow1">
             <select name="username_match">
                 <option value="begins">{$lang->begins_with}</option>
                 <option value="contains">{$lang->username_contains}</option>
             </select>
             &nbsp;
             <input type="text" class="textbox" name="username" id="username" />
         </td>
      </tr>
      <tr>
         <td class="trow2" width="20%"><strong><label for="website">{$lang->search_website}</label></strong></td>
         <td class="trow2">
             <input type="text" class="textbox" name="website" id="website" />
         </td>
      </tr>

    2. Ersetzte mit:
      Code:
      <tr>
         <td class="trow1" style="vertical-align: top;" width="20%"><strong><label for="username">{$lang->username}</label></strong></td>
         <td class="trow1">
             <select name="username_match">
                 <option value="begins">{$lang->begins_with}</option>
                 <option value="contains">{$lang->username_contains}</option>
             </select>
             &nbsp;
             <input type="text" class="textbox" name="username" id="username" />
         </td>
      </tr>
      {$customfields}
      <tr>
         <td class="trow2" width="20%"><strong><label for="website">{$lang->search_website}</label></strong></td>
         <td class="trow2">
             <input type="text" class="textbox" name="website" id="website" />
         </td>
      </tr>
      (oder füge die Variable {$customfields} wo immer du möchtest ein)

Bekannte Einschränkungen:
  • Felder mit Mehrfachauswahl werden nicht unterstützt
  • Textareas werden nicht unterstützt (weil ich finde, dass es sinnlos ist, darin zu suchen)*
  • Es ist kein Plugin*

*Falls du wirklich in Textareas suchen willst, frag danach und ich werde die Modifikation veröffentlichen.

*Es existieren keine geeigneten Hooks um das ganze als Plugin zu gestalten. Natürlich könnte man den ganzen Inhalt von memberlist.php in ein Plugin packen und den Hook memberlist_start verwenden, aber das wäre der blödsinnigste Weg, den ich mir vorstellen kann...

Falls du die Codemodifikation nicht hinbekommst, kannst du auch die angehängte memberlist.php nehmen (wow, wir sind bei MyBB 1.4.11 und die Datei wurde seit 2009-01-31 nicht mehr verändert Big Grin ). Aber du musst trotzdem die Variable {$customfields} zum Template hinzufügen.

Lizenz: GPL


RE: Mitgliederliste mit Hilfe von Profilfeldern durchsuchen - paradox - 26.03.2010

querschlaeger schrieb:Falls du die Codemodifikation nicht hinbekommst, kannst du auch die angehängte memberlist.php nehmen

Warum die Arbeit machen? So ist viel einfacher Big Grin
Speziell bei mir kann ich jetzt auch nach männlich und weiblich suchen lassen.

Funktioniert einwandfrei. Besten Dank dafür Wink


RE: Mitgliederliste mit Hilfe von Profilfeldern durchsuchen - querschlaeger - 27.03.2010

(26.03.2010, 18:56)paradox schrieb: Warum die Arbeit machen? So ist viel einfacher Big Grin

Ich hätte natürlich einfach nur die Datei hier anhängen können, aber so finde ich die Änderungen etwas transparenter für jederman. Wink


RE: Mitgliederliste mit Hilfe von Profilfeldern durchsuchen - StefanT - 27.03.2010

Außerdem kann sich die Datei von Version zu Version verändern, die Anleitung dagegen müsste immer funktionieren.


RE: Mitgliederliste mit Hilfe von Profilfeldern durchsuchen - Olaf_A - 27.03.2010

@querschlaeger, vielen Dank für die ausführliche Anleitung. Ich finde sowas toll, da ich kein Freund von Plugins bin.

Ich wünschte mir, bei den Plugins würde immer so detailiert beschrieben, was geändert wird.


RE: Mitgliederliste mit Hilfe von Profilfeldern durchsuchen - falcao1010 - 18.01.2011

Ja, ich würde sehr gerne auch in Textareas suchen lassen und auch in Feldern mit Mehrfachauswahl.


RE: Mitgliederliste mit Hilfe von Profilfeldern durchsuchen - gmx - 08.06.2011

Hallo querschlaeger,

Danke für die Doku, leider bekomme ich es mit der aktuellen MyBB Version 1.6.3 nicht zum fliegen. Ich erhalte zwar die Profilfelder in der erweiterten Suche, jedoch wird mir kein Ergebnis geliefert, sondern die komplette Mitgliederliste.

Was kann bzw. was muss ich anpassen, dass es auch mit der aktuellen Version funktioniert?

Danke & Gruß
Skreboy




RE: Mitgliederliste mit Hilfe von Profilfeldern durchsuchen - Paccy - 22.01.2013

Bei 1.6.9 funktioniert es gar nicht; auch die neuen Felder erscheinen nicht. Was tun? Sad


RE: Mitgliederliste mit Hilfe von Profilfeldern durchsuchen - Jockl - 23.01.2013

Funktioniert immer noch einwandfrei. Du nutzt aber schon die "Erweiterte Suche" in der Mitgliederliste?


RE: Mitgliederliste mit Hilfe von Profilfeldern durchsuchen - Paccy - 23.01.2013

Öh, äh, wie? Was muss ich wo genau einstellen???