Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
J'aimerais savoir s'il y en a parmi vous qui utilisez AJAX avec le ZF.
Je pense que c'est le cas, donc, comment avez vous structuré vos dossiers et votre application pour rendre ça facile à développer?
Merci d'avance.
Hors ligne
salut,
désolé d'avance pour les erreurs d'explications je découvre depuis peu Zend.
pour ma part j'utilise une structure modulaire avec un viewRenderer pour une utilisation normal avec url rewrite.
par contre dès que j'utilise des requêtes via javascript je passe par un plugin qui désactive le viewrenderer
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$viewRenderer->setNoRender(true);
de ce fait je ne charge plus automatiquement les modules, actionstack et autre template et c'est manuellement que je vais pointer vers la view qui m'interresse
$this->render('ajax-message');
du coup je n'est pas de structure dédié à l'utilisation d'ajax si ce n'est pour mes view.(dans les controlleurs tu peux utiliser if ($this->_request->isXmlHttpRequest()) pour tester tes requêtes
Hors ligne
Des helpers font ça automatiquement http://framework.zend.com/manual/fr/zen … textswitch
Et ça va même plus loin
Hors ligne
J'ai un peu étudié la chose pour faire de l'ajax avec ZF et c'est pas mal bien intégré.
Dans mon site test d'apprentissage, j'ai fait un truc tout con pour manipuler:
Dans le controlleur, j'ajoute la propriété :
public $ajaxable = array( 'archive' => array('html') );
"archive" est le nom de mon action, "html" c'est le contexte (c'est un des contexte existant dans ZF, pas besoin de le créer mais on peut en créer d'autre, ce que j'ai fait car le contexte "html" par défaut sous IE pose un problème de cache et de mise à jour)
çà dit à ZF que l'action "archive" peut etre rendu sous le contexte classique ou html.
Le contexte html indique notamment que le script de vue doit être nommé "nomaction.ajax.phtml" par défaut
Dans le code de la vue, j'ai un lien qui permet d'appeler l'action,
j'utilise prototype ce qui donne à peu près çà :
<a href="#" onClick="javascript:dispatch('archive/produit/', 'liste-news');">produit</a> et la fonction : function dispatch(href, id) { var result = new Ajax.Updater(id, 'http://localhost/'+href+'/?format=html', { method:'get' }); };
href c'est un param contenant l'url que je veux appeler (genre: http://localhost/archive/produit/ )
J'y ajoute le param "format" = html comme çà ZF saura que je veux rendre mon action archive via le contexte "html"
Dans l'action "archive", il n'y a rien à faire de spécial.
Par défaut, sans format, c'est rendu normalement et mon action "archive" m'affiche les dernières actualités si on appelle http://localhost/archive/generale/
Et si l'utilisateur clique sur mon lien ajax sur la page, j'appelle la même action "archive" mais le param format "html" fait en sorte que le ZF va me renvoyer la vue "archive.ajax.html" et via prototype, j'intègre le résultat dans ma page.
Je sais pas si j'ai été très clair par contre :S
Dernière modification par or4cle (16-04-2008 11:28:30)
Hors ligne
...par défaut sous IE pose un problème de cache...
Truc bête mais qui marche
'http://localhost/ten/'+href+'/?format=html&'+(new Date().getTime())
Et ouais l'url change tous le temps, donc plus de soucis (mais n'empèche que IE c'est la mort...)
Hors ligne
Personnelement je génère mes fichiers XML par PHP et je rajoute les headers suivant pour ne plus avoir de problème de cache avec IE:
header("Pragma: no-cache"); header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date du passé header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header('Content-Type: text/xml; charset=ISO-8859-1');
En tout, ça marche sans ZF. Je n'ai pas encore essayé avec le ZF.
Pour moi l'AJAX sur ZF, ce n'est pas pour tout de suite, mais je préfère poser les questions en avance histoire de ne pas être surpris. Personnelement j'utiliserais pour faire un écran avec des zones de drag&drop et une interface avec google map (d'ailleur c'est dommage que le ZF n'est pas gère pas le google map par le Gdata). Il y aura aussi quelques gadgets comme l'auto complétion etc mais cela reste assez simple.
Dernière modification par slaughter (16-04-2008 16:44:17)
Hors ligne
Comme je le disais, j'utilise un contexte personnalisé qui utilise le header que tu viens de donner et çà règle de problème sous IE, mais pour répondre à ta question j'ai voulu faire simple pour expliquer comment utiliser les fonctionnalités ajax du ZF que j'ai utudié.
Hors ligne
J'utilise ExtJS
Hors ligne
La notion de "contexte" dans ZF est un peu abstrait pour moi. Avez vous un exemple?
Hors ligne
Oui, je vois bien qu'il doit y avoir une différence de traitement entre des requête HTTP normale et les requêtes via ajax, mais la notion de de "contexte" est-elle spécifique au ZF ? Comment créer des comportements personnalisés et différents selon les contextes ?
Je crois que je vais faire un tour sur la doc...
Hors ligne
Avec une recherche "ajax" sur le site du framework, je trouve très peux de doc pour comprendre de A à Z comment implementer ajax, merci de vos conseils.
si j'ai bien compris c'est par la http://framework.zend.com/manual/fr/zen … textswitch
mais pas très clair
je recherche des tutoriaux, si vous avez
Dernière modification par lethak (02-05-2008 23:43:34)
Hors ligne
C'est pas vraiment un tuto mais ce que j'ai écrit plus haut dans ce topic est "censé" ( ) aidé à ce propos.
En tout cas, même si c'est pas super clair au 1er abord, c'est en lisant la doc que tu as indiqué que j'ai pigé le truc.
Hors ligne