Aunque no es normal, los menús de nuestra web hecha en Joomla pueden crecer mucho, sobretodo cuando incluimos múltiples idiomas.
En el momento de escribir este artículo la versión de Joomla es la 3.1.1 e incorpora un pequeño bug por el cual, cuando tenemos muchos items de menú, se genera un error javascript que no nos deja guardar.
El error que suele mostrar está relacionado con el fichero media/system/js/mootools-core-uncompressed.js en diferentes lineas pero el que, en realidad, genera el problema es media/system/js/validate.js.
El problema radica en un bluce dentro del método handleResponse () que se recorre todas las etiquetas cada vez que se le llama. Esto genera mucha carga y acaba fallando.
La solución que aplicamos fue sacar este bucle de dentro del método precargandolo fuera de este método.
Despues de ver el error encontramos la misma solución en github pero posteada rmcdaniel así que optamos por adoptarla como correcta y olvidarnos de la nuestra.
Esperemos que la acepten dentro del core de Joomla en futuras versiones.
https://gist.github.com/rmcdaniel/192835346f68c2ead8fc
Aunque no es recomendable modificar el core, de momento tendremos que sustituir media/system/js/validate.js por el fichero descargado
Los cambios son fáciles pero los explicamos brevemente.
1 Borraremos el bucle que hay dentro de handleResponse
if (!(el.labelref)) { var labels = $$('label'); labels.each(function (label) { if (label.get('for') == el.get('id')) { el.labelref = label; } }); }
2 Precargamos las etiquetas
var labels = document.getElementsByTagName('label'); for (var i = 0; i < labels.length; i++) { if (labels[i].htmlFor != '') { var element = document.getElementById(labels[i].htmlFor); if (element) { element.labelref = labels[i]; } } }