Re: avancement des travaux
Eric Daspet <[email protected]> Fri, 27 Feb 2004 01:18:36 +0000
| Newsgroups | gmane.comp.web.blogv2.devel |
|---|---|
| Message-ID | <[email protected]> |
Le ven 27/02/2004 à 00:01, Gregoire Cachet a écrit : > salut tout le monde !! > > Au menu de ce soir, pour rompre le silence pesant ... la gestion des > catégories ! Merci de compenser mes absences ;) J'ai un peu honte du faible temps que je suis capable d'apporter au projet depuis 2 mois, j'espere que ça se résolvera vite (mais bon, comme ce n'est pas la première fois que je dis ça je prend mes précautions maintenant). > C'est pas tout a fait terminé, mais c'est en bonne voie. J'arrive a > créer des catégories ayant des catégories parentes multiples, dans > n'importe quelle langue Chouette Enfin ceci dit si tu as problème avec les langues c'est à mon avis quelque chose d'annexe, il vaut mieux avoir quelque chose qui marche sans les langues si ça te permet d'aller plus vite. > Le cache est presque fonctionnel, il travaille sur la date de derniere modif > > Seulement quelques points noirs subsistent : > > quand il n'y a pas de réponse, je renvois quoi comme date de derniere > modification ? > - si je renvoit 0, le cache est tjs valide, mais il peut etre faux (si > on a supprimé toutes les données) Hum .. je n'avais pas pensé à ce genre de problématique. Mais normalement on ne supprime jamais rien, au pire on met à jour un champ "non publié" dans la base, du coup il est toujours possible de récupérer le résultat de cette action. > quand on retire des infos d'une liste, comme on sait qu'elle a bougé au > niveau du cache ? En effet, la date de derniere modification de ses > éléments n'a pas forcément bougé ... Par exemple : > > si je prend les catégories > - cat1 > - cat2 > - cat3 > > Si je retire cat3, la date de derniere modif n'aura pas changé (ca sera > max(cat1, cat2) ), mais pourtant la liste ne sera plus la meme ... grrr ... Pfiou, bonne question. Peut être qu'en interne il faudra gérer une date de dernière modif au niveau catégorie, à mettre à jour à chaque fois qu'on touche à une catégorie. Ce n'est pas très glorieux mais c'est efficace. J'ai bien une autre solution mais elle nécessiterait de faire au moins 4 requetes SQL, ce qui n'est pas top vu qu'on parle de l'information qui nous sert de déclenchement de cache (c'est censé etre une info peu couteuse à obtenir). > il faut que je fasse l'invalidation du cache quand la feuille de style a > changé Dans l'idéal je préfère que tu ne touches pas au cache résultat. Au lieu d'invalider le cache c'est aussi bien que tu stockes la date à chaque fois que ça arrive, et que tu la réutilises plus tard comme date de modif minimum. Ainsi tu gardes l'abstraction (tu ne touches pas au cache). > - si les fichiers XLST qui n'existent pas, comment on gere les erreurs ? > assertion ? Ils existent ;) On a deux manières de fonctionner : - On utilise les assertions. Le problème se pose avec les feuilles de style incluses dans d'autres mais j'ai mon idée pour gérer ça : les abstractions de flux. Le module XSL utilise les streams PHP, il suffirait d'en créer un perso nommé xslt: qui ferait les assertions correctes. Une assertion loupée génère une erreur HTTP 500, bête et méchante, c'est simple à gérer. L'utilisation de streams persos permet de faire des jolis trucs par la suite pour surcharger les XSLT (puisqu'on pourra faire de la génération du XSLT en fonction de paramètres si besoin est). - L'autre option est d'utiliser des gestionnaires d'erreur. Juste avant de lancer la transformation on lance un gestionnaire d'erreur PHP classique. Si il y a un problème pendant la transformation on récuperera la chose et on pourra éventuellement générer une exception. Les deux ne sont pas incompatibles d'ailleurs. > - pour les requetes SQL, comment on gere la sécurité sur les chaines ? C'est à dire ? Tu dois toujours faire un échappement sqlite, même si théoriquement ta chaine ne contient rien de choquant. Faire ça de manière automatique sans chercher à savoir si le contenu vaut le coup évitera d'en oublier. > - si je demande d'éditer une catégorie qui n'existe pas, je renvoit quel > type d'erreur ? Qu'entend tu par éditer ? > - pour la création d'une nouvelle catégorie : newElement($id) : l'id est > deja formaté comme y faut et on le verifie ou bien on envoit une chaine > et on en déduit l'id puis on teste ? Je n'aime pas les id ;) mais tu peux essayer de faire un truc plus souple : $cat = new categorie ; $cat->setId($id) ou $cat = new categorie ; $cat->setName($name) ; Et charge à ta classe d'aller récupérer ce qui lui manque en fonction de ce qu'elle a quand tu lui demande des infos. Ceci dit je parle là de théorie. Logiquement seul ton module devrait initialiser des catégories je pense, donc à toi de voir ce qui t'arrange. -- Eric