intern Links automatic to Topic Title-Generator

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
mgutt
Beiträge: 25
Registriert: Fr 08.Okt, 2004 01:07

intern Links automatic to Topic Title-Generator

Beitrag von mgutt »

Hi Oxpus,

ich suche einen MOD mit dem internen Links

z.B.

http://www.meinedomain.de/viewtopic.php?t=66509 oder
http://www.meinedomain.de/viewtopic.php?p=373070#373070

In einem Beitrag automatisch in den Beitragstitel umgewandelt werden. (mit Verlinkung natürlich)
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Tjoar und bei mehreren Links im Post einen per Zufall auswählen?
Egal wie, das ist recht schwer für mich, da hier der Link in Gänze gefunden werden müsste, wo ich schon mit preg_match (die dafür nutzbare PHP-Funktion) auf Kriegsfuß stehe (verdammichte Suchmuster).
Wäre das geschafft, ist der Rest einfach: $subject = $gefundener_link und speichern (inklusive BBCode-UID für Subjekt und Umwandlung in BBCode).

Schau Dir mal meinen Topic Title as Weblink Mod an.
Damit kann man Topic-Titel als Links anlegen und muss nur die URL als Post schreiben. Der Titel ist dann der Linkname.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
mgutt
Beiträge: 25
Registriert: Fr 08.Okt, 2004 01:07

Beitrag von mgutt »

ja dafür muss man dann aber ne Datenbank anlegen mit den Links die man haben will.

Wenn mehrere drin sind (wer schreibt schon mehrmals den gleichen link in einen Post), dann werden halt alle umgesetzt. Ist doch wurscht.

Wenn dann schreibt man ja eh sowas wie:

"Guck mal hier", "Guck mal was MisterX dazu geschrieben hat" oder "Was Du suchst findest Du hier".

Und dann kommt halt nur der Titel.

Beim Burning Board habe ich das mal gesehen. Keine Ahnung ob das Standard oder ein Mod ist.

Auf jedenfall spart das den Usern bzw. Mods viel Arbeit...

Gesucht werden müssen doch "nur" die Nummern und aus der Datenbank der dazugehörige Titel oder nicht? Man könnte sich ja nur auf die "t" variable beschränken.

Das einzige was man ausklammer müsste wären URLS, die bereits von dem User mit dem [URL] Code ausgeklammert wurden...

als wenn [URL]blabla...[ /URL] dann nicht anwenden und wenn www.meinedomain.de und "t" dann titel suchen.. ersetzen und Hyperlink erstellen.

sorry hab keinen große peil, aber so müsste es doch gehen oder?
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Nochmal:
Die Kunst liegt darin, die Links, bzw. den Link erst einmal per Script zu finden!
Und wenn der Topc Titel dann ein Link ist, wie dann weiter? Wie soll der Beitrag jemals bearbeitet werden können, wenn ein Klick darauf zum Link springt?
Und den grossen Sinn darin habe ich auch noch nicht entdecken können, aus einem Post einen Link als Topic Titel (verlinkt) zu erstellen.
Der restliche Text ist ja dann "unlesbar".
Dann kannst Du auch meinen Mod gleich installieren...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
mgutt
Beiträge: 25
Registriert: Fr 08.Okt, 2004 01:07

Beitrag von mgutt »

[quote="oxpus - Do 14.Okt, 2004 17:20";p="15417"]Wie soll der Beitrag jemals bearbeitet werden können, wenn ein Klick darauf zum Link springt?[/quote]

Halt. jetzt verstehe ich was Du meinst. wir reden aneinander vorbei.

Du redest von einem Link in einem Titel. Das will ich ja gar nicht.

Es geht darum das der Link innerhalb eines Beitrages gepostet wird und dort dann nur der Topic Title des Ziels angezeigt wird.

Nochmal ein Beispiel:
MisterX schreibt:

***************************************
Titel: Suche Anleitung
***************************************

Hallo ich suche eine Anleitung zu PHP. Weiß da jemand was.

cu

***************************************
***************************************


MisterY tippt daraufhin seine Antwort ein:

***************************************

Hi,

diese Frage wurde bereits hier beantwortet:

http://www.meinedomain.de/viewtopic.php&t=500

***************************************

dann drückt MisterY auf "Absenden" und der Beitrag wird wie folgt angezeigt:

***************************************

MisterY schreibt:

***************************************

Hi,

diese Frage wurde bereits hier beantwortet:

PHP Anleitung gesucht

***************************************
Weißt jetzt was ich mein?

D.h. im Endeffekt der Code für die bbcode.php: (so ungefähr ;) )

if "http://www.meinedomain.de/viewtopic" & "t" eingegeben wurde
Nummer von "t" gleich Titel in der Datenbank
Titel darstellen mit Hyperlink

else (also wenn kein Titel unter der Nummer "t" hinterlegt ist)
so lassen wie es ist.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ach jetzt ist der Groschen gefallen!
Wenn jemand einen internen Link postet (muss dann eben eine viewforum.php oder viewtopic.php sein), dann eben den Titel anstelle des Links als Beschreibung anzeigen.
Ja, das ist dann was ganz anderes.
Hm, muss ich mal schauen, ob ich das hinbekomme.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
mgutt
Beiträge: 25
Registriert: Fr 08.Okt, 2004 01:07

Beitrag von mgutt »

ich teste freiwillig ;)
Benutzeravatar
AmigaLink
Beiträge: 5843
Registriert: Mi 03.Mär, 2004 09:05
Wohnort: NRW
Kontaktdaten:

Beitrag von AmigaLink »

Coole idee!
[center].: Web Relax .::. Essen mit Freude .::. AmigaLink.de :.
______________________________________

Kein Support per PM, ICQ oder eMail!!!
[/center]
mgutt
Beiträge: 25
Registriert: Fr 08.Okt, 2004 01:07

Beitrag von mgutt »

hi digger. haste mal ein paar minuten drüber nachgedacht ;-)
mgutt
Beiträge: 25
Registriert: Fr 08.Okt, 2004 01:07

Beitrag von mgutt »

Hi Oxpus,

ich nerve mal wieder. Aber ich bin echt geil auf diesen Mod ;)

Die Abfrage müsste ja in der bbcode.php gemacht werden, damit bei Zitaten wieder nur der "normale" Link angezeigt wird.

Wäre echt super, wenn Du das umsetzen könntest.

Gerne spende ich dann nen zwanni hier für Dich oder so. Wenn das überhaupt erwünscht ist.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ich habe dazu bislang noch keine Zeit gefunden. Sorry.
Wird aber noch. Ob dieses Jahr, ist aber fraglich, da ich arbeitstechnisch stark im Stress bin...

EDIT
Zwischendurch hab ich es immer wieder mal probiert, aber entweder fehlt mir die nötige Zeit (bislang ein Ende nicht absehbar) oder ich steig da nicht durch.
Sorry, aber ich muss diese Anfrage leider erstmal ablehnend zurückstellen.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Max
Beiträge: 628
Registriert: So 23.Jan, 2005 09:54

Beitrag von Max »

Hallo,


da ich durch Zufall heute auf dieses Thema gestoßen bin und wirklich durch Zufall bei einer anderen Suchaktion einen MOD genau für diese Funktion gefunden habe, setze ich den mal hier rein.

Code: Alles auswählen

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

Ich habe das noch nicht getestet, aber laut dem Thema, wo ich es her habe (leider war der Link grade meiner Reiterschließaktion zum Opfer gefallen) funktioniert das.



Gruß Max
Benutzeravatar
AmigaLink
Beiträge: 5843
Registriert: Mi 03.Mär, 2004 09:05
Wohnort: NRW
Kontaktdaten:

Beitrag von AmigaLink »

Fein, dann kann der Fall ja (hoffentlich) zu den Akten. :)
[center].: Web Relax .::. Essen mit Freude .::. AmigaLink.de :.
______________________________________

Kein Support per PM, ICQ oder eMail!!!
[/center]
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Und wie! Ich habe das gleich installiert und es funktioniert prächtig!!!

Wenngleich dieser Part nicht installiert werden darf

Code: Alles auswählen

# #
# #-----[ FIND ]------------------------------------------
# #
#
# if ( !defined('IN_PHPBB') )
# {
#    die("Hacking attempt");
# }
#
# #
# #-----[ AFTER, ADD ]------------------------------------------
# #
#
# include "./extension.inc";
# include "./config.".$phpEx;
# include "./includes/db.".$phpEx;
da die bbcode.php bereits includiert wird!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
AmigaLink
Beiträge: 5843
Registriert: Mi 03.Mär, 2004 09:05
Wohnort: NRW
Kontaktdaten:

Beitrag von AmigaLink »

Fein *freu*
[center].: Web Relax .::. Essen mit Freude .::. AmigaLink.de :.
______________________________________

Kein Support per PM, ICQ oder eMail!!!
[/center]
mgutt
Beiträge: 25
Registriert: Fr 08.Okt, 2004 01:07

Beitrag von mgutt »

Zuletzt geändert von mgutt am Sa 18.Jun, 2005 23:01, insgesamt 2-mal geändert.
Benutzeravatar
AmigaLink
Beiträge: 5843
Registriert: Mi 03.Mär, 2004 09:05
Wohnort: NRW
Kontaktdaten:

Beitrag von AmigaLink »

Zuletzt geändert von AmigaLink am Sa 18.Jun, 2005 23:24, insgesamt 3-mal geändert.
[center].: Web Relax .::. Essen mit Freude .::. AmigaLink.de :.
______________________________________

Kein Support per PM, ICQ oder eMail!!!
[/center]
Max
Beiträge: 628
Registriert: So 23.Jan, 2005 09:54

Beitrag von Max »

ups, schade.


Ich hatte das heute auch mal eben in mein Testboard gepackt. Da lief das auch nicht, allerdings habe ich das auf meine go.php (besserer und eigener Ersatz für safeurl) geschoben.



Gruß Max
Benutzeravatar
AmigaLink
Beiträge: 5843
Registriert: Mi 03.Mär, 2004 09:05
Wohnort: NRW
Kontaktdaten:

Beitrag von AmigaLink »

Also ich hab es jetzt mal Local bei mir getestet (glaube nicht das ich den wirklich mal einsetze) und da funktioniert es einwandfrei.
Ich denke mal oxpus hat ebenfalls nur lokal getestet. ;)

// EDIT
Ausserdem funktioniert es nur wenn man die URL nicht in einen [url]...[/url] fasst.
(Ist aber logisch, denn die neuen Funktionen werden ja nur in der function make_clickable() aufgerufen ;)).
Zuletzt geändert von AmigaLink am Sa 18.Jun, 2005 23:57, insgesamt 1-mal geändert.
[center].: Web Relax .::. Essen mit Freude .::. AmigaLink.de :.
______________________________________

Kein Support per PM, ICQ oder eMail!!!
[/center]
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ich habe in der bbcode.php die Funktionen ersetzt:

Code: Alles auswählen

function get_post_titel($id) 
{ 
    global $db;
    $sql = "SELECT t.topic_title FROM " . TOPICS_TABLE . " t, " . POSTS_TABLE . " p
    	    WHERE p.post_id = '$id'
    		AND t.topic_id = p.topic_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_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[3].$subpattern[4].$subpattern[5]; 
    $url = str_replace('</a>', '', $url);
    if($subpattern[3] == "viewtopic.php?t=") 
        $titel = get_topic_titel($subpattern[4]); 
    else if($subpattern[3] == "ftopic-") 
        $titel = get_topic_titel($subpattern[4]); 
    else if($subpattern[3] == "viewtopic.php?p=") 
        $titel = get_post_titel($subpattern[4]); 
    else if($subpattern[3] == "fpost-") 
        $titel = get_post_titel($subpattern[4]); 
    else if($subpattern[3] == "forum-") 
        $titel = get_forum_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) 
{ 
    global $board_config;
    $phpbb_url = $board_config['server_name'].$board_config['script_path']; 

    $ret = preg_replace_callback 
    ( 
	"#([\n ])([\w]+?://".$phpbb_url.")(forum-|fpost-|ftopic-|viewtopic\.php\?p=|viewtopic\.php\?t=|viewforum\.php\?f=)(\d+)(\S*)([^ \"\n\r\t<]*)#i",
	'preg_replace_callback_func_raw_url_to_url_with_titel', 
        $ret 
    );
    $ret = preg_replace_callback 
    ( 
	"#([\n ])(".$phpbb_url.")(forum-|fpost-|ftopic-|viewtopic\.php\?p=|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; 
}
und dann funktionieren das! Wobei man die Short-URL's an das eigene Board anpassen muss, wenn man diese verwendet...
Dazu könnte man Links per BBCode URL auch mit ändern, wenn man make_clickable() nach dem Encodieren der BBCodes aufruft.
Gehts da hier? Testen:

http://www.oxpus.de/viewtopic.php?t=1754

Ja, Test erfolgreich :p
Zuletzt geändert von oxpus am Fr 24.Jun, 2005 01:16, insgesamt 8-mal geändert.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Max
Beiträge: 628
Registriert: So 23.Jan, 2005 09:54

Beitrag von Max »

Bestens - funktioniert auch bei meinem Testboard.


Nun ist das eine geniale Sache :-)



Gruß Max
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Schön zu hören/lesen!
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
AmigaLink
Beiträge: 5843
Registriert: Mi 03.Mär, 2004 09:05
Wohnort: NRW
Kontaktdaten:

Beitrag von AmigaLink »

[center].: Web Relax .::. Essen mit Freude .::. AmigaLink.de :.
______________________________________

Kein Support per PM, ICQ oder eMail!!!
[/center]
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Der Bugfix ist nun auch bei mir mir drinnen.
Was dann nun nicht mehr geht, ist die Umwandlung innerhalb des BBCodes URL.
Nun ja, wer was weiß, verwendet ihn auch für interne Links nicht ;)

Vielleicht fällt Dir, AmigaLink, da noch was ein?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
AmigaLink
Beiträge: 5843
Registriert: Mi 03.Mär, 2004 09:05
Wohnort: NRW
Kontaktdaten:

Beitrag von AmigaLink »

Ähm, ging das nicht auch vorher schon innerhalb des URL-BBCodes nicht?

Hmmm - mal sehen...
[center].: Web Relax .::. Essen mit Freude .::. AmigaLink.de :.
______________________________________

Kein Support per PM, ICQ oder eMail!!!
[/center]
Antworten