Categories > TinyButStrong general (FR) >

Comment afficher un texte comme le ferait printf ?

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Loulou
Date: 2007-10-28
Time: 22:09

Comment afficher un texte comme le ferait printf ?

Bonsoir à tous,

Je commence à utiliser TBS pour un site multilingue et je suis confronté à une petite colle.
Mes textes sont dans un tableau PHP que j'intègre avec un MergeBlock. Dans mes templates j'écris des choses simples comme : [var.LaLangue.LeTexte]. Jusque là, tout fonctionne parfaitement bien.

Ce que je n'avais pas prévu, ce sont les textes contenant des valeurs variables, comme par exemple en syntaxe PHP: 'La taille mesure de %d à %d mètres'.
Dans la syntaxe TBS (car je préfèrerais ne pas le faire en php, pour une question de "propreté" du code), y a-t-il un moyen d' "injecter" simplement des valeurs dans mes textes (à la manière d'un printf) ?

Dans mon template j'ai pour l'instant :
[var.LeTableau.LeTexte]

J'ai essayé ceci:

Essai 1: J'ai changé ma constante texte par 'La taille mesure de [var.mini] à [var.maxi] mètres'
Sans surprise, ca n'a pas fonctionné, l'affichage ayant été fait tel quel.

Essai 2: J'ai changé ma constante texte par 'La taille mesure de [mini] à [maxi] mètres'
avec dans mon code PHP :
$TBS->MergeBlock('LaLangue',$LaLangue);
$TBS->MergeField('mini,'3');
$TBS->MergeField('maxi,'18');
J'espérais qu'après le MergeBlock, les MergeField "rempliraient" le texte, mais non, ca n'a pas fonctionné non plus.

Auriez-vous une solution à me proposer, ou devrai-je bidouiller en php certains textes (ce que je souhaiterais éviter) ?

Par avance un grand merci pour votre aide !
By: Skrol29
Date: 2007-10-28
Time: 22:28

Re: Comment afficher un texte comme le ferait printf ?

Salut Loulou,

Par défaut TBS protège le contenu qu'il fusionne. Tu peux lever cette protection champ par champ avec le paramètre "protec"
http://www.tinybutstrong.com/fr/manual.php#html_field_prm_protect

Il existe aussi une propriété de TBS pour annuler la protection de façon systématique, mais il n'est pas conseillé de l'utiliser.
By: Loulou
Date: 2007-10-29
Time: 16:15

Re: Comment afficher un texte comme le ferait printf ?

Un grand merci pour cette réponse rapide, "protect=no" était effectivement nécessaire mais pas suffisant. J'ai cherché encore dans le forum et suis tombé sur le message de Eldarion qui a rencontré exactement le même problème que moi, pour sa gestion des langues lui aussi :
http://www.tinybutstrong.com/fr/forum.php?msg_id=5813#
Il me fallait donc en plus ajouter un $TBS->MergeField('var') pour faire un second passage je suppose (j'espère que les performances n'en seront pas trop dégradées !).

Pour récapituler rapidement, si ca peut aider d'autres personnes :

Le problème : afficher une var dans un texte lui-même var
------------------------------------------------------------------
coté PHP :
$LetexteFR = 'Le train partira à [var.HeureDepart]';
$LetexteEN = 'The train will go at [var.HeureDepart]';
$HeureDepart = '10h38';

Supposons que la langue soit FR, coté HTML :
[var.LetexteFR]

La solution :
--------------
Pour obtenir l'affichage de 'Le train partira à 10h38' et non 'Le train partira à [var.HeureDepart]', il faut ajouter :
$TBS->MergeField('var'); // <-- cette instruction
$TBS->Show(); // <-- avant celle-là