Code highlightingUm den Code hübsch auf der Homepage präsentieren zu können, verwende ich auf dieser Seite das geshi plugin für Joomla welches bei der Grundinstallation auch gleich dabei war. Es hat mich leider nur ein wenig gestört, dass der Editor für die Eingabe der Inhalte leider nicht mit dem manuellen Eingabe für html zurecht kommt. Aus diesem Grund habe ich das geshi plugin etwas umgeschrieben um weiterhin den Editor für die Eingabe zu verwenden. if ( JString::strpos( $row->text, 'pre>' ) === false ) mit dieser hier ersetzt if ( JString::strpos( $row->text, 'geshi}' ) === false ) { Somit beendet die Funktion sich schon früher wenn kein geshi} im Text vorkommt. Danach musste noch der Regex-Interpreter angepasst werden. Dazu habe ich diese Zeile $regex = "#</p> <pre>(.*?)</pre> <p>#s"; mit dieser ersetzt: $regex = "#{ geshi xml:\s*(.*?)}(.*?){/ geshi}#s"; Zusätzlich wollte ich gerne bei größeren Sourcecode nur noch eine Datei übergeben die das Plugin dann selbstständig einließt und ausgeben soll. Dafür musst ich dem Plugin nur noch das kommando "file" beibringen was ich durch die folgende Zeile erreicht habe: $file = JArrayHelper::getValue( $args, 'file', 'false' ); Nun kann das Plugin auch mit dem file Argument etwas anfangen und der folgende Code ließt die Datei aus: // Read the file if ($file !== "false") { // Check if exists if (file_exists("./images/code/".$file) === false) return "File $file not exists!"; $text .= file_get_contents("./images/code/".$file); } Die Datei die ausgelesen werden soll muss in dem Ordner "/images/code/" vorhanden sein. Ich habe diesen Ordner gewählt um die Dateien auch über das Joomla Backend zu laden und nicht immer das ftp-Programm starten zu müssen. Und hier nochmal der gesamte Code: <?php /** * @version $Id: geshi.php 10381 2008-06-01 03:35:53Z pasamio $ * @package Joomla * @copyright Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved. * @license GNU/GPL, see LICENSE.php * Joomla! is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. * See COPYRIGHT.php for copyright notices and details. */ // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); $mainframe->registerEvent( 'onPrepareContent', 'plgContentGeshi' ); /** * Code Highlighting Plugin * * Replaces {geshi}...{/geshi} tags with highlighted text */ function plgContentGeshi( &$row, &$params, $page=0 ) { // simple performance check to determine whether bot should process further // if ( JString::strpos( $row->text, 'pre>' ) === false ) { if ( JString::strpos( $row->text, 'geshi}' ) === false ) { return true; } // Get Plugin info $plugin =& JPluginHelper::getPlugin('content', 'geshi'); // define the regular expression for the bot // $regex = "#<pre xml:\s*(.*?)>(.*?)</pre>#s"; $regex = "#{geshi xml:\s*(.*?)}(.*?){/geshi}#s"; $GLOBALS['_MAMBOT_GESHI_PARAMS'] =& $params; // perform the replacement $row->text = preg_replace_callback( $regex, 'plgContentGeshi_replacer', $row->text ); return true; } /** * Replaces the matched tags an image * @param array An array of matches (see preg_match_all) * @return string */ function plgContentGeshi_replacer( &$matches ) { $params =& $GLOBALS['_MAMBOT_GESHI_PARAMS']; jimport('geshi.geshi'); jimport('domit.xml_saxy_shared'); $args = SAXY_Parser_Base::parseAttributes( $matches[1] ); $text = $matches[2]; $lang = JArrayHelper::getValue( $args, 'lang', 'php' ); $lines = JArrayHelper::getValue( $args, 'lines', 'false' ); $file = JArrayHelper::getValue( $args, 'file', 'false' ); // Read the file if ($file !== "false") { // Check if exists if (file_exists("./images/code/".$file) === false) return "File $file not exists!"; $text .= file_get_contents("./images/code/".$file); } $html_entities_match = array( "|\<br \/\>|", "#<#", "#>#", "|'|", '#"#', '# #' ); $html_entities_replace = array( "\n", '<', '>', "'", '"', ' ' ); $text = preg_replace( $html_entities_match, $html_entities_replace, $text ); $text = str_replace('<', '<', $text); $text = str_replace('>', '>', $text); /* // Replace 2 spaces with " " so non-tabbed code indents without making huge long lines. $text = str_replace(" ", " ", $text); // now Replace 2 spaces with " " to catch odd #s of spaces. $text = str_replace(" ", " ", $text); */ // Replace tabs with " " so tabbed code indents sorta right without making huge long lines. //$text = str_replace("\t", " ", $text); $text = str_replace( "\t", ' ', $text ); $geshi = new GeSHi( $text, $lang ); if ($lines == 'true') { $geshi->enable_line_numbers( GESHI_NORMAL_LINE_NUMBERS ); } $text = $geshi->parse_code(); return $text; } |



HEADER
Nur hat sich bei Dir ein Flüchtigkeits-F ehler eingeschlichen.
{ geshi xml:lang="php"}//Test{/geshi}
Dein Script erfordert aber:
{ geshi xml:php}//Test{/geschi}
Man beachte die Schreibweise des schließenden Tags.
da hast du recht. zitiere Harald:
Hab den Fehler in meinem Script schon behoben nur auf der Seite ist mir das nicht aufgefallen.
Vielen Dank für den Hinweis. Hab das auf der Website nun auch richtig geändert.