Categories > TinyButStrong general (FR) >

Fonction perso sans affichage

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Bewonder
Date: 2006-08-22
Time: 11:17

Fonction perso sans affichage

Bonjour,

Désolé de ce post de Newbie mais j'ai vraiment du mal avec TBS.

Je désire appeller une fonction PHP qui incrémente un compteur à différentes étapes d'une page HTML
Pour l'instant, pas de requête, un truc tout con.

Fichier php
function addquest($NomBloc,&$Enreg,$RecNum){
  return $Enreg++;
}
$GLOBALS['quest']=1;
$this->MergeField('b1','addquest',true);
$this->LoadTemplate('fichier.htm');

Fichier html
<span>[b1.add;block=span;ondata=ajout][b1.GLOBALS.quest]</span>

J'ai du louper un truc car le navigateur m'affiche mon bout de code TBS.

TBS c'est puissant mais fastidieux.

Merci pour vos réponses.
By: Skrol29
Date: 2006-08-22
Time: 11:38

Re: Fonction perso sans affichage

Salut,

Meu non, c'est pas fastidieux. Tu verras quand tu auras chopé le truc...
Tu dois faire le LoadTemplate() avant le MergeField(), sinon il fusionne du vide.

Tu dois confondre avec un autre sytème du genre Smarty qui fait d'abord une assignation, puis un affichage. Avec TBS, l'opération est faite immédiatement.

Autres remarques :
- [b1.GLOBALS.quest] pourait être codé [var.quest]
- "block=span" est ignoré car tu fais un MergeField() et non pas un MergeBlock(). Si tu demande de fusionner un champ, son paramètre de block n'est pas analysé. De même "ondata=ajout" est ignoré puisqu'il n'y a aucun traitement de bloc.
- ta fonction addquest() modifie $Enreg comme un entier alors que TBS fournie un Array.

Voici ce que tu peux faire pour implémenter un compteur dans ton modèle :
Le script :
function f_incr ($FieldName,&$CurrVal) {
  // syntaxe pour une fonction onformat
  $GLOBALS['quest']++;
  $CurrVal = $GLOBALS['quest'];
}
...

$TBS->LoadTemplate('fichier.htm');
...
$TBS->Show();

le modèle :
span>[var.quest;onformat=f_incr]</span>

On peut remarquer que [var.quest;onformat=f_incr] peut être remplacé par n'importe quel champ car la fonction f_incr() force sa valeur. Notament, tu peux faire un [onload;onformat=f_incr] qui aura pour effet d'avoir ces champs fusionnés pendant le LoadTemplate() eu lieu de pendant le Show(). Ce dernier étant le déclancheur de la fusion des champs var.
By: Bewonder
Date: 2006-08-22
Time: 12:00

Re: Fonction perso sans affichage

Super, merci Skrol.

Donc je n'utilisais pas la bonne méthode et en plus, mon script était bourré d'erreurs.

Là ça marche nickel sauf que le numéro s'affiche. J'ai résolu le problème en faisant démarrer mon compteur de 0 au lieu de 1, et j'utilise ta fonction dès le premier affichage (au lieu de l'appeler en douce après).

Je suppose que j'aurais dû joindre cette fonction à une variable vide quelconque si je n'avais pas voulu voir affiché immédiatement le résultat de ma fonction d'incrémentation. N'est ce pas ?

Bon ben je te remercie, et peut être à tout à l'heure car là je me penche sur l'affichage d'une liste déroulante d'après une requête avec affichage d'une valeur par défaut (avec pear db de surcroît). Souhaite moi bonne chance, je nage déjà.
By: Skrol29
Date: 2006-08-22
Time: 13:51

Re: Fonction perso sans affichage

>Je suppose que j'aurais dû joindre cette fonction à une variable vide
> quelconque si je n'avais pas voulu voir affiché immédiatement le résultat > de ma fonction d'incrémentation. N'est ce pas ?

Ha, je croyais que tu voulais justement afficher ce numéro.
Il suffit donc de faire $CurrVal = ''; dans la fonction, tout en laissant l'incrémentation $GLOBALS['quest']++;
By: Bewonder
Date: 2006-08-22
Time: 13:54

Re: Fonction perso sans affichage

Mais c'est bien sure...

Je cherche toujours les complications.

Merci encore.