Les balises dynamiques - comments Les balises dynamiques 2020-09-17T11:27:38Z https://contrib.spip.net/Les-balises-dynamiques#comment506330 2020-09-17T11:27:38Z <p>Bonjour,<br class="autobr" /> Merci pour cet article. Il est très ancien, mais je ne vois pas où apporter ma petite pierre à l'édifice. J'ai beaucoup de difficultés avec les balises dynamiques. <br class="autobr" /> Je pense avoir compris comment cela fonctionne avec un squelette de formulaire, mais je n'ai pas réussi à faire fonctionner le filtrage sur une balise dynamique renvoyant une valeur simple.</p> <p>Dans les exemples qui suivent, la fonction get_saas_usages() retourne un array associatif. Je suppose que c'est tout ce qu'il y a à en connaître, je ne pense pas qu'il soit utile de la décrire plus :</p> <div class="precode"><pre dir="ltr" style="text-align: left;" class="php"><code><span class="co4">/** get_saas_usages * Appelle ... pour obtenir les usages. * @param mixed $index : facultatif, nom de l'usage dont on veut la valeur * @return : mixed : * si $index vide ou null, retourne un tableau associatif des usages * si $index non null, retourne la valeur désignée(string), ou null si elle n'existe pas. * * Exemple de retour avec $index null : * $usages * : array = * brw: string = "2" * uat: string = "4" * testbrw: string = "1" * testuat: string = "0" * */</span> <span class="kw2">function</span> get_saas_usages<span class="br0">&#40;</span> <span class="re0">$index</span> <span class="sy0">=</span> <span class="kw4">null</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="re0">$usages</span> <span class="sy0">=</span> <span class="sy0">...</span> <span class="co1">// Obtient les usages ...</span> <span class="kw1">if</span> <span class="br0">&#40;</span> <a href="http://www.php.net/is_null" rel='nofollow'><span class="kw3">is_null</span></a><span class="br0">&#40;</span><span class="re0">$index</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="re0">$usages</span><span class="sy0">;</span> <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="re0">$usages</span><span class="br0">&#91;</span><span class="re0">$index</span><span class="br0">&#93;</span><span class="sy0">;</span> <span class="br0">&#125;</span> <span class="br0">&#125;</span></code></pre></div> <p><strong>Mon but est d'afficher et/ou d'appliquer des filtres sur la valeur retournée par la balise, par exemple :</strong></p> <div class="precode"><pre dir="ltr" style="text-align: left;" class="spip"><code><span class="re4">[</span><span class="re4">(</span><span class="re1">#USAGES</span><span class="re40">{testbrw}</span><span class="re50">|==</span><span class="re40">{0}</span><span class="re50">|oui</span><span class="re4">)</span> ... <span class="re4">]</span></code></pre></div> <h2 class="h2">Balise statique</h2> <p>Juste pour montrer la différence avec la balise dynamique qui va suivre :</p> <div class="precode"><pre dir="ltr" style="text-align: left;" class="php"><code><span class="co4">/** * balise statique #USAGES{index} * * @param mixed $p * @return Champ */</span> <span class="kw2">function</span> balise_USAGES <span class="br0">&#40;</span><span class="re0">$p</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="re0">$index</span> <span class="sy0">=</span> <a href="http://www.php.net/trim" rel='nofollow'><span class="kw3">trim</span></a><span class="br0">&#40;</span> interprete_argument_balise <span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span> <span class="re0">$p</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="st0">"'"</span> <span class="br0">&#41;</span><span class="sy0">;</span> <span class="re0">$p</span><span class="sy0">-></span><span class="me1">code</span> <span class="sy0">=</span> <span class="st0">"'"</span> <span class="sy0">.</span> get_saas_usages<span class="br0">&#40;</span> <span class="re0">$index</span> <span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">"'"</span><span class="sy0">;</span> <span class="re0">$p</span><span class="sy0">-></span><span class="me1">interdire_scripts</span> <span class="sy0">=</span> <span class="kw4">true</span><span class="sy0">;</span> <span class="kw1">return</span> <span class="re0">$p</span><span class="sy0">;</span> <span class="br0">&#125;</span> </code></pre></div> <p>Cette balise fonctionne avec des filtres. Mais la valeur retournée est statique dans le sens où elle est mise en cache par SPIP au rafraîchissement de la page, on obtient la valeur précédente, pas la valeur courante, tant que délai du cache ( de la page où la balise est incluse? ) n'est pas écoulé.</p> <h2 class="h2">Balise dynamique</h2><div class="precode"><pre dir="ltr" style="text-align: left;" class="php"><code><span class="co4">/**[23] balise/usages.php * Balise dynamique #USAGES */</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><a href="http://www.php.net/defined" rel='nofollow'><span class="kw3">defined</span></a><span class="br0">&#40;</span><span class="st_h">'_ECRIRE_INC_VERSION'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span><span class="sy0">;</span> <span class="br0">&#125;</span> <span class="kw2">function</span> balise_USAGES<span class="br0">&#40;</span><span class="re0">$p</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> calculer_balise_dynamique<span class="br0">&#40;</span><span class="re0">$p</span><span class="sy0">,</span> <span class="st_h">'USAGES'</span><span class="sy0">,</span> <a href="http://www.php.net/array" rel='nofollow'><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="br0">&#125;</span> <span class="kw2">function</span> balise_USAGES_stat<span class="br0">&#40;</span><span class="re0">$args</span><span class="sy0">,</span> <span class="re0">$context_compil</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="re0">$index</span> <span class="sy0">=</span> <a href="http://www.php.net/isset" rel='nofollow'><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$args</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span> ? <span class="re0">$args</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="sy0">:</span> <span class="st_h">''</span><span class="sy0">;</span> <span class="kw1">return</span> <a href="http://www.php.net/array" rel='nofollow'><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="re0">$index</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="br0">&#125;</span> <span class="kw2">function</span> balise_USAGES_dyn<span class="br0">&#40;</span><span class="re0">$index</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="re0">$usage</span> <span class="sy0">=</span> get_saas_usages<span class="br0">&#40;</span><span class="re0">$index</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="kw1">return</span> <span class="re0">$usage</span><span class="sy0">;</span> <span class="br0">&#125;</span></code></pre></div> <p>Sous la forme simple :<br class="autobr" /> <span class="coloration_code code"><code class="spip_spip code" data-clipboard-text="USAGES{testuat}">USAGES<span class="re40">{testuat}</span></code></span> <br class="autobr" /> par exemple, la balise affiche correctement la valeur, et ce, de façon dynamique, c'est à dire sans mise en cache. Mais si on lui applique des filtres, rien ne va plus.</p> <h2 class="h2">Contournement avec un filtre</h2> <p>Je pense avoir compris qu'appliquer les filtres classiques à une balise dynamique n'aurait pas de sens. Pourtant l'écriture :<br class="autobr" /> <span class="coloration_code code"><code class="spip_spip code" data-clipboard-text="[(#USAGES{testbrw}|=={0}|oui) ... ]"><span class="re4">[</span><span class="re4">(</span><span class="re1">#USAGES</span><span class="re40">{testbrw}</span><span class="re50">|==</span><span class="re40">{0}</span><span class="re50">|oui</span><span class="re4">)</span> ... <span class="re4">]</span></code></span> <br class="autobr" /> serait cohérente me semble-t-il.</p> <p>Il faut donc y arriver autrement. <br class="autobr" /> Voici une méthode mettant en jeu un filtre particulier appliqué à une balise #REM :<br class="autobr" /> <span class="coloration_code code"><code class="spip_spip code" data-clipboard-text="[(#REM|usage{testbrw}|=={0}|oui) ... ]"><span class="re4">[</span><span class="re4">(</span><span class="re1">#REM</span><span class="re50">|usage</span><span class="re40">{testbrw}</span><span class="re50">|==</span><span class="re40">{0}</span><span class="re50">|oui</span><span class="re4">)</span> ... <span class="re4">]</span></code></span></p> <p>Voici le filtre usage, qui est un simple appel à la fonction get_usages() :</p> <div class="precode"><pre dir="ltr" style="text-align: left;" class="php"><code><span class="co4">/** * Filtre usage * * @param mixed $void : non utilisé, on applique le filtre à n'importe quelle balise statique, #REM par exemple. * @param string $index : facultatif, nom de la valeur d'usage à retourner. * @return : comme la fonction get_saas_usages(). */</span> <span class="kw2">function</span> filtre_usage<span class="br0">&#40;</span> <span class="re0">$void</span><span class="sy0">,</span> <span class="re0">$index</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> get_saas_usages<span class="br0">&#40;</span> <span class="re0">$index</span> <span class="br0">&#41;</span><span class="sy0">;</span> <span class="br0">&#125;</span></code></pre></div> <p>Cela fonctionne exactement comme je le souhaite.<br class="autobr" /> Ce qui se passe, c'est que la balise statique #REM accepte le filtre, et c'est ce dernier qui assure la lecture des données de façon dynamique.</p> <p>J'espère avoir aidé à quelque chose. Si je me suis égaré ( en particulier si j'ai mal écrit la balise dynamique ) merci pour les commentaires.</p> <p>Merci encore et bravo à tous ceux qui font la doc de SPIP !</p> Les balises dynamiques 2020-09-17T11:25:02Z https://contrib.spip.net/Les-balises-dynamiques#comment506329 2020-09-17T11:25:02Z <p>Bonjour,<br class="autobr" /> Merci pour cet article. Il est très ancien, mais je ne vois pas où apporter ma petite pierre à l'édifice. J'ai beaucoup de difficultés avec les balises dynamiques. <br class="autobr" /> Je pense avoir compris comment cela fonctionne avec un squelette de formulaire, mais je n'ai pas réussi à faire fonctionner le filtrage sur une balise dynamique renvoyant une valeur simple.</p> <p>Dans les exemples qui suivent, la fonction get_saas_usages() retourne un array associatif. Je suppose que c'est tout ce qu'il y a à en connaître, je ne pense pas qu'il soit utile de la décrire plus :</p> <div class="precode"><pre dir="ltr" style="text-align: left;" class="php"><code><span class="co4">/** get_saas_usages * Appelle ... pour obtenir les usages. * @param mixed $index : facultatif, nom de l'usage dont on veut la valeur * @return : mixed : * si $index vide ou null, retourne un tableau associatif des usages * si $index non null, retourne la valeur désignée(string), ou null si elle n'existe pas. * * Exemple de retour avec $index null : * $usages * : array = * brw: string = "2" * uat: string = "4" * testbrw: string = "1" * testuat: string = "0" * */</span> <span class="kw2">function</span> get_saas_usages<span class="br0">&#40;</span> <span class="re0">$index</span> <span class="sy0">=</span> <span class="kw4">null</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="re0">$usages</span> <span class="sy0">=</span> <span class="sy0">...</span> <span class="co1">// Obtient les usages ...</span> <span class="kw1">if</span> <span class="br0">&#40;</span> <a href="http://www.php.net/is_null" rel='nofollow'><span class="kw3">is_null</span></a><span class="br0">&#40;</span><span class="re0">$index</span><span class="br0">&#41;</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="re0">$usages</span><span class="sy0">;</span> <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span> <span class="kw1">return</span> <span class="re0">$usages</span><span class="br0">&#91;</span><span class="re0">$index</span><span class="br0">&#93;</span><span class="sy0">;</span> <span class="br0">&#125;</span> <span class="br0">&#125;</span></code></pre></div> <p><strong>Mon but est d'afficher et/ou d'appliquer des filtres sur la valeur retournée par la balise, par exemple :</strong></p> <div class="precode"><pre dir="ltr" style="text-align: left;" class="spip"><code><span class="re4">[</span><span class="re4">(</span><span class="re1">#USAGES</span><span class="re40">{testbrw}</span><span class="re50">|==</span><span class="re40">{0}</span><span class="re50">|oui</span><span class="re4">)</span> ... <span class="re4">]</span></code></pre></div> <h2 class="h2">Balise statique</h2> <p>Juste pour montrer la différence avec la balise dynamique qui va suivre :</p> <div class="precode"><pre dir="ltr" style="text-align: left;" class="php"><code><span class="co4">/** * balise statique #USAGES{index} * * @param mixed $p * @return Champ */</span> <span class="kw2">function</span> balise_USAGES <span class="br0">&#40;</span><span class="re0">$p</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="re0">$index</span> <span class="sy0">=</span> <a href="http://www.php.net/trim" rel='nofollow'><span class="kw3">trim</span></a><span class="br0">&#40;</span> interprete_argument_balise <span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span> <span class="re0">$p</span><span class="br0">&#41;</span><span class="sy0">,</span><span class="st0">"'"</span> <span class="br0">&#41;</span><span class="sy0">;</span> <span class="re0">$p</span><span class="sy0">-></span><span class="me1">code</span> <span class="sy0">=</span> <span class="st0">"'"</span> <span class="sy0">.</span> get_saas_usages<span class="br0">&#40;</span> <span class="re0">$index</span> <span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">"'"</span><span class="sy0">;</span> <span class="re0">$p</span><span class="sy0">-></span><span class="me1">interdire_scripts</span> <span class="sy0">=</span> <span class="kw4">true</span><span class="sy0">;</span> <span class="kw1">return</span> <span class="re0">$p</span><span class="sy0">;</span> <span class="br0">&#125;</span> </code></pre></div> <p>Cette balise fonctionne avec des filtres. Mais la valeur retournée est statique dans le sens où elle est mise en cache par SPIP au rafraîchissement de la page, on obtient la valeur précédente, pas la valeur courante, tant que délai du cache ( de la page où la balise est incluse? ) n'est pas écoulé.</p> <h2 class="h2">Balise dynamique</h2><div class="precode"><pre dir="ltr" style="text-align: left;" class="php"><code><span class="co4">/**[23] balise/usages.php * Balise dynamique #USAGES */</span> <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><a href="http://www.php.net/defined" rel='nofollow'><span class="kw3">defined</span></a><span class="br0">&#40;</span><span class="st_h">'_ECRIRE_INC_VERSION'</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span><span class="sy0">;</span> <span class="br0">&#125;</span> <span class="kw2">function</span> balise_USAGES<span class="br0">&#40;</span><span class="re0">$p</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> calculer_balise_dynamique<span class="br0">&#40;</span><span class="re0">$p</span><span class="sy0">,</span> <span class="st_h">'USAGES'</span><span class="sy0">,</span> <a href="http://www.php.net/array" rel='nofollow'><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="br0">&#125;</span> <span class="kw2">function</span> balise_USAGES_stat<span class="br0">&#40;</span><span class="re0">$args</span><span class="sy0">,</span> <span class="re0">$context_compil</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="re0">$index</span> <span class="sy0">=</span> <a href="http://www.php.net/isset" rel='nofollow'><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$args</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span> ? <span class="re0">$args</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="sy0">:</span> <span class="st_h">''</span><span class="sy0">;</span> <span class="kw1">return</span> <a href="http://www.php.net/array" rel='nofollow'><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="re0">$index</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="br0">&#125;</span> <span class="kw2">function</span> balise_USAGES_dyn<span class="br0">&#40;</span><span class="re0">$index</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="re0">$usage</span> <span class="sy0">=</span> get_saas_usages<span class="br0">&#40;</span><span class="re0">$index</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="kw1">return</span> <span class="re0">$usage</span><span class="sy0">;</span> <span class="br0">&#125;</span></code></pre></div> <p>Sous la forme simple :<br class="autobr" /> <span class="coloration_code code"><code class="spip_spip code" data-clipboard-text="USAGES{testuat}">USAGES<span class="re40">{testuat}</span></code></span> <br class="autobr" /> par exemple, la balise affiche correctement la valeur, et ce, de façon dynamique, c'est à dire sans mise en cache. Mais si on lui applique des filtres, rien ne va plus.</p> <h2 class="h2">Contournement avec un filtre</h2> <p>Je pense avoir compris qu'appliquer les filtres classiques à une balise dynamique n'aurait pas de sens. Pourtant l'écriture :<br class="autobr" /> <span class="coloration_code code"><code class="spip_spip code" data-clipboard-text="[(#USAGES{testbrw}|=={0}|oui) ... ]"><span class="re4">[</span><span class="re4">(</span><span class="re1">#USAGES</span><span class="re40">{testbrw}</span><span class="re50">|==</span><span class="re40">{0}</span><span class="re50">|oui</span><span class="re4">)</span> ... <span class="re4">]</span></code></span> <br class="autobr" /> serait cohérente me semble-t-il.</p> <p>Il faut donc y arriver autrement. <br class="autobr" /> Voici une méthode mettant en jeu un filtre particulier appliqué à une balise #REM :<br class="autobr" /> <span class="coloration_code code"><code class="spip_spip code" data-clipboard-text="[(#REM|usage{testbrw}|=={0}|oui) ... ]"><span class="re4">[</span><span class="re4">(</span><span class="re1">#REM</span><span class="re50">|usage</span><span class="re40">{testbrw}</span><span class="re50">|==</span><span class="re40">{0}</span><span class="re50">|oui</span><span class="re4">)</span> ... <span class="re4">]</span></code></span></p> <p>Voici le filtre usage, qui est un simple appel à la fonction get_usages() :</p> <div class="precode"><pre dir="ltr" style="text-align: left;" class="php"><code><span class="co4">/** * Filtre usage * * @param mixed $void : non utilisé, on applique le filtre à n'importe quelle balise statique, #REM par exemple. * @param string $index : facultatif, nom de la valeur d'usage à retourner. * @return : comme la fonction get_saas_usages(). */</span> <span class="kw2">function</span> filtre_usage<span class="br0">&#40;</span> <span class="re0">$void</span><span class="sy0">,</span> <span class="re0">$index</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> get_saas_usages<span class="br0">&#40;</span> <span class="re0">$index</span> <span class="br0">&#41;</span><span class="sy0">;</span> <span class="br0">&#125;</span></code></pre></div> <p>Cela fonctionne exactement comme je le souhaite.<br class="autobr" /> Ce qui se passe, c'est que la balise statique #REM accepte le filtre, et c'est ce dernier qui assure la lecture des données de façon dynamique.</p> <p>J'espère avoir aidé à quelque chose. Si je me suis égaré ( en particulier si j'ai mal écrit la balise dynamique ) merci pour les commentaires.</p> <p>Merci encore et bravo à tous ceux qui font la doc de SPIP !</p> Les balises statiques 2008-05-23T11:54:16Z https://contrib.spip.net/Les-balises-dynamiques#comment406310 2008-05-23T11:54:16Z <p>I would like to know how to access <i>id_rubrique</i> when present in <code>$p</code>, the argument of <strong>function balise_JOHN_DOE($p)</strong> without using a dinamique balise.</p> <p>I tried <code>champ_sql('id_rubrique', $p);</code> but this doesn't actually return the value of <i>id_rubrique</i>.</p> <p><code>print_r(champ_sql('id_rubrique', $p))</code> gives<br class="manualbr" /><code>$Pile[$SP]['id_rubrique'] or $Pile[0]['id_rubrique'] </code></p> <p>What does it means?</p> <p>Can someone help me?</p> <p>You can also answer in french, I can read it. Thanks</p> Merci ! 2007-07-28T12:39:32Z https://contrib.spip.net/Les-balises-dynamiques#comment396473 2007-07-28T12:39:32Z <p>Grâce à ton article, je viens de créer mon premier balbutiement de plugin qui crée une balse dynamique ... Thank you !</p> Les balises dynamiques 2007-06-26T04:55:45Z https://contrib.spip.net/Les-balises-dynamiques#comment395394 2007-06-26T04:55:45Z <p>Attention les accolades ne sont pas toujours passées dans les extraits que tu as insérés dans le corps de l'article.</p> Les balises dynamiques 2007-06-25T09:48:52Z https://contrib.spip.net/Les-balises-dynamiques#comment395368 2007-06-25T09:48:52Z <p>Bonjour,</p> <p>merci,</p> <p>j'ai intégré ce que j'ai compris. Je pense que l'article va encore évoluer.</p> Les balises dynamiques 2007-06-25T00:15:51Z https://contrib.spip.net/Les-balises-dynamiques#comment395361 2007-06-25T00:15:51Z <p>Bonjour et merci pour ce très bon article.</p> <p>La documentation officielle de Spip ayant quelques lacunes, je trouve que toute initiative permettant de mieux comprendre le développement des squelettes, filtres, balises, plugins, etc. est à saluer absolument et, je dirais même, à encourager vivement, c'est pourquoi : un grand BRAVO !!!</p> <p>Quelque petites remarques cependant :</p> <p>- J'aurais aimé trouver quelques exemples d'utilisation des balises dynamiques et statiques, histoire de mieux en faire la différence et savoir, en somme, quand et pourquoi utiliser l'une ou l'autre, si quelqu'un pouvait apporter un éclairage sur ce sujet, ce serait très utile je pense...</p> <p>- Au niveau du texte de l'article, dans un souci de clareté, je trouve qu'il serait mieux d'indiquer le nom d'une fonction lorsqu'il faut l'évoquer à plusieurs reprises, au lieu de « la fonction précédente » ou « la dîte fonction précédente », mais ce n'est qu'une opinion personnelle...</p> <p>- Enfin, à mon humble avis, l'idéal aurait été de développer, pas à pas, une balise d'exemple (même bidon) à la fin de l'article, afin de bien comprendre, par la pratique, l'utilisation des différentes fonctions, le passage des arguments, l'utilisation dans un squelette, etc.</p> <p>Bref, encore bravo et merci pour cet article fort instructif, j'espère qu'il sera peu à peu étoffé par quelques exemples et, qui sait, par le développement détaillé et commenté d'une balise dynamique “fonctionnelle”, histoire que chaqu'un puisse s'en servir comme base de travail pour en concevoir d'autres.</p> <p>à+ :-)</p> Les balises dynamiques 2007-06-24T20:18:34Z https://contrib.spip.net/Les-balises-dynamiques#comment395350 2007-06-24T20:18:34Z <p>C'est sympa d'écrire cette doc que je ne me suis jamais décidé à rédiger car je suis encore insatisfait de cette architecture, bien qu'elle ait constitué déjà un progrès en mettant en squelette la partie HTML qui, avant la 1.8, était codée en dur dans les scripts PHP. En remerciement, quelques réponses à tes questions.</p> <p><code>$p</code> est le contexte de compilation dont a besoin <code>calculer_balise_dynamique</code>, entre autres pour compiler correctement les valeurs demandées par le tableau de la première fonction, ainsi que les éventuels arguments de la balise elle-meme (forme: <code>#BALISE_DYN{arg1, arg2...}</code>) qui seront alors ajoutés à la fin du dit tableau.</p> <p>Effectivement ce dit tableau sera la valeur du premier paramètre de la fonction suffixée par <code>_stat</code> (avec les éventuels arguments de la balise donc). Si le résultat de cette deuxième fonction est un tableau (souvent identique à celui reçu mais pas forcément), ce sera la liste ordonnée des paramètres de la fonction suffixée par <code>_dyn</code>. Si ce n'est pas un tableau mais une chaîne (pas nécessairement vide, comme ta rédaction peut le faire croire), cette chaîne sera affichée et on s'arrête effectivement là. C'est essentiellement fait pour les formulaires interdits par la configuration du site (inscription etc): il faut repérer la situation au plus tôt car ça économise une passe de PHP à l'affichage final.</p> <p>Le deuxième argument de la deuxième fonction est le tableau des éventuels pseudo-filtres de la balise (dans <code>[(#FOO|bar|foobar)]</code> ce tableau aura donc deux éléments <code>bar</code> et <code>foobar</code>). Ces valeurs <i>ne sont pas</i> des fonctions à appliquer, c'est pourquoi j'ai dit <i>pseudo-filtres</i>. Il ne faut pas utiliser cette syntaxe historique qui est trompeuse et vouée à disparaitre, et lui préférer la syntaxe <code>#FOO{bar, foobar}</code> décrite ci-dessus. Une balise dynamique à ce stade produit un code PHP à exécuter, non pas déjà du HTML filtrable: c'est comme pour INCLURE, on ne peut appliquer un traitement postérieur, ce sera déjà parti dans le flux de sortie.</p> <p>Dans le résultat de la troisième fonction, le deuxième élément est la durée de vie du cache que l'on va produire. Dans la plupart des utilisations il faut le mettre à 0 en effet, car le code HTML produit dépend en général des valeurs figurant dans $_POST: il est rare qu'on puisse partager deux appels en POST, il vaut donc mieux ne pas encombrer le cache.</p> <p>Les balises dynamiques, en dernière analyse, sont des INCLURE conditionnels (grâce aux fonctions _stat quand elles ne renvoient pas un tableau) et dont l'environnement est spécifié dans le code PHP plutôt que dans le squelette, ce qui est plus concis mais moins clair. Il faudrait unifier tout ça.</p>