[SUCHE] Username -> Profil im Beitrag

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 entwicklen, geht's in phpBB 2.0: Mods in Entwicklung weiter.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
Eclipse16V
Mitglied
Beiträge: 576
Registriert: 27.11.2002 17:04
Wohnort: Gießen
Kontaktdaten:

Beitrag von Eclipse16V »

Also ich bekomme diese Fehlermeldung:

Code: Alles auswählen

Fatal error: Call to a member function on a non-object in /home/www/web8/html/phpBB2/includes/functions_post.php on line 246
www.Eclipse16V.de
Erste Eclipse16V IG Deutschlands
makue
Mitglied
Beiträge: 282
Registriert: 18.07.2002 07:58
Wohnort: Böblingen
Kontaktdaten:

Beitrag von makue »

Also, da muss ich wohl ein einfügen irgendwo ein Sytax-Fehler eingeschlichen haben. Ich wollte gerade den Code nocheinmal direkt aus meinen Dateien rauskopieren und hier posten, habe aber bemerkt, dass das entfernen des Link-Codes beim editieren des Postings nicht mehr funktioniert, obwohl ich das aber getestet habe. Ich schaue mir das also noch einmal ganz genau an und poste dann noch einmal den korrekten Code. Bitte etwas Geduld.
makue
Mitglied
Beiträge: 282
Registriert: 18.07.2002 07:58
Wohnort: Böblingen
Kontaktdaten:

Beitrag von makue »

So, da bin ich auch schon wieder. Wo der Syntaxfehler herkommt weiß ich nicht, den gab es ja bei mir nicht. Aber warum das plötzlich nicht mehr funktionierte war in der Beschreibung die Angabe "danach einfügen" statt "davor einfügen". Uas diesem Grund poste ich nun einfach mal die 2 Codeteile in den Dateien, mit einigen Zeilen davor und danach. Dann sieht man genau wo der Code reingehört.

posting.php

Code: Alles auswählen

    if ( $post_info['bbcode_uid'] != '' )
    {
      $message = preg_replace('/\:(([a-z0-9]:)?)' . $post_info['bbcode_uid'] . '/s', '', $message);
    }

    // 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

    $message = str_replace('<', '<', $message);
    $message = str_replace('>', '>', $message);
    $message = str_replace('<br />', "\n", $message);
    
    if ( $mode == 'quote' )
    {
      $orig_word = array();
      $replacement_word = array();
includes/functions_post.php

Code: Alles auswählen

      else if ( count($poll_options) > $board_config['max_poll_options'] ) 
      {
        $error_msg .= ( !empty($error_msg) ) ? '<br />' . $lang['To_many_poll_options'] : $lang['To_many_poll_options'];
      }
      else if ( $poll_title == '' )
      {
        $error_msg .= ( !empty($error_msg) ) ? '<br />' . $lang['Empty_poll_title'] : $lang['Empty_poll_title'];
      }
    }
  }
  // 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 
  return;
}

//
// Post a new topic/reply/poll or edit existing post/poll
//
function submit_post($mode, &$post_data, &$message, &$meta, &$forum_id, &$topic_id, &$post_id, &$poll_id, &$topic_type, &$bbcode_on, &$html_on, &$smilies_on, &$attach_sig, &$bbcode_uid, &$post_username, &$post_subject, &$post_message, &$poll_title, &$poll_options, &$poll_length, &$MsgIcon)
{
Ich habe den Code jetzt eben direkt hier aus dem Posting kopiert und an die entsprechenden Stellen eingefügt, es funktioniert definitiv. Teste das doch bitte noch einmal. Leider kann man mit der Fehlermeldung nichts anfangen, da die total sinnlos ist. Aber darüber habe ich mich auch schon mehr als einmal geärgert. Irgendwo im Code ein Zeichen zuviel oder zu wenig und schon kann so eine Fehlermeldung entstehen.
Benutzeravatar
Fabse
Mitglied
Beiträge: 1401
Registriert: 02.06.2003 15:10
Wohnort: Klagenfurt
Kontaktdaten:

Beitrag von Fabse »

Tuxman hat geschrieben:Ich war schon am Basteln, aber leider hab ich im Moment keinen PC... bin mal auf deine Lösung gespannt, makue. :)
WOW! Wie geht man ohne PC ins Netz? :D
Benutzeravatar
Eclipse16V
Mitglied
Beiträge: 576
Registriert: 27.11.2002 17:04
Wohnort: Gießen
Kontaktdaten:

Beitrag von Eclipse16V »

www.Eclipse16V.de
Erste Eclipse16V IG Deutschlands
makue
Mitglied
Beiträge: 282
Registriert: 18.07.2002 07:58
Wohnort: Böblingen
Kontaktdaten:

Beitrag von makue »

Das ist mir gerade wieder eingefallen, hatte ich total vergessen. Also das fehlt bei Dir schon mal. Ich weiß allerdings nicht ob das den Fehler verursacht. Der Code selbst scheint korrekt an den richtigen Stellen eingefügt zu sein. Also hoffe ich mal auf diese global-Definition.
makue hat geschrieben: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.
In Deinem Code ist es in Zeile 126, aus

Code: Alles auswählen

global $board_config, $userdata, $lang, $phpEx, $phpbb_root_path;
einfach

Code: Alles auswählen

global $board_config, $userdata, $lang, $phpEx, $phpbb_root_path, $db;
machen. Und hoffen...
Benutzeravatar
Fabse
Mitglied
Beiträge: 1401
Registriert: 02.06.2003 15:10
Wohnort: Klagenfurt
Kontaktdaten:

Beitrag von Fabse »

ja
makue
Mitglied
Beiträge: 282
Registriert: 18.07.2002 07:58
Wohnort: Böblingen
Kontaktdaten:

Beitrag von makue »

Wie ich im eigenen Board festgestellt habe, taugt der Code so nichts. Es werden auch Teilzeichenketten als Usernamen erkannt. Wenn es z.B. den User ulli gibt, wird aus Pulli ein P mit einem nachfolgendem ulli-Link. Also das ist dann doch nicht das gelbe vom Ei.

Man könnte die eine fehlerhafte Zeile in der functions_post.php durch diese hier ersetzen: $words = split("[/.,!?\ ]",$message);

In der alten Zeile habe ich zuviel "escaped". Aber auch mit dieser Änderung funktioniert das nur solange der Username einmal im Text vorkommt. Außerdem wird beim Editieren eines Postings mit zwei Usernamen der ganze Text zwischen den beiden Usernamen gelöscht. Ich weiß zwar woran es liegt, aber nicht, wie ich das auf die Schnelle beheben kann. Vielleicht kann ja jemand der sich mit preg_replace und regulären Ausdrücken richtig auskennt, weiterhelfen. Der Fehler liegt hier:

Code: Alles auswählen

$message = ereg_replace($word,"<a class=\"gen\" href=\"profile.".$phpEx."?mode=viewprofile&u=".$row["user_id"]."\" target=\"_blank\">".$word."</a >",$message); 
Man dürfte $word nur ersetzen, wenn ein Satzzeichen oder ein Leerzeichen davor und dahinter steht.

Und der Editierfehler (löschen von Zeichen zwischen 2 Usernamen) liegt hier:

Code: Alles auswählen

$message = preg_replace("/<a class=\"gen\" href=\"profile\.php\?mode=viewprofile&u=.+\" target=\"_blank\">/","", $message); 
Falls es kein andere korrigiert, mache ich mal morgen an eine Lösung. Ich muss jetzt leider weg...
makue
Mitglied
Beiträge: 282
Registriert: 18.07.2002 07:58
Wohnort: Böblingen
Kontaktdaten:

Beitrag von makue »

Also, ich habe jetzt eine BBCode-Version. Ich sage jetzt mal noch nicht das sie funktioniert, obwohl sie das tut! :wink: Aber wie es ja immer so ist, wenn man sich sicher ist es geht, sind viele Fehler drin.

Das Prinzip arbeitet so, dass man [user]username[/user] eingeben muss. Das ist zwar etwas mehr Aufwand, dafür schnell und ohne Belastung der Datenbank. Jetzt weiß ich gar nicht ob eine solche Lösung gewünscht war, deshalb poste ich das hier erst einmal nicht. Ich kann das aber jederzeit tun.

Was noch nicht drin ist und es ist fraglich ob es sinnvoll ist, ist, dass die Usernamen auf Gültigkeit abgetestet werden. Man müsste es eigentlich beim Anzeigen des Postings abtesten, weil der User ja beim Erstellen des Postings noch hätte eingetragen sein können, beim lesen des Postings aber nicht mehr. Es ist nun Geschmackssache ob man das Einbaut oder eine Fehlermeldung akzeptiert, dass der User nicht in der Liste steht, wenn man auf diesen Link klickt.

Btw, ich hatte vorher schon einmal die viewprofile.php modifiziert, dass sie nicht nur mit der user_id, sondern auch mit dem Usernamen aufgerufen werden kann. (Habe ich für ein Chat-Mod gebraucht, damit im Chat-Applet von einem User der nicht mit diesem Applet online ist, aber im Board Mitglied ist, das Profil angezeigt werden kann) Das habe ich nun auch bei dieser Modifikation benutzt.

Insgesamt müsste man also für diese BBCode Sache mit dem Profil 3 Dateien editieren. Das Ganze dürfte recht einfach sein.
Antworten

Zurück zu „phpBB 2.0: Mod Suche/Anfragen“