26.03.2010, 16:30
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!
Bekannte Einschränkungen:
*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 ). Aber du musst trotzdem die Variable {$customfields} zum Template hinzufügen.
Lizenz: GPL
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!
- Öffne die Datei memberlist.php mit einem geeigneten Texteditor.
- 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);
}
- 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);
}
- Suche:
PHP-Code:$query = $db->simple_select("users u", "COUNT(*) AS users", "{$search_query}");
- 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}
");
- Suche:
- Gehe zum Admin CP und öffne das Template memberlist_search.
- 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>
<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>
- Ersetzte mit:
(oder füge die Variable {$customfields} wo immer du möchtest ein)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>
<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>
- Suche:
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 ). Aber du musst trotzdem die Variable {$customfields} zum Template hinzufügen.
Lizenz: GPL