Hallo, Gast! (Registrieren)

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


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Mitgliederliste mit Hilfe von Profilfeldern durchsuchen
#1
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


Angehängte Dateien Thumbnail(s)
   

.php   memberlist.php (Größe: 11,72 KB / Downloads: 11)
Zitieren


Nachrichten in diesem Thema
Mitgliederliste mit Hilfe von Profilfeldern durchsuchen - von querschlaeger - 26.03.2010, 17:30

Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  PN Ordner durchsuchen ToxSox 3 1.551 04.11.2009, 22:07
Letzter Beitrag: Andii S.
  Eigene Seiten durchsuchen ows 1 1.708 11.09.2008, 15:57
Letzter Beitrag: Michael