Bonjour,
Je développe un site avec CakePHP (grâce aux Tuto => merci Grafikart), je l'ai quasi-fini, il ne me manque que la fonction de "Recherche Globale".
Je sais que sur le site de Grafikart cette fonctionnalité est implémenté et je voudrais reproduire quelque chose de la sorte :
-Lorsqu'on tape un mot clé, il va chercher dans la BDD les éléments correspondants.
Auriez-vous une piste de solution?
Merci beaucoup.
tu créés une vue avec les champs de tes différentes tables dans lequel tu veux faire la recherche et ensuite tu créés dans un de tes controller une fonction search().
tu charges ta vue :
//we use the view table here!
$this->TonModel->useTable = 'search_view';
Et ensuite tu récupes les data envoyé par ton formulaire de recherche et tu fais un find avec conditions et un like :
$query'conditions']'Field LIKE'] = "'%".$search."%'";
Et ça tu en fais pour tout les champs de ta vue, après tu mets des OR ou des AND selon tes besoins.
Ensuite tu balances ta query dans ton find(); et tu affiches les résultats retournés.
Ensuite à toi d'organiser tes données retournées.
ça me parait être une solution simple de faire ce que tu veux et cela permet d'inclure toute tes tables/models.
Cordialement
Tu utilise ton controller Post, qui utilise le model Post, quand quelqu'un entre un mot, tu entre dans ton controller avec une action search, qui va chercher les éléments dont le contenu d'un post %LIKE% le chanmp ou encore le titre %LIKE% ton champ.
Tu le met en pagination et tu envois à la vue. Pour cybler les éléments à récupérer tu utilise le type. Ca doit ressembler à ça:
$d'liste'] = $this->Paginate('Post',array('conditions'=>array('type'=>array('page','post'),'content like'=>"'%".$search."%'"));
Et si c'est pour plusieurs controller? J'appelle quelle fonction lors de la recherche?!
Tu peux identifier le controller avec une chekbox par exemple.
Rechercher dans les pages; Rechercher dans les articles; Rechercher dans les commentaires.
Ce qu'il faut c'est faire un MVC appelé Recherche. C'est ce MVC que tu vas appelé depuis ton formulaire. Et c'est ce MVC qui doit se charger de trouver le bon Controller suivant ton besoin. C'est ce que l'on appelle le Factory pattern. L'avantage c'est que tu ne dialogue qu'avec un seul élément (ici Search) qui va gérer en interne ce qu'il faut faire. Si tu rajoutes un autre Controller (genre pages ou users) tu le fera dans ton MVC Search et cela n'impliquera pas les autres MVC. C'est le principe de couplage faible. Ton code devient plus réutilisable.
@Ciloe : Je vois ce que tu veux dire mais ca fait un peu "roots".. :s
@prbaron : Je vois ce qu'est un Factory pattern, couplage faible, etc... Mais faire un MVC à coté de l'actuel, ça me parait assez compliqué, même si ça reste la meilleure solution pour une grosse BDD. Pour moi ce n'est pas le cas, et je suis assez pressé niveau temps. Il n'y aura-t-il pas une solution plus simple?
Je tape le nom d'un client ou d'un employé, et ça m'affiche une liste qui me propose de cliquer sur la fiche client ou la fiche de l'employé.
Ou sinon, je tape un département et ça affiche une liste de tous les clients qui sont dans ce département, etc...