Bonjour à tous,
Je me permets de me retourner vers la communauté car je bloque actuellement sur une problème depuis hier soir.
Je développe un site d'emplois permettant aux candidats d'enregistrer des recherches a plusieurs critères et de les restaurer. Mon problème et que je ne vois pas comment le faire "proprement". Je suis en voie de trouver une solution en sauvegardant les critères de recherche un par un en base de données mais cela requiert beaucoup de traitement de tableaux pour la sauvegarde et pour la récupération et je trouve personnellement que ça ne fait pas très propre.
Si quelqu'un a une solution je suis preneur !
Merci d'avance ^^
Bonjour.
Quand tu dis d'enregistrer des recherches, tu veux parler de profils de recherches ou des enregitrements retournés par la recherche ?
Car pour le premier je ne te ferais aucune remarque, mais pour la seconde, je te dirais que tu t'y prend mal.
Ensuite, reste à savoir si tu proposes de sauvegarder plusieurs profils de recherche ou un seul.
Pour terminer, il nous faut quand même un peu plus d'informations pour t'aider.
Salut Lartak,
Merci de prendre le temps de m'aider !
Concernant ta première remarque, c'est sauvegarder des profils de recherche ou plus précisement, des critères de recherche. Par exemple, une recherche portant sur un CDI et un CDD, dans tel et tel d'activité ...
je pense que ça répond aussi à ta seconde remarque, c'est à dire sauvegarder plusieurs profiles. J'aurai ainsi accés à des recherches rapides : au lieu de ressaisir l'ensemble des critères de ma recherche, je n'ai qu'à cliquer sur un boutton pour charger l'ensemble des critères.
Je pense qu'une image parle plus !
En cliquant sur les bouttons "Business Analyste" par exemple, ça charge automatiquement les critères de recherche plus bas.
Je vois.
J'ai quelques questions.
Lartak, dans l'ordre :
1. L'utilisateur doit-il être inscrit sur le site pour avoir les profils de recherches personnalisés ? ->
Oui !
2. Est-ce que tu as des tables pour chacun des critères ? ->
Non.
Comme je l'ai dit plus haut, j'étais sur une piste qui a abouti mais je trouve que c'est loin d'être propre :
Le problème c'est que pour l'enregistrement, je créé un nouveau tableau à partir des données envoyées de la vue pour pouvoir les enregistrer dans la base et par la suite, je dois encore les retraiter pour pouvoir les charger : je me retrouve donc avec des foreach imbriqués, des implodes / explodes ...
Je viens de le faire marcher, mais je trouve le code pas très "propre" donc je me dis que peut être il y un autre moyen de le faire. J'ai pensé aux cookie mais ça devient inutile à partir du moment ou si l'utilisateur change de PC ça devient inaccessible.
Merci encore !
Salut,
je dis peut être une bétise mais si ton utilisateur doit être inscrit pour avoir des profils de recherche personnalisés, pourquoi ne pas les stockés en session ?
A chaque fois que ton utilisateur se reconnecte, tu as accès à ses données...
Salut Romano,
Qu'on me corrige si je ne me trompe, mais les Sessions ne sont elles pas stockées uniquement le temps de la session ?
Donc si l'utilisateur ferme son navigateur un long moment il perd l'ensemble des données stockées en session. Du moins c'est ce qui me semble ! Dans mon cas, j'utilise les sessions pour recharger les filtres !
Ce que je voulais dire c'est que tu réinjectes les données en sessions à chaque fois que ton utilisateur se connecte.
Dans ta table recherche, tu peut rajouter un champ du style User_id et récupérer ainsi les données de recherche de chaque utilisateur à chaque fois qu'il se reconnecte sur ton site. Ce sera peut être plus simple pour toi pour ensuite traiter les données ;)
Oui Romano, justement c'est ce que je fais ! J'ai une table dédiée aux recherches sauvegardées que je charge en Session pour pouvoir l'utiliser. Mon problème c'est ce qui vient avant ! Pour que la session puisse lire les données j'ai des opérations de traitement (pas beaucoup non plus quelques lignes) mais j'ai l'impression que ça ne fait pas propre d'où mon envie de faire différement.
En tout cas je te remercie pour le temps que tu me consacres ^^
Je te conseille de faire une table pour chacun des critères ou alors une table pour tous les critères en ajoutant un champ pour les différencier.
Dans le cas où tu fasses une seule table pour l'ensemble des critères, tu peux par exemple nommer le champ type ensuite, dans le modèle, faire un alias d'association pour chacun, du type :
'Contrat' => array(
'className' => 'Filtre',
'conditions' => array(
'Filtre.type' => 'contrat'
)
),
'Secteur' => array(
'className' => 'Fitre'
'conditions' => array(
'Filtre.type' => 'secteur'
)
),
/* etc ... */
Cet exemple est basé dans le cas où la table contenant les différents filtres de critère se nomme filtres
Concernant la gestion des profils de recherche personnalisés, tu crée par exemple une table profils avec des champs :
Puis une table filtres _ profils avec les champs :
Dis toi, qu'en ayant les filtres de critères en base de données ainsi que les profils de recherches, tu pourras plus aisément les gérer.
Concernant le fait de récupérer les profils de recherches de l'utilisateur, pour éviter de faire la requête en permanence lors de toute la durée de la session, tu pourrais la requête lors de l'initialisation de la session (connexion de l'utilisateur), puis la stocker dans une variable de Session, par exemple : Auth.User.Filtres, que tu pourrais récupérer via un :
$this->Session->read('Auth.User.Filtres')
Voilà, ce ne sont bien sûr que quelques suggestions.
Donc si l'utilisateur ferme son navigateur un long moment il perd l'ensemble des données stockées en session. Du moins c'est ce qui me semble ! Dans mon cas, j'utilise les sessions pour recharger les filtres !
Proposes un système de connexion persistante à tes utilisateurs, de leur côté ça les arrangera car ils n'auront pas à se reconnecter à chaque fois et contrairement à un site qui peut contenir des informations confidentielles, le tien n'en a pas et de ton côté tu n'as rien de compliqué à faire pour ce système.
Pour les noms séparés par des underscores (noms de tables ou de champs), il faut bien sûr enlever les espaces, si je ne mets pas les espaces entre les noms et les underscores, le markdown modifie le format de mon texte.