Seite 1 von 1
Usernamen hervorheben
Verfasst: 29.04.2008 22:23
von nippelgate
Hallo,
ich hoffe hier bin ich im richtigen Forum für folgendes Anliegen:
Ist es möglich, dass wenn in Beiträgen ein username erwähnt wird diesen farblich herauszuheben bzw eine extra css-klasse zuzuweisen?
Mit BB-Code komm ich da ja nicht weiter

zumindest nicht automatisiert.
würde mich über lösungsanzätze freuen.
Vielen Dank
edit: misst, auch noch ins falsche forum gerutscht... bitte nach phpBB 3.0: MOD Suche/Anfragen verschieben
Verfasst: 30.04.2008 15:03
von Bycoja
Öffne viewtopic.php
---- Finde: ----
---- Ersetzen mit: ----
---- Finde: -----
---- Danach einfügen: ----
Code: Alles auswählen
function highlight_users($message)
{
global $db, $phpEx, $phpbb_root_path;
$sql = 'SELECT *
FROM ' . USERS_TABLE . '
WHERE user_id != ' . ANONYMOUS;
$result = $db->sql_query($sql);
while ($user_row = $db->sql_fetchrow($result))
{
$poster_id = $user_row['user_id'] ;
$profile_url = append_sid("{$phpbb_root_path}memberlist.$phpEx", "mode=viewprofile&u=$poster_id");
$pattern = '#\b' . $user_row['username'] . '\b#i';
$replacement = '<a href="' . $profile_url . '" class="highlight_user">' . $user_row['username'] . '</a>';
$message = preg_replace($pattern, $replacement, $message);
}
return $message;
}
Jeder Benutzername in einem Beitrag wird jetzt automatisch zum Profil verlinkt und mit der Klasse .highlight_user versehen, sodass du in der common.css deines Styles z.B. z.B. das verwenden kannst, um die Benutzernamen hervorzuheben:
Code: Alles auswählen
.highlight_user {
border-bottom: 1px dashed #000;
}
.highlight_user:hover {
text-decoration: none;
}
Verfasst: 30.04.2008 16:09
von nickvergessen
Habs ähnlich mit Namen und Gruppen
Außerdem wird überall hervorgehoben, wo zensiert wird.
includes/functions_content.php
finde:
Code: Alles auswählen
/**
* For display of custom parsed text on user-facing pages
* Expects $text to be the value directly from the database (stored value)
*/
davor einfügen
Code: Alles auswählen
function highlight_users_and_groups($message)
{
global $db, $phpEx, $phpbb_root_path, $user;
$sql = 'SELECT user_type, username, user_id, user_colour
FROM ' . USERS_TABLE;
$result = $db->sql_query($sql);
while ($user_row = $db->sql_fetchrow($result))
{
$username_replace['match'][] = '#(?<!\w)(' . str_replace('\*', '\w*?', preg_quote($user_row['username'], '#')) . ')(?!\w)#i';
$username_replace['replace'][] = get_username_string((($user_row['user_type'] == USER_IGNORE) ? 'no_profile' : 'full'), $user_row['user_id'], $user_row['username'], $user_row['user_colour']);
}
$sql = 'SELECT g.group_type, g.group_name, g.group_id, g.group_colour, ug.user_id
FROM ' . GROUPS_TABLE . ' AS g
LEFT JOIN ' . USER_GROUP_TABLE . ' AS ug
ON g.group_id = ug.group_id
AND ug.user_id = ' . $user->data['user_id'] . '
AND ug.user_pending = 0';
$result = $db->sql_query($sql);
while ($user_row = $db->sql_fetchrow($result))
{
if (($user_row['group_type'] != GROUP_HIDDEN) || ($user->data['user_id'] == $user_row['user_id']))
$username_replace['match'][] = '#(?<!\w)(' . str_replace('\*', '\w*?', preg_quote((($user_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $user_row['group_name']] : $user_row['group_name']), '#')) . ')(?!\w)#i';
$link = append_sid("{$phpbb_root_path}memberlist.$phpEx", "mode=group&g={$user_row['group_id']}");
$name = (($user_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $user_row['group_name']] : $user_row['group_name']);
if ($user_row['group_colour'])
{
$colour = get_username_string('colour', $user_row['group_id'], $user_row['group_name'], $user_row['group_colour']);
$tpl = '<a href="' . $link . '" style="color: ' . $colour . ';" class="username-coloured">' . $name . '</a>';
}
else
{
$tpl = '<a href="' . $link . '">' . $name . '</a>';
}
$username_replace['replace'][] = $tpl;
}
$message = preg_replace($username_replace['match'], $username_replace['replace'], $message);
return $message;
}
finde:
Code: Alles auswählen
return $text;
}
/**
* custom version of nl2br which takes custom BBCodes into account
*/
davor einfügen:
Screenshoot:
http://www.flying-bits.org/gallery/imag ... mage_id=73
Versteckte Gruppen werden nur angezeigt, wenn man Mitglied ist. Es braucht allerdings 2SQL-Abfragen für jeden Beitrag oder zu zensierenden Abschnitt. dass lässt sich hoffentlich noch verbessern.
Verfasst: 30.04.2008 18:13
von tas2580
Ich hab das mal bei mir test weiße eingebaut, wenn ein User * oder style oder alt heißt macht das allerdings große Probleme.
Verfasst: 09.05.2008 14:10
von nippelgate
@Bycoja: Vielen Dank! genau was ich gesucht habe...
@[BTK] Tobi: diese namen sollten aber auch nicht alzu oft vorkommen

Verfasst: 09.05.2008 14:46
von nippelgate
ich habs jetzt versucht einzubauen und es erscheint leider eine Fehlermeldung, und zwar so etwa 100 mal steht die untereinander und die Beiträge werden nicht angezeigt (das Grundgerüßt des Themas):
Code: Alles auswählen
[phpBB Debug] PHP Notice: in file /viewtopic.php on line 1505: preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 2
da ich leider keine php-Kenntnisse habe weiß ich damit nix anzufangen... kann mir jemand helfen?
vielen Dank