Categories > TinyButStrong general (FR) >

Sous-blocs avec array

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Alec
Date: 2005-10-08
Time: 12:25

Sous-blocs avec array

J'ai écris une fonction "maFonction" qui renvoye un array.
Quelle est la syntaxe pour l'utiliser dans un sous-bloc comme indiqué ci-dessous ?
Si ce n'est pas possible, quelle est l'alternative ?

Merci
Alec

<code>
$TBS = new clsTinyButStrong ;
$TBS->LoadTemplate('tbs_fr_exemples_subblock.htm') ;

$Nbr = $TBS->MergeBlock('mb','array','TeamList') ;

// ligne originale de l'exemple
if ($Nbr>0) $TBS->MergeBlock('sb','array','TeamList[%p1%][matches]') ;

// ligne souhaitée
if ($Nbr>0) $TBS->MergeBlock('sb','array',maFonction("%p1%")) ;

$TBS->Show() ;
</code>
By: Skrol29
Date: 2005-10-08
Time: 18:28

Re: Sous-blocs avec array

Bonjour Alec,

Non ce n'est pas possible car le mode Requête Dynamique (avec des %1%) ne fonctionne qu'avec une chaîne comme requête. Hors, dans ton code, tu retournes un tableau.

Ce que tu peux faire, c'est d'utiliser un type de données personnalisé.
Code PHP:
  if ($Nbr>0) $TBS->MergeBlock('sb','montype',"%p1%");

Tu dois alors coder trois fonctions PHP:
  tbsdb_montype_open()
  tbsdb_montype_fetch()
  tbsdb_montype_close()
La syntaxe de ces fonctions sont décrites dans le manuelle.
La première fonction recevra "%p1%" comme paramètre, ce qui correspondra lors de l'appel réeel à la valeur du paramètre "p1" du sou-bloc nommé "sb".

By: Alec
Date: 2005-10-09
Time: 11:39

Re: Sous-blocs avec array

Bonjour Skrol,

Ca fonctionne super (voir code ci-dessous), merci.

Par contre, je n'ai pas réussi à implémenter mon nouveau type de donnée "arrayfunc" sous forme de classe.   D'après la doc, les methodes doivent s'appeler tbsdb_open, etc... mais pas un mot au sujet du nom de la classe.  Comment dois-je nommer la classe ?

Merci
Alec

// merge du sous-bloc avec nouveau type de donnée "arrayfunc"
$tbs->MergeBlock("sousblock","arrayfunc","getMonArray(%p1%,%p2%)");

function tbsdb_arrayfunc_open(&$Source, &$Query) {
    // $Query contient l'appel a une fonction qui retourne un array - ex : maFonction("toto",42)

    // on extrait le nom de la fonction à appeler ainsi que les arguments
    $x=split("\(|)",$Query);
    $myArrayFunction=$x[0];
    $myArrayArgs=$x[1];
   
    // on appelle la fonction
    return $myArrayFunction($myArrayArgs);
}

function tbsdb_arrayfunc_fetch(&$Rs, $RecNum) {
    return next($Rs);
}

function tbsdb_arrayfunc_close(&$Rs) {
    $Rs=null;
}
By: Skrol29
Date: 2005-10-09
Time: 14:57

Re: Sous-blocs avec array

Bonjour,

Tu nommes la classe comme tu veux.
C'est dans le MergeBlock que tu rappele le nom.
Exemple :
$TBS->MergeBlock('mon_blk','~ma_classe','ma_requête');

Y'a un example dans la section "Programmation Orientée Objet" du manuel.
By: Alec
Date: 2005-10-09
Time: 23:49

Re: Sous-blocs avec array

C'est exact, cela m'a échappé.  Je faisait une fixation sur la section "Ajout d'un type de source de données".
Merci encore pour tes conseils.
Alec