php tut für c/c++ umsteiger
-
hab ich das richtig verstanden?:
du willst wenn jemand einen linkt zu einen thread im forum macht, das der link dann den titel des topics hat?
-
ja
-
Dann müsstest du halt im Post nach der URL (hier: http://www.phpbb.com/phpBB/viewtopic.php)) suchen und anhand dessen die Topic-ID ermittel. Dann aus der DB den zugehörigen Titel auslesen und fertig
-
Original erstellt von <phpbb'ler>:
das ist doch easy, man muss nur die richtige stelle im code findengefunden
function make_clickable($text) { // ... }
Original erstellt von flenders:
Dann müsstest du halt im Post nach der URL (hier: http://www.phpbb.com/phpBB/viewtopic.php)) suchen und anhand dessen die Topic-ID ermittel. Dann aus der DB den zugehörigen Titel auslesen und fertigdanke für tipp
wenn ich nicht weiter komme frage ich[ Dieser Beitrag wurde am 09.03.2003 um 18:43 Uhr von Dimah editiert. ]
-
also ich bin noch nicht ganz sicher bei Regex sachen, womit testet ihr?
hat jemand ein tipp wieso
"#(http://localhost/phpbb2/viewtopic.php?t=)(\d*)(\S*)#i"
diese url nicht matcht
http://localhost/phpbb2/viewtopic.php?t=3&start=0&postdays=0&postorder=asc&highlight=
-
So wie es aussieht verwendest du preg_match, oder? (also nicht ereg)
Aber was sollen diese # an Anfang und Ende bedeuten, sowie das i ganz am Ende[ Dieser Beitrag wurde am 09.03.2003 um 21:19 Uhr von flenders editiert. ]
-
Original erstellt von flenders:
**So wie es aussieht verwendest du preg_match, oder? (also nicht ereg)
Aber was sollen diese # an Anfang und Ende bedeuten, sowie das i ganz am Ende
**jup preg_match http://tut.php-q.net/regex.html
das # ist der delimiter
http://tut.php-q.net/regex.html#u2
Der Delimiter gibt das Trennzeichen an von der der Regex von den Modifiers getrennt werden. Dieses Trennzeichen muss ein nicht Alphanumerisches-Zeichen sein, darf also kein Buchstabe und keine Zahl sein. Man benutzt z.B. die Zeichen # und die in Perl üblichen zeichen /. Man sollte ein Delimiter wählen, den man nicht im Regex benutzt, da man sonst dieses Zeichen im eigentlichem Regex escapen muss.i (case-insensitiv)ist ein modifizierer http://tut.php-q.net/regex.html#u5
Delimiter + Regex + Delimiter [+ Modifiers]
soll ich die ereg regexp nutzen?
[ Dieser Beitrag wurde am 09.03.2003 um 22:05 Uhr von Dimah editiert. ]
-
nein ereg ist veraltet und langsam
-
habe es jetzt getryt & geerrort
habe die zwei | vergessen'#http://localhost/phpbb2/viewtopic.php?t=|\d*|\S*#i'
und ich musste statt "" '' benutzen da in "" \ zum escapen benutzen wird
[ Dieser Beitrag wurde am 09.03.2003 um 22:27 Uhr von Dimah editiert. ]
-
Ich hatte statt # bisher immer / gesehen
Die Klammern brauchst du aber doch, um die einzelnen teil-matches zu bekommen! Jetzt hast du ja ein or, oder?[ Dieser Beitrag wurde am 10.03.2003 um 13:15 Uhr von flenders editiert. ]
-
jup bin von einen fehler in nähsten gestolpert
zu zeit habe ich jetzt diesen
#(\s)(http://localhost/phpbb2/viewtopic\.php\?t=)(\d*)(\S*)([^ \"\n\r\t<]*)#i
jetzt kann ich die zahl extrahieren, nur wie bringe ich den topic titel wieder rein?
also ich könnte ne funktion schreibfunction gettopictitel($id); $ret = preg_replace("#(\s)(http://localhost/phpbb2/viewtopic\.php\?t=)(\d*)(\S*)([^ \"\n\r\t<]*)#i", '\1<a href="\2\3\4" target="_blank">' . gettopictitel('\3') . '</a>', $ret);
das geht ja schlecht, wie macht man sowas?
-
du machst eine function:
function getTopic($x) { $topic holen ... ... return $topic }
und rufst die so auf:
$ret = preg_replace("#(\s)(http://localhost/phpbb2/viewtopic\.php\?t=)(\d*)(\S*)([^ \"\n\r\t<]*)#i", '\1<a href="\2\3\4" target="_blank">' . getTopic('\3') . '</a>', $ret);
fertig
-
danke
ziemlich flexiebel dieses php[ Dieser Beitrag wurde am 10.03.2003 um 14:32 Uhr von Dimah editiert. ]
-
sicher das es so geht? ich glaube nicht, in der funktion ist $x immer noch '\3'
-
ja 100%ig. übrigens mit deinen regex wirst du nichts matchen hier der funktioniert:
$ret = preg_replace("#[url](http://localhost/phpBB2/viewtopic\.php\?t=)(\d*)(\S*)([^ \"\n\r\t<]*)[/url]#i", '<a href="\2\3\4" target="_blank">' . gettopictitel('\2') . '</a>', $ret);
-
übrigens: das '\2' wird durch die topic id ersetzt (falls du es noch nicht weißt). jetzt muss du nurnoch den titel aus der db holen und fertig
-
nö
da wird '\2' an gettopictitel übergeben, das ergebnis von gettopictitel wir mit den rest string verknüpft und an preg_replace übergeben.
und erst in der funktion wird '\2' (eigentlich '\3') duch die id ersetzt
-
nein, das geht nicht. du musst den umweg mit preg_match machen.
hier der fertige code:
make_clickable()//matches ?t=xxx if (preg_match("#[url](http://localhost/phpBB2/viewtopic\.php\?t=)(\d*)(\S*)([^ \"\n\r\t<]*)[/url]#i", $ret,$matches)) { $ret = preg_replace("#[url](http://localhost/phpBB2/viewtopic\.php\?t=)(\d*)(\S*)([^ \"\n\r\t<]*)[/url]#i", "<a href=".$matches[1].$matches[2].$matches[3].">".gettopictitel($matches[2])."</a>", $ret); }
gettopictitel:
$phpbb_root_path = "../"; // da event. anpassen include $phpbb_root_path."extension.inc"; include $phpbb_root_path."config.".$phpEx; include $phpbb_root_path."includes/db.".$phpEx; $sql = "SELECT topic_title FROM " . TOPICS_TABLE . " t WHERE topic_id = '$x'"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Could not get title information", '', __LINE__, __FILE__, $sql); } $titel = $db->sql_fetchfield(0,0); return $titel;
gruß
Michi[ Dieser Beitrag wurde am 10.03.2003 um 17:44 Uhr von Michi_M editiert. ]
[ Dieser Beitrag wurde am 10.03.2003 um 17:44 Uhr von Michi_M editiert. ]
-
Danke,
habe mich schon gefagt woher das db kommtdu schreibst
$sql = "SELECT topic_title FROM " . TOPICS_TABLE . " t WHERE topic_id = '$x'";
sollte das nicht ehr
$sql = "SELECT topic_title FROM " . TOPICS_TABLE . " t WHERE topic_id = " . $x;
?
und ich krige aus der zeile
if ( !($result = $db->sql_query($sql)) )
Fatal error: Call to a member function on a non-object in C:\WAMP\Root\phpBB2\includes\bbcode.php on line 623
hilfe
-
1. Wenn du in PHP "" verwendest kannst du Variablen-Namen darin direkt verwenden, also z.B. echo "Name: $name";
Außerdem würde ich für die DB-Abfrage den Inhalt schon in '' einschließen - ist sicherer
2. Er hat sich wohl ein DB-Objekt erstellt