Bienvenido, Invitado
Nombre de Usuario: Contraseña: Recordarme
  • Página:
  • 1
  • 2

TEMA: Colorear código con Geshi en Kunena

Colorear código con Geshi en Kunena 9 años 7 meses ago #15752

  • JoniJnm
  • Avatar de JoniJnm
  • Offline
  • Administrador
  • Mensajes: 4579
  • Gracias recibidas 544
  • Karma: 160
· Descripción
Este hack utiliza la librería Geshi, incluida en los paquetes de Joomla, para colorear código. Puedes añadir más lenguages de programación descargándolos en la página de Geshi y subiéndolos a:
· /libreries/geshi/geshi (Joomla 1.5)
· /plugins/content/geshi/geshi/geshi (Joomla 1.6)
Para que funcione debes habilitar la opción "Enable Code Highlighting" en la configuración de Kunena, en bbCode

· Versión 1.1

· Probado en las versiones
- Kunena 1.6 alpha2
- Joomla 1.5.18
- El hack ha sido añadido en Kunena 1.6 alpha3

· Ficheros que necesitan cambios
- kunena.php
- lib/kunena.parser.php
- template/default/css/kunena.forum.css
- template/editor/bbcode.php
- lib/kunena.bbcode.js.php
- funcs/view.php
- site_language/es-ES.com_kunena.ini
- site_language/en-GB.com_kunena.ini


·Cambios


- kunena.php
Busca / Search
//Check if the catid requested is a parent category, because if it is
Añade arriba / Add before
//JoniJnm: code para geshi
	if ($kunena_config->highlightcode) {
		$document =& JFactory::getDocument();
		$document->addStyleDeclaration('
			div.highlight pre {
				width: '.(($kunena_config->rtewidth * 9) / 10).'px;
				max-height: '.$kunena_config->rteheight.'px
			}
		');
	}
	//end JoniJnm

- Kunena.parser.php
Cambia / Change
case 'code':
					$kunena_config = KunenaFactory::getConfig();
					if ($kunena_config->highlightcode) {
						$between = preg_replace ( '/\[table\](.*?)\[\/table\]/s', '', $between );
						if (substr(JVERSION, 0, 3) == 1.5) {
							$path = JPATH_ROOT.'/libraries/geshi';
							jimport('geshi.geshi');
						} else {
							$path = JPATH_ROOT.'/plugins/content/geshi/geshi';
							require_once($path.'/geshi.php');
						}
						if (file_exists($path.'/geshi.php')) {
							if (substr(JVERSION, 0, 3) == 1.5) $path .= '/geshi';
							$type = isset($tag->options["type"]) ? $tag->options["type"] : "php";
							if ($type == "js") $type = "javascript";
							else if ($type == "html") $type = "html4strict";
							if (!file_exists($path.DS.$type.".php"))
								$type = "php";
							$code = str_replace("\t", "	", $between);
							$geshi = new GeSHi($code, $type);
							//$geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS,37);
							$geshi->enable_keyword_links(false);
							//$geshi->set_header_type(GESHI_HEADER_PRE_TABLE);
							$code = $geshi->parse_code();
							$code = str_replace("\n","<br />",$code);
							//$code = ereg_replace(">([0-9]+)<br \/","><b>\\1.<\/b><br \/",$code);
							$tag_new = '<div class="highlight">'.$code.'</div>';
							$task->in_code = FALSE;
						}
						else
							return TAGPARSER_RET_NOTHING;
						return TAGPARSER_RET_REPLACED;
					} else {
						$types = array ("php", "mysql", "html", "js", "javascript" );
						if (! empty ( $tag->options ["type"] ) && in_array ( $tag->options ["type"], $types )) {
							 $t_type = $tag->options ["type"];
						} else {
							$t_type = "php";
						}
						// Preserve spaces and tabs in code
						$code = str_replace ( "\t", "__KTAB__", $between );
						$code = str_replace("\r\n","__KRN__",$code);
						$code = str_replace("\n","__KRN__",$code);
						$code = str_replace("\r","__KRN__",$code);
						$code = kunena_htmlspecialchars ( $code );
						$tag_new = "<div class=\"highlight\"><pre class=\"{$t_type}\">{$code}</pre></div>";
						$task->in_code = FALSE;
						return TAGPARSER_RET_REPLACED;
					}
					break;
Por / By
case 'code':
					//JoniJnm: code para geshi
					$kunena_config = KunenaFactory::getConfig();
					if ($kunena_config->highlightcode) {
						if (substr(JVERSION, 0, 2) == 15) {
							$path = JPATH_ROOT.DS.'libraries'.DS.'geshi';
							jimport('geshi.geshi');
						}
						else {
							$path = JPATH_ROOT.DS.'plugins'.DS.'content'.DS.'geshi'.DS.'geshi';
							require_once($path.DS.'geshi.php');
						}
						$path .= DS."geshi";
						$type = isset($tag->options["type"]) ? $tag->options["type"] : "php";
						if ($type == "js") $type = "javascript";
						else if ($type == "html") $type = "html4strict";
						if (!file_exists($path.DS.$type.".php"))
							$type = "php";
						$code = str_replace("\t", "	", $between);	
						$geshi = new GeSHi($code, $type);
						//$geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS,37);
						$geshi->enable_keyword_links(false);
						//$geshi->set_header_type(GESHI_HEADER_PRE_TABLE);
						$code = $geshi->parse_code();
						$code = str_replace("\n","<br />",$code);
						//$code = ereg_replace(">([0-9]+)<br \/","><b>\\1.<\/b><br \/",$code);
						$tag_new = '<div class="highlight">'.$code.'</div>';
						$task->in_code = FALSE;
						return TAGPARSER_RET_REPLACED;
					}
					else
						return TAGPARSER_RET_NOTHING;
					break;

- kunena.forum.css
Nota: Si utilizas el archivo kunena.forum-min.css, usa kunena.forum.css para poder modificarlo, puedes comprimirlo con esta herramienta

Busca / Search
#Kunena div.kmsgtext pre,
#Kunena div.kmsgtext .code {
	border-left: 5px solid #F4A94F;
	border-right: 1px solid #BFC3C6;
	border-top: 1px solid #BFC3C6;
	border-bottom: 1px solid #BFC3C6;
	font-family: "Courier News", Courier, monospace;
	font-weight: normal;
	line-height: 1.5;
	margin: 5px 0pt 15px;
	padding: 10px 15px;
	width: 100%;
	overflow: auto;
}
Elimina / Delete
width: 100%;
Cambia
margin: 5px 0pt 15px;
Por
margin: 3px 0 10px 0;

- bbcode.php
Busca / Search
<div id="kbbcode-video-options" style="display: none;"><?php
Añade arriba / Add before
<?php 
			// JoniJm Geshi
			if ($kunena_config->highlightcode) { 
				if (substr(JVERSION, 0, 2) == 15)
					$path = JPATH_ROOT.DS.'libraries'.DS.'geshi'.DS."geshi";
				else
					$path = JPATH_ROOT.DS.'plugins'.DS.'content'.DS.'geshi'.DS.'geshi'.DS."geshi";
				$files = JFolder::files($path, ".php"); ?>
				<div id="kbbcode-code-options" style="display: none;"><?php
				echo JText::_('COM_KUNENA_EDITOR_CODE_TYPE');
				?> <select id="kcodetype"
					name="kcode_type" class="kbutton"
					onmouseover="javascript:$('helpbox').set('value', '<?php
					echo JText::_('COM_KUNENA_EDITOR_HELPLINE_CODETYPE');
					?>')">
					<?php
					foreach ($files as $file)
						echo '<option value = "'.substr($file,0,-4).'">'.substr($file,0,-4).'</option>';
					?>
				</select>
				<input id="kbutton_addcode" type="button" name="Code" onclick="kInsertCode()"
				value="<?php echo JText::_('COM_KUNENA_EDITOR_CODE_INSERT'); ?>"
				onmouseover="javascript:$('helpbox').set('value', '<?php
				echo JText::_('COM_KUNENA_EDITOR_HELPLINE_CODEAPPLY');
				?>')" />
				</div>
		<?php
			}
		// Fin JoniJnm ?>

- kunena.bbcode.js.php
Cambia / Change
kbbcode.addFunction('Code', function() {
	this.replaceSelection('[code]' + this.getSelection() + '[ /code]');
}, {'id': 'kbbcode-code-button',
	'title': '<?php echo JText::_('COM_KUNENA_EDITOR_CODE');?>',
	'alt': '<?php echo JText::_('COM_KUNENA_EDITOR_HELPLINE_CODE');?>',
	'onmouseover' : '$("helpbox").set("value", "<?php echo JText::_('COM_KUNENA_EDITOR_HELPLINE_CODE');?>")'});
Por / By
<?php // JoniJnm Geshi
if ($kunena_config->highlightcode) { ?>
kbbcode.addFunction('Code', function() {
	kToggleOrSwap("kbbcode-code-options");
}, {'id': 'kbbcode-code-button',
	'title': '<?php echo JText::_('COM_KUNENA_EDITOR_CODE');?>',
	'alt': '<?php echo JText::_('COM_KUNENA_EDITOR_HELPLINE_CODE');?>',
	'onmouseover' : '$("helpbox").set("value", "<?php echo JText::_('COM_KUNENA_EDITOR_HELPLINE_CODE');?>")'});
<?php } 
// Fin JoniJnm ?>

Busca / Search
function kInsertImageLink() {
Añade arriba / Add before
IMPORTANTE: En el código, quita el espacio en '[ /code]' / IMPORTANT: In the code, delete the space in '[ /code]'
// JoniJnm Geshi
function kInsertCode() {
	var kcodetype = $('kcodetype').get('value');
	kbbcode.replaceSelection('[code type='+kcodetype+']' + kbbcode.getSelection() + '[ /code]'); //IMPORTANTE: Elimina el espacio en '[ /code]' 
	//kToggleOrSwap("kbbcode-code-options");
}
// Fin JoniJnm

- view.php
Busca / Search
$this->message = KunenaParser::parseBBCode ( $message->message );
Añade antes / Add before
IMPORTANTE: En el código, quita el espacio en '[ /code]' / IMPORTANT: In the code, delete the space in '[ /code]'
$message->message = preg_replace("/\[\/code\][^\n]*\n/i", '[ /code]', $message->message); 
//Importante: elimina el espacio en '[ /code]'

- es-ES.com_kunena.ini
Añade / Add
; JoniJnm Geshi
COM_KUNENA_EDITOR_CODE_TYPE="Código"
COM_KUNENA_EDITOR_HELPLINE_CODETYPE="Selecciona un lenguage de programación"
COM_KUNENA_EDITOR_CODE_INSERT="Insertar"
COM_KUNENA_EDITOR_HELPLINE_CODEAPPLY="Insertar código"
; Fin JoniJnm

- en-GB.com_kunena.ini
Añade / Add
; JoniJnm Geshi
COM_KUNENA_EDITOR_CODE_TYPE="Code"
COM_KUNENA_EDITOR_HELPLINE_CODETYPE="Select a programming language"
COM_KUNENA_EDITOR_CODE_INSERT="Insert"
COM_KUNENA_EDITOR_HELPLINE_CODEAPPLY="Insert code"
; Fin JoniJnm
Última Edición: 8 años 8 meses ago por JoniJnm.
El administrador ha desactivado la escritura pública.

Re: Colorear código con Geshi en Kunena 8 años 9 meses ago #18723

  • JuanDP
  • Avatar de JuanDP
  • Offline
  • Observador
  • Mensajes: 26
  • Karma: 0
Joni,

la versión de kunena 1.6.3 está algo diferente por lo menos en el archivo (Kunena.parser.php) no encontré tal cual lo escribes..

me interesa colocar códigos BBcode coloreados en mi foro =(.
El administrador ha desactivado la escritura pública.

Re: Colorear código con Geshi en Kunena 8 años 9 meses ago #18725

  • JuanDP
  • Avatar de JuanDP
  • Offline
  • Observador
  • Mensajes: 26
  • Karma: 0
aaa, parece que ya viene configurado en kunena 1.6, he estado intentado colocar códigos en c++, geshi solo trae C, por lo que no queda muy coloreado que digamos, tienes idea de que puedo hacer?

El otro punto es que, el ancho del cuadro del código no alcanza el ancho que necesito, donde puedo ver eso?, donde puedo modificar el ancho del cuadro que encierra el código?
=)

Logro ver que tienes CPP en geshi =)
El administrador ha desactivado la escritura pública.

Re: Colorear código con Geshi en Kunena 8 años 9 meses ago #18728

  • JuanDP
  • Avatar de JuanDP
  • Offline
  • Observador
  • Mensajes: 26
  • Karma: 0
Joni sabes que me está pasando?


Según lo que he leído, parece que kunena 1.6 ya trae configurado el geshi para solo usarlo, pero cuando le agrego otros lenguajes, como por ejemplo CPP, kunena sigue tomándome el CODE del PHP, ignorando el CPP, por lo que no colorea bien el lenguaje C++.

Aparte de agregar el archivo cpp.php a geshi debo hacer algo más?
El administrador ha desactivado la escritura pública.

Re: Colorear código con Geshi en Kunena 8 años 9 meses ago #18746

  • JoniJnm
  • Avatar de JoniJnm
  • Offline
  • Administrador
  • Mensajes: 4579
  • Gracias recibidas 544
  • Karma: 160
el formato para crear el código es "[ code type=IDIOMA][ /code] IDIOMA es el nombre del idioma, osea el nombre del archivo en:
· /libreries/geshi/geshi (Joomla 1.5)
· /plugins/content/geshi/geshi/geshi (Joomla 1.6)

De todas maneras tienes un botón en Kunena para insertar código
El administrador ha desactivado la escritura pública.

Re: Colorear código con Geshi en Kunena 8 años 8 meses ago #18794

  • JuanDP
  • Avatar de JuanDP
  • Offline
  • Observador
  • Mensajes: 26
  • Karma: 0
Listo amigo, estoy probandolo, ya te comentare si sirvio.

seria bueno arriba de cada titulo o nombre del archivo se pusiera la ruta B) me toco subir a ver la ruta mas de 15 veces mientras miraba el tutorial xD.

amigo mira, la linea :
function kInsertImageLink() {

La encontre en el archivo llamado editor.js ruta: de template/default/js/ en el hilo se te paso ponerlo, y se interpreta como si estuviera en el mismo archivo de (kunena.bbcode.js.php)
:side:

:silly: :silly: :silly: :silly: :silly: :silly: :silly: :silly: :silly: :silly: :silly: :silly:

acabo de revisar y funciona de lujoooooooooooooooooooooooooo

Eres el capo de los capos, MUCHAS GRACIAS.
:laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh: :laugh:
El administrador ha desactivado la escritura pública.

Re: Colorear código con Geshi en Kunena 8 años 8 meses ago #18795

  • JoniJnm
  • Avatar de JoniJnm
  • Offline
  • Administrador
  • Mensajes: 4579
  • Gracias recibidas 544
  • Karma: 160
Sólo tenías que hacer el cambio del case 'code', del archivo kunena.parser.php. Ya he avisado a los de Kunena del bug. Supongo que lo arreglarán en la próxima versión.

PD: Asegúrate de tener activado en la configuración de kunena > BBcode > Habilitar Ayudante de Código > Sí
El administrador ha desactivado la escritura pública.

Re: Colorear código con Geshi en Kunena 8 años 8 meses ago #18796

  • JuanDP
  • Avatar de JuanDP
  • Offline
  • Observador
  • Mensajes: 26
  • Karma: 0
jejeje, pues yo hice lo demás, lo dejare así, ya en la próxima versión se actualizará me imagino xD, muchas gracias amigo, lo probé y funciona perfectamente.

ya estoy terminado el sitio igual no es mucho, solo quiero el foro para crear hilos de programas en C++ que voy creando y estudiando, ya te mostrare para que lo veas :)

Gracias, funciona de lujo =)
El administrador ha desactivado la escritura pública.

Re: Colorear código con Geshi en Kunena 8 años 8 meses ago #18808

  • JuanDP
  • Avatar de JuanDP
  • Offline
  • Observador
  • Mensajes: 26
  • Karma: 0
Bueno estuve haciendo algunas pruebas, PARA TODAS LAS PERSONAS que usen JOOMLA 1.5.22 y .23 no tienen que hacer absolutamente nada. los problemas empiezan desde joomla 1.6.

Pero cambiar el kunena.parser.php tal cual lo tiene JONI, funciona de maravilla en joomla 1.6.3.
El administrador ha desactivado la escritura pública.
  • Página:
  • 1
  • 2
Tiempo de carga de la página: 0.465 segundos