Seite 1 von 3

GeSHi in phpBB3 (3.0.1) einbinden

Verfasst: 24.04.2008 21:21
von nebler
Randbemerkung:
Ein Freund und ich haben mal nach einem Syntax-Highlighter gesucht für das neue phpBB3 Board, allerdings nichts gefunden. Dadurch hab ich zwei Dateien angepasst bzw. modifziert, was dazu führt das GeSHi verwendet wird zum Highlighting. Wurde nur kurz getestet ob es geht ... daher wenn Fehler auftauchen, kann passieren :) Und ist eventuell nicht sehr schön gecodet, allerings irgendwo im Script von phpBB gefunden: "Not the english way" :). Die Modifizierung betrifft nur das System/Backend und nicht das Eingabeformular/Frontend.

Aber nun hier meine Beschreibung wie ich das gemacht habe
-----------------------------------------------------------------------
Informationen:
Dieser MOD erlaubt es das Code-Highlighting komplett von GeSHi übernehmen zu lassen.
Allerdings wird das im Script hinterlegt und keine Modifikation am Eingabeformular eines Beitrages bewerkstelligt.

Erkennt GeSHi die Programmiersprache nicht, wird der Code als normaler Text in der Codebox dargestellt.

Beispiele: (ohne Leerzeichen dann bitte ...)
[ code=java ] System.out.println('hello world'); [ /code ]
[ code=php ] <?php echo 'hello world'; ?> [ /code ]

Vorrausetzungen:
  1. fehlerfreie Installation von phpBB3 (getestet mit 3.0.1)
  2. GeSHi Packet von http://qbnz.com/highlighter/ unter ./{FORUM_ROOT}/includes/geshi/ entpackt,
    dass folgende Dateistruktur sich wiederspiegelt:
    • ./{FORUM_ROOT}/includes/geshi/geshi.php
    • ./{FORUM_ROOT}/includes/geshi/geshi/*.*
Dateien die bearbeitet werden müssen:
  1. ./{FORUM_ROOT}/includes/bbcode.php
  2. ./{FORUM_ROOT}/includes/message_parser.php
Anmerkung:
Pfad zu GeSHi kann an angegebener Stelle (im Script) angepasst werden zu GeSHi relativ zum {FORUM_ROOT} oder den absoluten Pfad angeben! (untested)

Schritt 1:
  • Öffne die Datei ./{FORUM_ROOT}/includes/bbcode.php
  • Suche die Funktion: bbcode_second_pass_code
  • Ersetzte die Funktion mit folgendem Code (Orginal Code wurde gelöscht)

    Code: Alles auswählen

    	/**
    	* Second parse code tag
    	*/
    	function bbcode_second_pass_code($type, $code)
    	{
    		// when using the /e modifier, preg_replace slashes double-quotes but does not
    		// seem to slash anything else
    		$code = str_replace('\"', '"', $code);
    
    // ------------------------------------------------------------------------------------
    		// edited by jb (nebler.org)
    		// including geshi
    		
    		// geshipfad, relativ zum haupt-ordner (oder absolut (untested))
    		$geshi_path = './includes/geshi/geshi.php'; 
    
    		if( !include_once( $geshi_path ) ) { // include = zur laufzeit, requier zum start
    			echo 'geshi konnte nicht eingebunden werden!';
    		} else {	
    			// Es kommt nicht ursprünglicher Code an ...
    			// hier die rückformatierung, vllt nicht schön aber selten ;)
    			// Not the english way ... steht irgendwo im quellcode :)
    			$astr_to = array('<', '>', '[', ']', '.', ':','"');
    			$astr_from = array('<', '>', '[', ']', '.', ':','"');
    
    			$code = str_replace($astr_from, $astr_to, $code);
    
    			// binde geshi ein, siehe geshi-faq
    			// geshi Objekt erzeugen und code erzeuegn	
    			$geshi = new GeSHi( $code, $type );
    			// header type setzten, siehe documentation von geshi
    			$geshi->set_header_type(GESHI_HEADER_NONE);
    			// code parsen und highlighten
    			$code = $geshi->parse_code();	
    			
    			// überflüssige <br /> entfernen
    			$code = str_replace( '<br />', '', $code );
    		
    		}
    // ------------------------------------------------------------------------------------
    
    		$code = $this->bbcode_tpl('code_open') . $code . $this->bbcode_tpl('code_close');
    
    		return $code;
    	}
  • Speichern
Schritt 2:
  • Öffne die Datei ./{FORUM_ROOT}/includes/message_parser.php
  • Suche die Funktion: bbcode_parse_code
  • Ersetzte die Funktion mit folgendem Code (Orginal Code wurde gelöscht)

    Code: Alles auswählen

    	/**
    	* Parse code text from code tag
    	* @private
    	*/
    	function bbcode_parse_code($stx, &$code)
    	{
    		
    // ------------------------------------------------------------------------------------
    		// edited by jb (nebler.org)
    		// includes geshi mod		
    		if( strlen( $stx ) > 0 ) {
    			return "[code=$stx:" . $this->bbcode_uid . ']' . $code . '[/code:' . $this->bbcode_uid . ']';
    		} else {
    			return '[code:' . $this->bbcode_uid . ']' . $this->bbcode_specialchars($code) . '[/code:' . $this->bbcode_uid . ']';
    		}
    // ------------------------------------------------------------------------------------
    
    	}
  • Speichern
Schritt 3:
  • Modifizierte Dateien hochladen
  • Viel Spaß damit ;)

Verfasst: 17.05.2008 19:40
von DoctorUltra
Da könnte man doch einen fertigen Mod machen oder?

Vielleicht sogar diesen Mod weiter entwickeln

Mod

Verfasst: 19.05.2008 15:31
von DoctorUltra
Habe es gerade mal eingebaut, super!!

Wie kann ich eine Aufklappfunktion einbauen, so ähnlich wie bei dem Mod von phpbb.com???

Verfasst: 21.05.2008 14:14
von DoctorUltra
In Verbindung mit dem Bug Tracker Mod kommt folgende Fehlermeldung

Code: Alles auswählen

[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 568: bbcode::include_once(./includes/geshi/geshi.php) [function.bbcode-include-once]: failed to open stream: No such file or directory
[phpBB Debug] PHP Notice: in file /includes/bbcode.php on line 568: bbcode::include_once() [function.include]: Failed opening './includes/geshi/geshi.php' for inclusion (include_path='.;/xampp/php/pear/')
geshi konnte nicht eingebunden werden![phpBB Debug] PHP Notice: in file /includes/functions.php on line 3621: Cannot modify header information - headers already sent by (output started at /includes/functions.php:2956)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3623: Cannot modify header information - headers already sent by (output started at /includes/functions.php:2956)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3624: Cannot modify header information - headers already sent by (output started at /includes/functions.php:2956)
[phpBB Debug] PHP Notice: in file /includes/functions.php on line 3625: Cannot modify header information - headers already sent by (output started at /includes/functions.php:2956)

Verfasst: 21.05.2008 14:17
von nickvergessen
finde:

Code: Alles auswählen

$geshi_path = './includes/geshi/geshi.php';
ersetze mit:

Code: Alles auswählen

$geshi_path = $phpbb_root_path . 'includes/geshi/geshi.php';
(ungetestet)

Verfasst: 21.05.2008 15:00
von DoctorUltra
ne klappt leider nicht im normalen Postbereich klappt alles ohne Probleme nur beim Bugtracker gibt es Probleme?

Verfasst: 21.05.2008 15:04
von nickvergessen
füg mal nach

Code: Alles auswählen

function bbcode_second_pass_code($type, $code)
{
noch

Code: Alles auswählen

global $phpbb_root_path;
ein

Verfasst: 21.05.2008 17:53
von Boecki91
Ich wollte nur Anmerken das ich gerade zusammen mit jemand anderem, einen Mod entwickeln der das gleiche kann, allerdings voll konfigurierbar über das ACP, eventuell besteht Intresse eurer Seits euch bei uns einzuklinken.

Bring doch nichts 2 Mods zu haben die das selbe machen. :wink:

Verfasst: 27.05.2008 19:16
von cin-andy
@dgroeser: Ich habe genau den selben Fehler gemacht wie du ;) Du musst dir die Funktionen schon genau anschauen. Wenn du die richtige Funktion findest, dann klappt das auch. Zuerst hatte ich die erste Funktion genommen, dann kam dieser Fehler und darauf schaute ich es mir genauer an und fand, dass ich die falsche Funktion ersetzt hatte. Also noch einmal genauer schauen, dann sollte es klappen ;)

Verfasst: 28.05.2008 09:16
von DoctorUltra
Ich habe noch mal alles überprüft, habe alles richtig gemacht, außerdem funktioniert es doch, nur in Verbindung mit dem Bugtracker nicht?