Aller au contenu

[CakePHP] Affichage du résultat d'une méthode


Sujets conseillés

Posté

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. :)

Posté

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 :P)

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

Posté

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.

Posté

d'où l'appel discret ajax :P

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
<?php
foreach($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
?>

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...