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