En esta segunda parte del post anterior, veremos como cargar de forma asíncrona el menú izquierdo, dependiendo de la página mostrada. Además incorporaremos un fading al mostrar los contenidos cargados asíncronamente, de esta manera la experiencia de usuario es mucho más atractiva. Podéis ver como queda en www.openti.net .
Para poder cargar el menú izquierdo de forma asíncrona, crearemos una página php que nos devuelva el contenido de estos menús, y llamaremos con el AJAX de mootools a este php, para recoger el contenido y colocarlo en el div que crearemos en dicha posición.
Primero creamos en la raiz del sitio la página php, mod_left.php, que será una copia de index2.php pero con el final del fichero cambiado, para que no cargue el contenido de un artículo, sino que cargue el menú izquierdo, llamando a:
<?php mosLoadmodules(“left”,-2)?>
<body>
<?php if(mosCountmodules("left")){ ?>
<?php mosLoadmodules("left",-2)?>
<?php } ?>
</body>
</html>
<?php
}
} else {
mosLoadmodules("left",-2);
}
Una vez creada esta página tenemos que llamarla desde nuestro fichero ajax.js
function ajaxloadLeftColumn(url){
$('ajaxleft').innerHTML=$('loading2').innerHTML;
//call showload function to show preloader
try
{
url = url.replace('index2.php','mod_left.php');
new Ajax(url, {
//loaded content would be updated inside this division
update: 'ajaxleft',
//this should be true if you want to execute JS inside the loaded content
evalScripts: true,
onComplete:function(r)
{
//It sets the type property of the script tag,
//then puts the script body inside of the element (between the opening and closing script tags),
//then injects into the head of the page
var script = new Element('script')
script.setProperty('type','text/javascript');
try
{
script.setHTML(r);
}
catch(e)
{
}
},
onSuccess:function(){
try
{
//The ajaxlinks function is being called here,I defined this function in footer
ajaxLinks();
iniciaObjeto($('ajaxleft'));
efecto($('ajaxleft'));
}
catch(e)
{
}
}
}).request();
}
catch(e)
{
}
}
En la primera línea mostramos la imagen de carga en el div del menú:
$('ajaxleft').innerHTML=$('loading2').innerHTML;
Esta petición asíncrona se ejecutará siempre que se haga una petición de página, mandándole los mismos parámetros que a la petición de la página, de esta manera la función de mosLoadmodules nos devolverá el menú que corresponde a la página que se está pidiendo, con esto para construir nuestra url de petición solo tendremos que hace lo siguiente:
url = url.replace('index2.php','mod_left.php');
A esta url haremos la petición AJAX recogeremos el contenido y lo mostraremos en el div ajaxleft que creamos en la posición de nuestro menú izquierdo en el index.php de nuestra plantilla.
Posteriormente llamamos a las funciones de iniciaOjecto y efecto para obtener el fading, al mostrar el contenido:
function iniciaObjeto(obj)
{ obj.style.opacity = 0;
obj.style.MozOpacity = 0;
obj.style.KhtmlOpacity = 0;
obj.style.filter = 'alpha(opacity=' + 0 + ')';
obj.style.zoom=1;//necesario para Explorer
}
function setOp(obj, value) {
obj.style.opacity = value/100;
obj.style.MozOpacity = value/100;
obj.style.KhtmlOpacity = value/100;
obj.style.filter = 'alpha(opacity=' + value+ ')';
obj.style.zoom=1;//necesario para Explorer
}
function efecto(o){
for (var c=0 ; c < 100; c++)
(function(c){
setTimeout(function(){setOp(o,c);} , 10*c);
})(c);
}
Es todo es todo, si tenéis alguna duda, o necesitáis los fuentes completos, pedírmelo.
Un Saludo.