Christian Lefebvre wrote:
sql, et encore moins sans procédures stockées et/ou curseurs.
La mise à jour d'une table des liens entre descendants est assez
space à coder, mais ça n'est en fait qu'un seul insert/select lors de
l'ajout d'une rubrique.
Le seul cas chiant, c'est le déplacement de rubrique, mais même ça,
c'est pas irréalisable (dans le projet ou j'ai fait ça, il n'y avait pas
cette fonctionnalité, je n'avais donc pas essayé d'écrire le sql
associé, mais ça paraissait jouable).
À cote de ça, récupérer la hierarchie par un select (presque)
aussi simple que celui pour récupérer les fils d'une rubrique par
exemple, ça simplifierait pas mal le compilateur de squelettes.
À+, Pif.
et pourquoi ne pas regarder vers ca : Tree
en ce moment, je galere un max avec SPIP. Qui me genere des erreurs aléatoires, pour les
plus curieux, c'est dans Mantis.
Du coup, sur un coup de tete, je me suis amusé a réecrire : inc-calcul-squelette qui fait 2300 lignes.
Je l'ai découpé en plusieurs classes qui sont plus fonctionnelles que objets. Mais pour l'instant
c'est plutot prometteur. Je suis dans la meme foulé en train de couper les variables globales. J'espere
que je vais aboutir a qq chose de concret rapidement, puisque j'ai pas bcp de temps.
en gros la fonction principale donne ca :
function calculer_squelette($squelette, $fichier) {
include_once('SpipParser.php');
include_once('SpipEngine.php');
$parser = new SpipParser();
$engine = new SpipEngine();
$html = join(file("$squelette.html"), "");
$tree = $parser->parse($html);
// on pourrait serialiser l'arbre que ca serait pas si mal, rapide et pas du tout casse pied.
// et le restaurer a l'execution plutot que de passer par un fichier intermediaire.
$data = $engine->run($tree);
$engine->write_file($data);
}
- j'ai essayé de regrouper toutes les procedures qui vont ensemble dans la meme classe.
- de supprimer au fure et a mesure les variables glabales.
- de bien séparer l'analyseur du moteur (engine et parser).
je suis plutot vers la fin. J'ai fait comme Christian, un switch pour faire marcher les
2 en paralelle et etre en mesure de comparer les executions.
je suis parti sur un version SPIP de dev 1.7*, pas tres récente. Mais pour l'instant j'ai pas bcp
changé le code il est assez facile de faire les mises a jours.