Translate

lunes, 2 de febrero de 2015

JOOMLA 3.x. LÍMITE DE PALABRAS INTRODUCIDAS EN EL EDITOR.

Patrocinador




Anteriormente, ya me había encontrado con la problemática de limitar el número de caracteres o palabras que pueden escribirse en un campo de tipo editor en Joomla:

Joomla. Campo tipo Editor Es el campo que aparece cuando queremos crear un artículo nuevo por ejemplo, tal como se ve en la imagen de la izquierda.

Este tipo de campo muestra un editor WYSIWYG donde puede crearse el contenido correspondiente; tal como hemos mencionado, un artículo por ejemplo.

No son pocos los usuarios a los que les gustaría establecer un límite en la cantidad de información que se introduce. Puede ser muy útil conocer ese dato y tenerlo en cuenta por si ese contenido ha de mostrarse en un dispositivo móvil, queremos que sea de una determinada extensión por motivos de atención del usuario, etc. Los requerimientos pueden ser muchos. El usuario manda.

Necesitamos entonces limitar el número de caracteres. Sin embargo aquí surge el primer escollo. Estamos trabajando con un editor WYSIWYG que "internamente" tiene elementos HTML que, implicando un cierto número de caracteres, visualmente es posible que solamente resulten en un salto de línea, como puede ocurrir con el elemento <BR />.

Es preferible por tanto, no limitar el número de caracteres, sino más bien, el número de palabras introducidas en el editor.

En el momento en que se publica este artículo, la última versión estable de Joomla es la 3.3.6 y su editor WYSYWIG para campos de tipo editor por defecto, es TinyMCE versión 4.1.2. Esta versión también dispone de un plugin que permite mostrar cuántas palabras llevamos introducidas y que podemos ver en funcionamiento, si configuramos TinyMCE para que opere en modo extendido. Lógicamente podemos cambiar el editor WYSIWYG por defecto, pero nos centraremos en el que viene en Joomla tal cual, sin aditivos y de paso, nos sirve para saber como cambiarlo en cualquiera de nuestras aplicaciones que usen TinyMCE como editor HTML.

Estableciendo un límite de palabras para TinyMCE

Lo primero que tenemos que hacer es localizar el sitio donde realizar nuestros cambios. El fichero que necesitamos se encuentra en:

$SU_CARPETA_JOOMLA/plugins/editors/tinymce/tinymce.php

En la línea 575 del fichero aparece una instrucción switch que controla las opciones con que se inicializará el editor, dependiendo del modo en que esté configurado en Joomla:


Joomla. Código inicializador de TinyMCE

Si queremos que el límite de palabras introducidas en el editor, se procese en todos los modos, tendremos que hacer las modificaciones en todos ellos. En este artículo, estableceremos el límite en el modo extendido solamente (línea 655), ya que suele ser el más usado.

El cambio, básicamente consiste en añadir el parámetro setup al método init:

case 2: /* Extended mode*/
$return = $load . "\t<script type=\"text/javascript\">
   tinyMCE.init({
setup: function(ed){ ed.on('keydown', function(e){ // Inicializamos una constante con el límite que deseamos. var LIMITE_PALABRAS = 200; // Utilizamos expresiones regulares para obtener, primero los caracteres y después las palabras. var caracteres = ed.getContent().replace(/<[^>]*>/g, '').replace(/\s+/g, ' '); caracteres = caracteres.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); var numeroPalabras = (caracteres.split(/[\w\u2019\'-]+/).length) - 1; // Si el número de palabras supera al límite que guarda la constante... if ( numeroPalabras > LIMITE_PALABRAS ) { // Controlamos que no se esté pulsando borrar o retroceso y podamos eliminar caracteres. if ( e.keyCode != 8 && e.keyCode != 46 ) { // Aquí realizamos la acción que mejor nos convenga. alert(\"Ha sobrepasado el limite de \" + LIMITE_PALABRAS + \" palabras.\"); e.preventDefault(); } } });
}, // ... resto del código ...

Una vez guardados los cambios y recargada la página, cada vez que queramos añadir más palabras de las indicadas en la constante LIMITE_PALABRAS, aparecerá un alert indicándonos que hemos sobrepasado el límite y evitando que introduzcamos más información.

Por supuesto, dependiendo de versiones, puede cambiar. Nada más, espero que lo encontréis útil.

Un cordial saludo.