Ajax en CakePHP 1.3
Ciencia
La mayoría de los cambios en CakePHP 1.3 son en "background", es decir que hay mejor diseño y rendimiento pero los desarrolladores no lo "vemos" y no nos afecta.
Quizás el cambio mas notorio está en los nuevos Helpers, pues en la versión 1.3 de CakePHP se incluye una especie de "Ajax Abstraction Layer", es decir que CakePHP deja de estar centrado en Prototype/Scriptaculous y ahora tiene un manejador "neutro" para cargar el framework javascript de nuestra preferencia: Prototype, jQuery o Mootools.
Esto implica que los helpers Ajax y Javascript que usamos un chingo en Centauro y Karamelo están en deprecated y en su lugar se debe usar el nuevo JsHelper. Los métodos $ajax->div() y $ajax->divEnd() que son muy útiles, los he pasado a mi querido GagsHelper para poder seguir usándolos.
Dado que en el pasado hemos tenido problemas de colisión de frameworks Javascript y además jQuery parece ser el framework más utilizado y tiene muchos plugins chidos he decidido eliminar Prototype de Karamelo y pasarlo todo a jQuery.
Ejemplo de Ajax en CakePHP 1.3:
-
# Cargo my framework en el Helper Js
-
-
# Para cargar las librerías En lugar de
-
$javascript->script(array('jquery-min'));
-
-
#Ahora es
-
$this->Html->script(array('jquery-min'));
-
-
-
# En lugar de esto
-
echo $html->div('sidemenu').__('Subjects', True). $ajax->link($html->image('static/arrow_down.png',
-
array('alt'=>__('Display Subjects', True), 'title'=>__('Display Subject', True))), '/subjects/display',
-
array('update' => 'qn',
-
'loading'=>"Element.show('loading3');",
-
'complete'=>"Element.hide('loading3');Effect.Appear('qn')"),
-
Null,
-
False
-
);
-
echo '</div>';
-
-
echo $gags->imgLoad('loading3');
-
-
#Ahora es
-
echo $this->Html->div('sidemenu', __('Subjects', True). $this->Js->link($this->Html->image('static/arrow_down.png',
-
array('alt'=>__('Display Subjects', True), 'title'=>__('Display Subject', True))), '/subjects/display',
-
array('update' => '#qn',
-
'evalScripts' => True,
-
'before' => $this->Js->get('#loading3')->effect('fadeIn', array('buffer' => False)),
-
'complete' => $this->Js->get('#loading3')->effect('fadeOut', array('buffer' => False)),
-
'escape' => False
-
)));
-
echo $gags->imgLoad('loading3');
-
echo $gags->ajaxDiv('qn').$gags->divEnd('qn');
-
-
echo $this->Js->writeBuffer(); # Write cached scripts
El método $this->Js->writeBuffer(); imprime las llamadas cacheadas de ajax y siempre va al final de la página.
Para aplicar varios efectos a varios DIVs sólo se concatenan en la llamada, por ejemplo:
'before' => $this->Js->get('#loadImg')->effect('fadeIn', array('buffer' => False)) .
$this->Js->get('#list')->effect('fadeOut', array('buffer' => False))
Por último en CakePHP 1.3 los métodos Model->del() y Session->del() se eliminarons y ahora son delete(), pero eso se cambia de volada usando M-x find-named-dir en Emacs.
Permalink: http://www.mononeurona.org/entries/view/aarkerio/2223
Commentblogs:Que chingon!!! Me quedo con CakePHP!! ¿Ya terminaste la migración del código? ¿Dónde esta la opción para resaltar el código PHP en centauro?
2010-05-09 11:40:03-05
Falta migrar Centauro el Ajax de Centauro.
La función para resaltar el código todavía no está :-( pero podríamos usar geshi:
http://packages.debian.org/sid/php-geshi
2010-05-10 16:00:05-05










