Usernamen hervorheben

Du suchst einen bestimmten Mod, weißt aber nicht genau wo bzw. ob er überhaupt existiert? Wenn dir dieser Artikel nicht weiterhilft, kannst du hier den von dir gewünschten/gesuchten Mod beschreiben ...
Falls ein Mod-Autor eine der Anfragen hier aufnimmt, um einen neuen Mod zu entwickeln, geht's in [3.0.x] Mods in Entwicklung weiter.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
Benutzeravatar
nippelgate
Mitglied
Beiträge: 5
Registriert: 29.04.2008 22:18

Usernamen hervorheben

Beitrag 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
Bycoja
Mitglied
Beiträge: 97
Registriert: 22.04.2008 15:57

Beitrag von Bycoja »

Öffne viewtopic.php

---- Finde: ----

Code: Alles auswählen

'MESSAGE'			=> $message,
---- Ersetzen mit: ----

Code: Alles auswählen

'MESSAGE'			=> highlight_users($message),
---- Finde: -----

Code: Alles auswählen

unset($rowset, $user_cache);
---- 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;
}
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Beitrag 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:

Code: Alles auswählen

	$text = highlight_users_and_groups($text);
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.
kein Support per PN
Benutzeravatar
tas2580
Ehemaliges Teammitglied
Beiträge: 3029
Registriert: 01.07.2004 05:42
Wohnort: /home/tas2580
Kontaktdaten:

Beitrag 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.
Heute ist ein guter Tag um dein Forum zu testen.
Ehemaliger Benutzername: [BTK] Tobi
Benutzeravatar
nippelgate
Mitglied
Beiträge: 5
Registriert: 29.04.2008 22:18

Beitrag von nippelgate »

@Bycoja: Vielen Dank! genau was ich gesucht habe...

@[BTK] Tobi: diese namen sollten aber auch nicht alzu oft vorkommen :roll:
Benutzeravatar
nippelgate
Mitglied
Beiträge: 5
Registriert: 29.04.2008 22:18

Beitrag 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
Antworten

Zurück zu „[3.0.x] Mod Suche/Anfragen“