Sarc Posté 25 Février 2009 Partager Posté 25 Février 2009 Salut salut à tous ! Les frameworks, meilleure idée trouvée pour l'instant pour perdre quelqu'un qui pensait connaître le PHP plutôt bien... Bref. Je suis sous CakePHP, et j'aimerais afficher le résultat d'une autre méthode tout en faisant autre chose. Par exemple, pour éditer un message d'un forum, j'aimerais qu'il m'affiche les messages du sujet, et qu'il me rajoute un cadre "éditer" en bas avec le message dedans. Pour ne pas réinventer la roue, j'aimerais juste qu'il m'affiche le "$content_for_layout" de la méthode index, dans ma view de ma méthode "edit". De même, dans la messagerie, j'aimerais que dans l'ajout d'un enregistrement (méthode add), il m'affiche les 5 derniers messages échangés avec la personne... Typiquement, j'aimerais avoir une méthode "last_messages" et pouvoir afficher son résultat dans ma méthode add. J'espère avoir été clair... En espérant qu'il y aura des aficionados de CakePHP dans le coin, et qu'ils pourront m'aider. Lien vers le commentaire Partager sur d’autres sites More sharing options...
pluriels Posté 26 Février 2009 Partager Posté 26 Février 2009 désolé pour la pub, mais viens plutôt sur www.cakephp-fr.org Deux solutions : Logique Ajax : Tu pourrais inclure ton index avec un appel ajax ? (en utilisant le composant RequestHandler, ton $content_fo_layout sera affiché sans le layout ) De la même manière, tu peux inclure une méthode avec les 5 derniers messages Logique MVC M Dans ton modèle message, tu peux ajouter une méthode : function lastMessages($personne_id){$options['order']=array('created'=>'desc');$options['conditions'] = array('personne_id'=>$personne_id;'date');$options['limit']=5;$resultat = $this->find('all',$options);return $resultat} C Dans ton controleur messages function add($personne_id){ $last_messages = $this->Message->lastMessages($personne_id);$this->set('derniers_messages',$last_messages);// ici le code qui gère le formulaire} V Enfin dans la vue, tu peux te servir de la variable : $derniers_messages et ensuite afficher ton formulaire Dont Repeat Yourself => DRY Dernier conseil, si tu te rends compte que certaines fois dans tes vues, tu as des bouts de code vraiment très proches, tu dois pouvoir créer un élément ou un helper qu tu pourras appeler à chaque fois que tu en auras besoin. Exemple classique de M -> C -> V Bon courage Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sarc Posté 26 Février 2009 Auteur Partager Posté 26 Février 2009 Ah, merci pour le site donné ! J'avais pas vu qu'il y avait un forum avec des messages... Vu que j'étais déçu par les googles groupes en tout genre, je m'étais dit que c'était sur le Hub que j'avais le plus de chances. Mais je vais m'inscrire là-bas rapidement ! Je finis avec ce problème, vu qu'on a commencé à en parler... J'ai bien compris ce que tu m'as dit, merci beaucoup d'ailleurs, ça va me permettre d'avancer un peu... Va falloir que j'acquiers des réflexes de Cake. Par contre, encore une question, pour l'édition des message sur le forum... Je peux pas vraiment utiliser la logique MVC dont tu parles, parce que j'aurai un Repet Myself assez grave. Dans la vue de "edit", j'aurai l'affichage de n messages de forum, alors que je l'utilisais déjà dans mon index ! En fait, l'idéal, ça serait une sorte de "include(/sujet/index/12/page:3)" dans ma vue "edit", mais faire ça de manière propre me semble difficile. Lien vers le commentaire Partager sur d’autres sites More sharing options...
pluriels Posté 26 Février 2009 Partager Posté 26 Février 2009 d'où l'appel discret ajax par contre au niveau de l'optimisation ce n'est pas génial Ma solution : - Crée un éléments pour afficher x messages exemple : mon_element.ctp<?phpforeach($messages as $message){ echo $message['Message']['contenu'].'<br>'; // tu as le droit de faire plus joli !}?> Controleur : function index(){ $this->set('messages', $this->Message->find('all', $options));}function edit($sujet_id){ $options['conditions'] = array("Message.sujet_id"=>$sujet_id); $this->set('messages', $this->Message->find('all', $options)); // tu rajoutes ici les traitements pour ton formulaire} Vues - ta vue index.ctp<?php$this->renderElement('mon_element', array('messages'),$messages);?>- ta vue edit.ctp<?php$this->renderElement('mon_element', array('messages'),$messages);...// code de ton formulaire?> Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant