Bonjour,

Je développe une appli et j'ai un soucis d'organisation de mon code je vous explique le contexte méga simplifié.
J'ai une page qui liste deux tables, sur cette page on peut faire un appel ajax qui rafraîchit les données (de ces 2 tables donc via des boutons liés à du jQuery).

Bon quand j'ai commencé, j'ai tout mis dans une fonction, ce qui fait que j'ai une grosse fonction et j'y vais à coup de loadModel et find, puis je les affiche dans ma vue ce qui fait que j'ai également une grosse vue.
A partir de la quand on click sur les boutons pour avoir un refresh (en ajax) des données ça appelle le controlleur en question qui me retourne ma vue et j'affiche cela dans ma page principale.

Effectivement ça marche...

Mais vous l'aurez compris, ça fait que j'ai 2 fois le même code dans deux fonctions différentes et 1 affichage identique aussi dans 2 vues différentes (1poour le chargement de la page principale + 1 pour chaque appel ajax).

Je voulais savoir comment est-ce que je peux me débrouiller pour n'avoir qu'une fonction qui charge la vue principale et qui intelligemment va appeler et afficher les deux autres fonctions.

J'ai vu qu'il y avait les éléments mais j'ai l'impression que c'est vrai pour un menu qui se répète pour plusieurs page (ex menu qui liste les catégories, ce qui n'est pas mon cas puisque c'est un problème de redondance de code)
RequestAction ? Mais à priori ça pourri un peu le chargement de la page.

Exemple :
1 controller Page : fonction index = listR + listI
1 controller Recettes : fonction listR
1 controller Ingrédients :fonctions listI

Je fais appel à Page, qui doit faire appel à listR et listI pour l'afficher dans index.ctp (sachant que ce qui serait cool c'est de laisser le code html des list dans les listR.ctp et listI.ctp, afin de pouvoir réinjecter en ajax le code html plus facilement).

Merci pour votre aide.

1 réponse


salut, tu peux détecter avec cake quand un appel se fait en ajax par $this->request->is('ajax'), tu pourrai essayer quelque chose du type

class Controller expends AppContrlller{
    function ma_fonction(){
        if($this->request->is('ajax')){
            // ton code pour l'ajax
        }
        else{
            // ton code pour le non ajax
        }
    }
}

tu peux faire à la limite des find avec de vérifier ton ajax puis si ajax, tu renvois tes datas en json, sinon tu renvois tes datas classiques