Categories > [old] TbsOoo & TinyDoc >

Condition sur tableau

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Bruno
Date: 2007-07-26
Time: 08:57

Condition sur tableau

Bonjour,

J'ai un tableau d'adresse et je veux imprimer les différentes lignes d'adresses que si elles existent.

J'ai fait :
[blk3.dom_adr1; if[val]=''; then[blk3.dom_adr2; if[val]=''; then[blk3.dom_adr3;  if[val]=''; then ; else[val]]; else [val]];else [val]]
[blk3.dom_adr2; if[val]=''; then[blk3.dom_adr3; if[val]=''; then ; else[val]]; else [val]]
[blk3.dom_adr3;  if[val]=''; ; else[val]]
Les lignes d'adresses dom_adr1, dom_adr2, dom_adr3 sont imprimées même si elles sont à blanc. Or je ne veux pas qu'elles s'impriment.

Je ne vois pas l'erreur de syntaxe, à moins que les conditions sur les blk fonctionnent différemment que sur les var.

Merci d'avance.

Cordialement

Bruno
By: Olivier
Date: 2007-07-26
Time: 11:50

Re: Condition sur tableau

Les tests sont très compliqués et je pense qu'il y a moyen de simplifier ça.

Il serait bon de vérifier le contenu des variables du bloc en PHP avant de les fusionner avec le template.
Ma méthode pour ma part est la suivante : j'extrais les données de la requête SQL dans une variable de type ARRAY, et c'est cette variable de type ARRAY dont j'affiche le contenu avec la commande PHP "print_r" pour en voir le contenu. Cette méthode me permet de debugger plus facilement

exemple :
$q = 'SELECT';
$q.= '  id';
$q.= ', label';
$q.= ' FROM xxxxxxx';
$q.= ' WHERE xxxxx';
$result_select = mysql_query($q);

$result = array();
while ($row = mysql_fetch_array($result_select, MYSQL_ASSOC)) {
  $result[] = $row;
}
$result_free = mysql_free_result($result_select);

Le résultat de la requête est dans la variable '$result'

Ensuite je teste toutes les données directement en PHP ce qui permet de simplifier les commandes TBS à mettre dans le template.
Exemple dans le code de test si l'élément n'est pas existant alors la valeur sera égale à ''

$blk_result = array();
reset($result);
while (list($id, $fd) = each($result)) {
  $blk_result[$id]['id']     = (isset($fd['id'])     ? $fd['id']     : '');
  $blk_result[$id]['label']  = (isset($fd['label'])  ? $fd['label']  : '');
}

Ensuite pour je fusionne par la commande
$TBS->MergeBlock('blk_result', 'array' , $blk_result);


Pour debugger la variable '$result' faire le code suivant :
echo '<pre>';
print_r($result);
echo '<pre>';

Cela peut paraitre plutôt lourd, mais cela permet de gagner tellement de temps en ayant des données testées et facilement 'débuggable'.
Ces opérations ne sont pas trop consommatrice de CPU ou de mémoire

Olivier
By: Bruno
Date: 2007-07-26
Time: 11:58

Re: Condition sur tableau

Merci Olivier,

C'est en tout cas plus évident pour l'administrateur des documents, qui n'a pas à connaitre la syntaxe des conditions complexes.

Youpi j'adopte, je vais préparer mon tableau avant en php