Je poste sur cette liste car je pense que mon besoin nécessite un développement et je sollicite votre avis de développeur sur le "comment faire".
Je souhaite réaliser des calculs à partir de données stockées par FORMIDABLE.
Les calculs peuvent être faits à partir de données provenant de plusieurs formulaires répartis dans plusieurs articles.
Par exemple :
- dans un article A, un formulaire me demande une longueur
- dans un article B, un autre formulaire me demande une largeur
- dans un article C, je veux afficher la surface (=longueur x largeur).
Les données sont stockées dans la bdd formidable et sont liées à chaque visiteur connecté. OK.
Je sais déjà comment récupérer les données dans la bdd. J'ai fait un modèle pour cela.
Idéalement, je souhaite déclarer les données et les calculs correspondant dans le corps de l'article.
J'avais pensé à faire cela sous forme de modèle :
<calcul1|retour = surface|traitement = $formA[longueur] * $formB[largeur]>
Attention tout de même, avec eval() : à ce que personne ne vienne saisir dans un forum :
< calcul1|retour = surface|traitement = sql_delete(’*’, ‘spip_articles’) >
J’avais aussi pensé à la solution du filtre. Mais cela s’appliquerait à tous mes sites qui utilisent le même squelette. Je pensais au modèle car cela me permettrait de le faire en plugin et donc ne l’activer que pour les sites que je souhaite.
En plus, je voudrais que le calcul soit fait systématiquement et non qu’il soit mis en cache.
Car le visiteur peut modifier les données du formulaire FORMIDABLE à tout moment et donc il faut recalculer.
Si je mets du PHP dans le modèle, est-ce le code ou le résultat qui est mis en cache ?
Si je fais avec un filtre, c’est le résultat qui sera mis en cache, non ?
Pour le reste, tu confirmes ce que j’intuitais et je te remercie.
J'avais aussi pensé à la solution du filtre. Mais cela s'appliquerait à
tous mes sites qui utilisent le même squelette. Je pensais au modèle car
cela me permettrait de le faire en plugin et donc ne l'activer que pour
les sites que je souhaite.
Il suffit de coller ce modèle et le filtre associé dans un plugin distinct.
En plus, je voudrais que le calcul soit fait systématiquement et non
qu'il soit mis en cache.
Un cache à 0 sur le modèle et zou.
ps : ce fil a plus sa place sur spip-zone (liste des contributions et des plugins) que sur spip-dev (liste du développement de spip).
J'avais aussi pensé à la solution du filtre. Mais cela s'appliquerait à
tous mes sites qui utilisent le même squelette. Je pensais au modèle car
cela me permettrait de le faire en plugin et donc ne l'activer que pour
les sites que je souhaite.
Il suffit de coller ce modèle et le filtre associé dans un plugin distinct.
En plus, je voudrais que le calcul soit fait systématiquement et non
qu'il soit mis en cache.
Un cache à 0 sur le modèle et zou.
Apparemment, le cache{0} ne fonctionne pas sur les modèles. Le modèle hérite du cache de article.html
C'est ce que j'ai constaté
ps : ce fil a plus sa place sur spip-zone (liste des contributions et des plugins) que sur spip-dev (liste du développement de spip).
A chaque fois, je confonds les deux. Désolé.
Je forwarde sur la zone.
Désolé pour le dérangement.
Apparemment, le cache{0} ne fonctionne pas sur les modèles. Le modèle hérite du cache de article.html
C’est ce que j’ai constaté
oui tout à fait ; ce qu’on met en cache ce n’est pas le fait qu’on appelle le modèle (comme c’est le cas d’un ), mais le résultat de l’appel au modèle (ça ressemble de ce point de vue à un #INCLURE).
Une solution consiste à avoir une balise qui renvoie non le résultat mais l’appel à une fonction qui calcule le résultat. Dès lors, ce qui est mis en cache est, si je ne me trompe pas, le code PHP à exécuter.
Une solution consiste à avoir une balise qui renvoie non le résultat mais l’appel à une fonction qui calcule le résultat. Dès lors, ce qui est mis en cache est, si je ne me trompe pas, le code PHP à exécuter.
Oui c’est une « balise dynamique », comme un formulaire.
Autre possibilité, peut-être plus simple : produire la formule en javascript, qui s’exécutera dans la page.
C'est une excellente idée sauf qu'à un moment, le visiteur clique sur un bouton pour générer un PDF de son projet. Le PDF est la concaténation de toute une rubrique, et inclut tous les articles correspondant, dont les formulaires et les calculs.
J'utilise le plugin SPIPDF qui se base sur un squelette spécial. Et donc le javascript ne fonctionne pas dans le PDF. DOMMAGE.
Juste pour mon éducation, qu’apporte en plus une balise dynamique insérée dans un modèle par rapport à insérer le code PHP directement dans le modèle ?