php tut für c/c++ umsteiger
-
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
-
hast du die include in der gettopictitel function?
function gettopictitel($x) { $phpbb_root_path = "c:\\www\\phpBB2\\"; 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 . " 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; }
die sql query kann man auch wie du machen, kommt aber das selbe raus.
[ Dieser Beitrag wurde am 10.03.2003 um 19:49 Uhr von Michi_M editiert. ]
-
*grussel* includes in funktionen
naja wenn ich die includes in die funktion mache dann krige ich dieWarning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 27 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 32 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
Warning: Cannot modify header information - headers already sent by (output started at C:\WAMP\Root\phpBB2\db\mysql4.php:259) in C:\WAMP\Root\phpBB2\includes\page_header.php on line 460
Warning: Cannot modify header information - headers already sent by (output started at C:\WAMP\Root\phpBB2\db\mysql4.php:259) in C:\WAMP\Root\phpBB2\includes\page_header.php on line 466
Warning: Cannot modify header information - headers already sent by (output started at C:\WAMP\Root\phpBB2\db\mysql4.php:259) in C:\WAMP\Root\phpBB2\includes\page_header.php on line 467
und
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 48 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 53 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 58 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 63 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 68 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 73 in C:\WAMP\Root\phpBB2\db\mysql4.php on line 259
-
ich habs mal verbessert:
unter
if ( !defined('IN_PHPBB') ) { die("Hacking attempt"); }
das:
$phpbb_root_path = "c:\\www\\phpBB2\\"; include $phpbb_root_path."extension.inc"; include $phpbb_root_path."config.".$phpEx; include $phpbb_root_path."includes/db.".$phpEx;
dann die gettopictitel:
function gettopictitel($x) { global $db; $sql = "SELECT topic_title FROM " . TOPICS_TABLE . " WHERE topic_id = '$x'"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Could not obtain newer/older topic information", '', __LINE__, __FILE__, $sql); } $titel = $db->sql_fetchrow(); return $titel[0]; }
Gruß
Michi
-
jupie mein erster mod, danke Michi_M & flenders ohne euch wäre das nicht möglich
//unter if ( !defined('IN_PHPBB') ) { die("Hacking attempt"); } //das: $phpbb_root_path = "./"; // <- anpassen include $phpbb_root_path."extension.inc"; include $phpbb_root_path."config.".$phpEx; include $phpbb_root_path."includes/db.".$phpEx; // über function make_clickable($text) { // pad it with a space so we can match things at the start of the 1st line. $ret = ' ' . $text; // das function get_topic_titel($x) { global $db; $sql = "SELECT topic_title FROM " . TOPICS_TABLE . " WHERE topic_id = '$x'"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Could not obtain newer/older topic information", '', __LINE__, __FILE__, $sql); } $titel = $db->sql_fetchrow(); return $titel['topic_title']; } function raw_topic_url_to_url_with_topic_titel($mat) { return $mat[1]."<a href=\"".$mat[2].$mat[3].$mat[4]."\" target=\"_blank\">".get_topic_titel($mat[3])."</a>"; } // unter function make_clickable($text) { // pad it with a space so we can match things at the start of the 1st line. $ret = ' ' . $text; // das $ret = preg_replace_callback ( "#(\s)(http://localhost/phpbb2/viewtopic\.php\?t=)(\d*)(\S*)([^ \"\n\r\t<]*)#i", 'raw_topic_url_to_url_with_topic_titel', $ret ); // hier müsste man den pattern an sein Forum anpassen // ich muss mal kucken obs eine konstante gibt die es erleichtern würde
-
Das funktioniert jetzt aber wohl nur für eine URL - denke ich
Also auch wenn mehrere URLs dieser Form enthalten sind bekommst du nur einen Treffer
-
Original erstellt von flenders:
Das funktioniert jetzt aber wohl nur für eine URL - denke ich
Also auch wenn mehrere URLs dieser Form enthalten sind bekommst du nur einen Trefferne das geht schon
mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit])
The behavior of this function is almost identical to preg_replace(), except for the fact that instead of replacement parameter, one should specify a callback that will be called and passed an array of matched elements in the subject string. The callback should return the replacement string.
preg_replace hört ja auch nicht nach den ersten treffer auf
ps. ich habe es etwas erweitert so das es jetzt auch mit foren geht
//unter if ( !defined('IN_PHPBB') ) { die("Hacking attempt"); } //das: $phpbb_root_path = "./"; // <- anpassen include $phpbb_root_path."extension.inc"; include $phpbb_root_path."config.".$phpEx; include $phpbb_root_path."includes/db.".$phpEx; // über function make_clickable($text) { // pad it with a space so we can match things at the start of the 1st line. $ret = ' ' . $text; // das function get_topic_titel($x) { global $db; $sql = "SELECT topic_title FROM " . TOPICS_TABLE . " WHERE topic_id = '$x'"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Could not obtain newer/older topic information", '', __LINE__, __FILE__, $sql); } $titel = $db->sql_fetchrow(); return $titel['topic_title']; } function get_forum_titel($x) { global $db; $sql = "SELECT forum_name FROM " . FORUMS_TABLE . " WHERE forum_id = '$x'"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Could not obtain newer/older topic information", '', __LINE__, __FILE__, $sql); } $titel = $db->sql_fetchrow(); return $titel['forum_name']; } function raw_url_to_url_with_titel($subpattern) { $url = $subpattern[2].$subpattern[3].$subpattern[4].$subpattern[5]; if($subpattern[3] == "viewtopic.php?t=") $titel = get_topic_titel($subpattern[4]); else $titel = get_forum_titel($subpattern[4]); return $subpattern[1]."<a href=\"".$url."\" target=\"_blank\">".$titel."</a>"; } // unter function make_clickable($text) { // pad it with a space so we can match things at the start of the 1st line. $ret = ' ' . $text; // das $phpbb_url = "http://localhost/phpbb2/"; // anpassen $ret = preg_replace_callback ( "#(\s)(".$phpbb_url.")(viewtopic\.php\?t=|viewforum\.php\?f=)(\d+)(\S*)([^ \"\n\r\t<]*)#i", 'raw_url_to_url_with_titel', $ret );
ich bin schon die ganze zeit auf der suche wie ich
$phpbb_root_path = "./"; // <- anpassen $phpbb_url = "http://localhost/phpbb2/"; // anpassen
automatisch bekommen kann
-
In welchem Ordner liegt denn dein Script?
-
document_root/phpbb
-
c:\wamp\root\phpbb2\include\bbcode.php
aber ich glaube $phpbb_root_path = "./"; muss ich nicht anpassen(eigentlich müsste es ../ sein, aber wahrscheinlich wird bbcode.php selber auch im phpbb2 ordner includet und von da aus ist ./ richtig),
dann bleibt noch $phpbb_url = "http://localhost/phpbb2/";[ Dieser Beitrag wurde am 11.03.2003 um 15:35 Uhr von Dimah editiert. ]
-
Probie es mal so:
$phpbb_url = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/";
-
jup hat geklapt
ps. hier ist so ein template dings bums
############################################################## ## MOD Title: Raw Url Converter ## MOD Version: 0.9 ## MOD Author: Dimah; choinka@web.de; Gerard Choinka ## MOD Description: This mod converts raw urls of topics or forums to urls with the topic or forum titel. ## ## Installation Level: easy ## Installation Time: 5 Minutes ## Files To Edit: bbcode.php ## Included Files: ############################################################## ## For Security Purposes, Please Check: http://www.phpbb.com/mods/downloads/ for the ## latest version of this MOD. Downloading this MOD from other sites could cause malicious code ## to enter into your phpBB Forum. As such, phpBB will not offer support for MOD's not offered ## in our MOD-Database, located at: http://www.phpbb.com/mods/downloads/ ############################################################## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ############################################################## ## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD ############################################################## # #-----[ OPEN ]------------------------------------------ # includes/bbcode.php # #-----[ FIND ]------------------------------------------ # if ( !defined('IN_PHPBB') ) { die("Hacking attempt"); } # #-----[ AFTER, ADD ]------------------------------------------ # include "./extension.inc"; include "./config.".$phpEx; include "./includes/db.".$phpEx; # #-----[ FIND ]------------------------------------------ # function make_clickable($text) { // pad it with a space so we can match things at the start of the 1st line. $ret = ' ' . $text; # #-----[ BEFORE, ADD ]------------------------------------------ # function get_topic_titel($id) { global $db; $sql = "SELECT topic_title FROM " . TOPICS_TABLE . " WHERE topic_id = '$id'"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Could not obtain newer/older topic information", '', __LINE__, __FILE__, $sql); } $titel = $db->sql_fetchrow(); return $titel['topic_title']; } function get_forum_titel($id) { global $db; $sql = "SELECT forum_name FROM " . FORUMS_TABLE . " WHERE forum_id = '$id'"; if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Could not obtain newer/older Forum information", '', __LINE__, __FILE__, $sql); } $titel = $db->sql_fetchrow(); return $titel['forum_name']; } function preg_replace_callback_func_raw_url_to_url_with_titel($subpattern) { $url = $subpattern[2].$subpattern[3].$subpattern[4].$subpattern[5]; if($subpattern[3] == "viewtopic.php?t=") $titel = get_topic_titel($subpattern[4]); else $titel = get_forum_titel($subpattern[4]); return $subpattern[1]."<a href=\"".$url."\" target=\"_blank\">".$titel."</a>"; } function raw_url_to_url_with_titel($ret) { $phpbb_url = "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/"; $ret = preg_replace_callback ( "#(\s)(".$phpbb_url.")(viewtopic\.php\?t=|viewforum\.php\?f=)(\d+)(\S*)([^ \"\n\r\t<]*)#i", 'preg_replace_callback_func_raw_url_to_url_with_titel', $ret ); return $ret; } # #-----[ FIND ]------------------------------------------ # function make_clickable($text) { // pad it with a space so we can match things at the start of the 1st line. $ret = ' ' . $text; # #-----[ AFTER, ADD ]------------------------------------------ # $ret = raw_url_to_url_with_titel($ret); # #-----[ SAVE/CLOSE ALL FILES ]------------------------------------------ # # EoM