[spip-dev] Créer une balise dédiée à un espace et l'utiliser dans une boucle

Le but de mon exercice est de définir un plugin gérant une table MySQL et une balise dédiée.
Ce que je veux pouvoir faire, c’est une boucle du genre :

<BOUCLE_test(ARTICLES){id_rubrique=#ESPACE{PRO}}>
<a href=« #URL_ARTICLE »>#TITRE

</BOUCLE_test>

Où #ESPACE{PRO} renvoie l’identifiant d’une rubrique gérée par une table MySQL dédiée.

CREATE TABLE espace ( cle varchar(50) NOT NULL, valeur varchar(255) NOT NULL, PRIMARY KEY (cle) )

J’ai déclaré un plugin pour cela avec un répertoire balise dans lequel il y a espace.php.

Contenu de espace.php

<?php

if (!defined("_ECRIRE_INC_VERSION")) return; #securite

function balise_ESPACE($p) {
return calculer_balise_dynamique($p,'ESPACE', array());
}

function balise_ESPACE_stat($args, $filtres) {
//les parametres passe en {...}, les filtres sont des vraiss filtres
return $args;
}

function balise_ESPACE_dyn($espace) {
$aVal = spip_fetch_array(spip_query("SELECT valeur FROM espace WHERE cle='".$espace."'"));
echo $aVal['valeur'];
}

?>

Mon problème est que si j’appelle #ESPACE{PRO} dans mon squelette , il m’affiche bien le contenu de la colonne valeur.

Mais la boucle elle, ne renvoie rien ! image001.gif

<BOUCLE_test(ARTICLES)id_rubrique=#ESPACEPRO>
<a href=« #URL_ARTICLE »>#TITRE

</BOUCLE_test>

Quelqu’un peut-il m’aider à comprendre ou m’indiquer la solution ?

PS : je précise qu’il y a bien des articles publiés dans ma rubrique.

Merci.

Mathieu GERBAULT a écrit :

*Le but de mon exercice est de définir un plugin gérant une table MySQL et une balise dédiée.

Ok...
Tu as deux petits problèmes ici je crois :
1) il n'est pas utile d'avoir une balise dynamique (enfin, c'est ma supposition
2) je ne suis pas certain que les balises dynamiques ecrivent des "echo".. ce n'est pas "return" plutôt ?

Bref, en tout cas, je pencherais plus pour quelque chose comme :
// #ESPACE{PRO}
function balise_ESPACE($p){
  $param = interprete_argument_balise(1,$p); // recuperer PRO
  $p->code="calculer_balise_espace('$param')";
  return $p;
}

function calculer_balise_ESPACE($espace){
  $aVal = spip_fetch_array(spip_query("SELECT valeur FROM espace WHERE cle='"._q($espace)."'"));
  return $aVal ? $aVal['valeur'] : "";
}

Evidemment je n'ai pas testé :stuck_out_tongue:

Bonnes recherches.
MM.

Merci, mais même avec un return (déjà essayé) ça ne passe pas mieux.

Sans passer par une balise dynamique, je peux faire comment ?

En imbriquant 2 boucles peut-être ?
Une sur la table 'espace' puis ma boucle classique mais dans ce cas comment
passé l'argument à la seconde boucle ?

Mathieu.

-----Message d'origine-----
Envoyé : jeudi 30 octobre 2008 17:09

Mathieu GERBAULT a écrit :

Merci, mais même avec un return (déjà essayé) ça ne passe pas mieux.

Sans passer par une balise dynamique, je peux faire comment ?

Cette liste n'est pas le lieu de discussion adapté (ça conserne plutôt spip.user)

As-tu par contre essayé le code que je te proposais ? une simple balise, tout a fait normale ?