GeSHi in phpBB3 (3.0.1) einbinden

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
nebler
Mitglied
Beiträge: 1
Registriert: 24.04.2008 21:15

GeSHi in phpBB3 (3.0.1) einbinden

Beitrag 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 ;)
DoctorUltra
Mitglied
Beiträge: 156
Registriert: 22.01.2008 13:35

Beitrag von DoctorUltra »

Da könnte man doch einen fertigen Mod machen oder?

Vielleicht sogar diesen Mod weiter entwickeln

Mod
DoctorUltra
Mitglied
Beiträge: 156
Registriert: 22.01.2008 13:35

Beitrag von DoctorUltra »

Habe es gerade mal eingebaut, super!!

Wie kann ich eine Aufklappfunktion einbauen, so ähnlich wie bei dem Mod von phpbb.com???
DoctorUltra
Mitglied
Beiträge: 156
Registriert: 22.01.2008 13:35

Beitrag 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)
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Beitrag 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)
kein Support per PN
DoctorUltra
Mitglied
Beiträge: 156
Registriert: 22.01.2008 13:35

Beitrag von DoctorUltra »

ne klappt leider nicht im normalen Postbereich klappt alles ohne Probleme nur beim Bugtracker gibt es Probleme?
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Beitrag 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
kein Support per PN
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag 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:
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
cin-andy
Mitglied
Beiträge: 25
Registriert: 06.02.2008 21:21

Beitrag 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 ;)
DoctorUltra
Mitglied
Beiträge: 156
Registriert: 22.01.2008 13:35

Beitrag 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?
Antworten

Zurück zu „[3.0.x] Mods in Entwicklung“