Seite 1 von 2
[SUCHE] Username -> Profil im Beitrag
Verfasst: 02.06.2004 20:44
von Eclipse16V
Gibt es schon einen Mod der folgendes kann:
Wenn jemand einen Beitrag schreibt und in diesem Beitrag einen Usernamen von einem anderen User nennt soll es so sein das im Beitrag dieser Username automatisch mit einem Link zum UserProfil versehen wird.
Ich hoffe Ihr versteht was ich meine.
Kleines Beispiel
Vorher (jetzt):
Das ist ein Test von Eclipse16V und mal sehen ob es geht.
Nacher (mod):
Das ist ein Test von
Eclipse16V und mal sehen ob es geht.
Würde mich freuen wenn es so einen Link gibt bzw. wenn ihn jemand für mich schreiben könnte. Mache auch den Tester.
Verfasst: 02.06.2004 22:35
von shape
Ja, das ist ne geniale Idee, daran hätte ich auch Interesse.
Verfasst: 02.06.2004 23:53
von makue
Es ist natürlich blöd, wenn sich einer z.B. "ich" genannt hat. Dann ist der Text voller Profil-Links!

Ich weiß nicht ob es so ein Mod gibt, sehr kompliziert ist sowas aber nicht. Ich hatte mal sowas für Kürzel wie IMHO gemacht, wo dann per mouseover im tool tip der Klartext angezeigt wurde.
Verfasst: 03.06.2004 00:30
von Tuxman
Vielleicht als BBcode...? [User]ich[/User]...?
Werd mal schauen, vielleicht fällt mir ja was ein, falls nicht jemand schneller ist...

Verfasst: 03.06.2004 23:20
von Eclipse16V
Besten Dank schon mal an euch das Ihr euch drum kümmern wollt.
Verfasst: 04.06.2004 00:15
von makue
Also, ich habe mal eben einen Code eingebaut. in der functions_post.php muss man in der Funktion
prepare_post die Variable
$db mit bei global... aufnehmen. Dann am Ende der Funktion vor dem return folgenden Code einfügen:
Code: Alles auswählen
if (!empty($message)) {
$words = split("[/.-\,\!? ]",$message);
foreach($words as $word) {
$sql = "SELECT user_id FROM ".USERS_TABLE." WHERE username = '".$word."' LIMIT 1";
if ( !($result = $db->sql_query($sql)) )
message_die(GENERAL_ERROR, 'Cannot read userdata','',__LINE__,__FILE__,$sql);
if( $row = $db->sql_fetchrow($result) ) {
$message = ereg_replace($word,"<a href=\"profile.".$phpEx."?mode=viewprofile&u=".$row["user_id"]."\">".$word."</a>",$message);
}
}
}
Getestet habe ich es, es funktioniert. Allerings kann man das nicht so lassen, da beim editieren des Postings dann der HTML-Code drinsteht. Man muss da also noch etwas mehr Hand anlegen, dass soll erst einmal eine Anregung von mir sein. Allerdings ist das auch sehr Datenbank-intensiv, jedes Wort im Posting wird in der User-Tabelle gesucht. Irgendwelche Verzögrungen konnte ich allerdings nicht feststellen.
Nachtrag: Man könnte den Usernamen auch beim Anzeigen eines Posting auswerten, dann hätte man das HTML-Problem nicht, aber eine gehörige Datenbanklast. Ist also nicht sinnvoll. Aber man könnte das wie BBCode behandeln, nur eben, dass dieser BBCode dann beim Editieren nicht mit angezeigt wird.
Verfasst: 09.06.2004 20:17
von Eclipse16V
Gibt es schon was neues?
Verfasst: 09.06.2004 20:41
von makue
Von meiner Seite aus nicht, momentan fehlt mir etwas die Zeit. Vielleicht kann das ja ein anderer mit BBCode kombinieren. Ansonsten mache ich das auch, nur ich kann leider nicht sagen wann.
Verfasst: 10.06.2004 12:44
von Tuxman
Ich war schon am Basteln, aber leider hab ich im Moment keinen PC... bin mal auf deine Lösung gespannt, makue.

Verfasst: 10.06.2004 14:09
von makue
Na, ok, dann mal kurz und schmerzlos. Das mit dem BBCode habe ich mir gespart. 2 Dateien müssen modifiziert werden:
includes/functions_post.php
suchen:
Code: Alles auswählen
return;
}
//
// Post a new topic/reply/poll or edit existing post/poll
//
davor(!) einfügen:
Code: Alles auswählen
// add by makue 10.06.04 (Profillink für Usernamen im Posting)
if (!empty($message)) {
$words = split("[/.-\,\!? ]",$message);
foreach($words as $word) {
$word = trim($word);
if (strlen($word)>2) {
$sql = "SELECT user_id FROM ".USERS_TABLE." WHERE username = '".$word."' LIMIT 1";
if ( !($result = $db->sql_query($sql)) )
message_die(GENERAL_ERROR, 'Cannot read userdata','',__LINE__,__FILE__,$sql);
if( $row = $db->sql_fetchrow($result) ) {
$message = ereg_replace($word,"<a class=\"gen\" href=\"profile.".$phpEx."?mode=viewprofile&u=".$row["user_id"]."\" target=\"_blank\">".$word."</a >",$message);
}
}
}
}
// end of add
gemeint ist das Ende der Funktion prepare_post. Also vor dem return am Ende der Funktion einfügen.
posting.php
suchen:
Code: Alles auswählen
$message = str_replace('<', '<', $message);
$message = str_replace('>', '>', $message);
$message = str_replace('<br />', "\n", $message);
danach einfügen:
Code: Alles auswählen
// add by makue 10.06.04 (Profillink für Usernamen im Posting)
$message = preg_replace("/<a class=\"gen\" href=\"profile\.php\?mode=viewprofile&u=.+\" target=\"_blank\">/","", $message);
$message = str_replace("</a >","", $message);
// end of add
Getestet habe ich es, läuft perfekt, ich lasse das jetzt auch drin. Ich muss aber auch erwähnen, dass es bei längeren Postings beim Absenden zu einer Verzögerung kommt. Bei mir dauert es bei einem Posting mit 1000 Wörtern etwa 10 Sekunden. Ich werde das nun doch wieder rauswerfen...
Dann lieber doch ein BBCode den man per Hand einfügen muss.
Sorry, noch ein Nachtrag: Das mit der Verzögerung lag an was anderem. Also eigentlich spürt man es doch nicht.

Am besten ihr testet es selbst.