Bueno, aunque todavía no es tan fácil como quiero que sea en un futuro, creo que es lo suficientemente fácil como para incluirlo en el framework :).
En el current del proyecto (próximamente a salir la Beta 2) ya esta andando el helper js para ajax, solo el js, pero acá un ejemplo del uso:
Esta función, expande una árbol de un menú de subcategorías:
- function cat_load_n_expande (cat_id) {
- // Parseo la variable cat_id a entero
- cat_id = parseInt(cat_id);
- // Creo el objeto ajax_helper del framework:
- var oajax = new ajax_helper();
-
- // Acá solo referencio a unos objetos que uso en el árbol:
- if (cat_id) var signito = document.getElementById("cat_" + cat_id + "_explog");
- if (cat_id) var linker = document.getElementById("expcmd_" + cat_id);
- // se le pasa la URL
- oajax.url = "?task=admin&acc=categorias&ajax";
- // le seteo un div para todos los mensajes (carga, completo, etc)
- oajax.set_all_divs("cat_tree_" + cat_id);
- // le seteo que el texto cuando se complete sea el responsetext (con true)
- oajax.on_complete_text = true;
- // El texto que va a tener el div, cuando se inicie la carga
- oajax.on_init_text = "Cargando arbol de subcategorias...";
- // Acá solo reemplazo el signo que está antes del titulo para definir que está abierto
- if (cat_id) signito.innerHTML = "▼";
- if (cat_id) linker.href = "javascript:cat_unexpande(" + cat_id + ")";
- // Seteo para que le mande el parametro level con el id pasado (recuerden que esto castea solo)
- oajax.add_param ("level",cat_id);
- // envio
- oajax.send();
-
- }//function
Bien explicada les dejo esta función, para que masomenos vena el uso del objeto.
Esta es para crear una opción en el árbol:
- function cat_save (sup_id) {
-
- // Creamos el objeto ajax
- var oajax = new ajax_helper();
- // Obtenemos los datos del input
- var cat_titulo = document.getElementById("categoria_titulo_"+sup_id).value;
- var cat_id = document.getElementById("categoria_id_"+sup_id).value;
-
- // Pasamos la url:
- oajax.url = "?task=admin&acc=save_categoria";
- // Le decimos que cuando termine la carga, ejecute una función
- oajax.on_complete_func = cat_load_n_expande;
-
- // Parámetros:
- oajax.add_param ("categoria_titulo",cat_titulo);
- oajax.add_param ("categoria_super",sup_id);
- oajax.add_param ("categoria_id",cat_id);
- // Enviamos los datos...
- oajax.send();
- cat_edited = false;
- }//function
No hay que preocuparse por hacerlo compatible con la mi#rd4 del IE, Firefox, opera, safari, etc. es compatible con todo (solo) y sin necesidad de hacks ni códigos extras.
Como convertir un sitio convencional a uno 100% en ajax (en 5 minutos):
Y digo 5 minutos para darles tiempo de hablar por msn nada mas. La cosa es así, si el sitio está desarrollado en el framework usa las tareas y acciones (tasks y accs), así que suponiendo por ejemplo que tenemos un sitio con 4 secciones (Portada, blog, foro, galeria) como ejemplo, las tareas serían:
www.sitioejemplo.com/?task=portada
www.sitioejemplo.com/?task=blog
www.sitioejemplo.com/?task=foro
www.sitioejemplo.com/?task=galeria
Si se usó bien la clase de templates, en los archivos de salida abría algo así:
- set_for_captura("CONTENIDO"); ?>
-
- Ejemplo de lo que va a salir
-
- end_captura(); ?>
La opción en el template CONTENIDO, contendría al fin y al cabo el contenido, sin menúes ni nada (si esta bien trabajado) así que si tenemos un template:
<html>
<head><!-- ##HEAD## --></head>
<body>
<div id="todo">
<div id="titulo">
<h1>Ejemplo de template</h1>
</div>
<div id="cuerpo">
<div id="menu"><!-- ##MENU## --></div>
<div id="contenido"><!-- ##CONTENIDO## --></div>
</div>
<div id="footer"><!-- ##FOOT## --></div>
</div>
</body>
</html>
Solo suponiendo xD, lo que va en el menú, el footer, la cabecera y demás se cargan otro archivo, el contenido al fin y al cabo se cargaría desde los outs de las tareas.
Supongamos que hagamos un template:
- <!-- ##CONTENIDO## -->
sin nada mas, el FW solo expulsará a la salida el contenido neto trabajado, entonces... se puede hacer un perfecto uso de la clase de ajax para tener un sitio en ajax, que ala vez tendría la ventaja de llegar a todo su contenido por URL (para ser indexado por buscadores por ejemplo).
En que se basaría esto:
hacemos una pequeña función en js:
- function go_task (task) {
- // definimos la ruta (? o index.php o donde se tenga el init)
- oajax.url = "?";
- // usamos el methodo GET
- oajax.method = "GET";
- // Que cargue todo en el div "contenido"
- oajax.set_all_divs("contenido");
- // Que al completar inserte lo pedido en el div definido
- oajax.on_complete_text = true;
- // Cuando inicia la carga nos pone eso
- oajax.on_init_text = "Cargando la pagina, espere";
- // La tarea
- oajax.add_param ("task",task);
- // Le avisamos al FW que será por ajax
- oajax.add_param ("ajax","true");
- // Enviamos
- oajax.send();
- }
Esa es toda la función, esto ya haría la petición y la metería en el div de contenido, ahora, fijense que le mando el parámetro ajax, esto es para identificar el pedido desde el FW, ahora, en el archivos /config/template.php, podemos poner lo siguiente:
- if (isset($_REQUIRE['ajax'])) {
- $obj_template->remove_task_cache ("forajax");
- } else {
- $obj_template->remove_task_cache ("normal");
- }//if
El template "forajax", seria el que solo contendría la etiqueta <!-- ##CONTENIDO## --> y se cargaría solo si se manda el parámetro "ajax", por lo que en las tareas no hay que modificar absolutamente nada, y después, esto lo tomo como idea, cargar un menú normal con las direcciones fijas, y en un js, hacer que se ejecute una funcion al principio que reemplace el contenido del menú para que las rutas sean con go_task();, así si el navegador tiene deshabilitado el JS o es un bot de un buscador, tendría los links directos sin necesidad de ajax.
Bueno cualquier cosa... está el grupo :)