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