TinyButStrong - the PHP Template Engine
Categories > TinyButStrong general (FR) >

Nouveaux paramètres "getpart" et "store"

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs

By: BlueSky
Date: 2014-03-26
Time: 17:27

Nouveaux paramètres "getpart" et "store"

Bonjour !

J'essaye d'utiliser ces nouveaux paramètres "getpart" et "store" qui m'ont ravi lorsque je les ai découvert tout à l'heure...
J'ai pourtant 2 problèmes / remarques :

1/ Les variables à l'intérieur d'un pavé "store=" ne sont pas "mergé"...
2/ Si le paramètre donné getpart n'existe pas... tout le fichier file= est retourné !

Sinon c'est génial, je vais pouvoir construire mes pages et insérer les scripts à la fin du HTML de façon propre (et garde le JS à côté du HTML), j'adore, merci !
By: Skrol29
Date: 2014-03-26
Time: 23:05

Re: Nouveaux paramètres "getpart" et "store"

Salut,

Ouai, store c'est pratique.

> 1/ Les variables à l'intérieur d'un pavé "store=" ne sont pas "mergé"...

Dans quel cas ça peut être utile ?
By: BlueSky
Date: 2014-03-27
Time: 12:26

Re: Nouveaux paramètres "getpart" et "store"

C'est utile... dans mon cas !

C'est à dire : j'ai un template qui contient une sorte de widget que j'utilise à plusieurs endroits (et de façon différente : parfois en ajax, parfois non).
Dans le javascript du widget, j'ai une partie variable : des taux de conversion de devises (donc mis à jour régulièrement sur le serveur).

Je n'ai pas trop d'autres solutions *satisfaisantes* pour gérer ça...
By: Skrol29
Date: 2014-03-27
Time: 23:16

Re: Nouveaux paramètres "getpart" et "store"

C'est donc des paramètres d'appel du widget, mais alors pourqui en avoir besoin dans la paramètre "store" ?
By: BlueSky
Date: 2014-03-27
Time: 23:48

Re: Nouveaux paramètres "getpart" et "store"

Pas vraiment, ce sont des variables incluses dans le widget, pour qu'il fonctionne, pas à l'appel
By: BlueSky
Date: 2014-03-28
Time: 01:50

Re: Nouveaux paramètres "getpart" et "store"

J'ai aussi un autre composant utilisé à plusieurs endroits dont le javascript est généré en partie par TBS, avec des choses du genre :
     doParse();[onshow; block=_; when [var.tbsUserID]!=0]
ou
     $('#widget').fadeTo('slow', 1);[onshow; block=_;when [var.tbsModel]='vertical']

Bref, pour moi c'est assez important... c'est une grosse modification du code ?
By: Skrol29
Date: 2014-03-28
Time: 14:14

Re: Nouveaux paramètres "getpart" et "store"

> Bref, pour moi c'est assez important... c'est une grosse modification du code ?

Mais j'ai du mal à voir pour l'instant ce que tu cherches à faire.

Tu peux me donner un exemple de ce que tu aimerais avoir ?

Qu'est ce qui ne pas pas dans tes deux bout de codes Javascript ?
By: BlueSky
Date: 2014-03-28
Time: 14:59

Re: Nouveaux paramètres "getpart" et "store"

Bon, j'ai refait quelques tests pour préparer un exemple, et je crois que les variables sont mergées, mais ce sont les blocs qui posent soucis...

Voisi un exemple  :

widget.tpl :
<script type="text/javascript">
  function doParse() {
    alert('Je parse');
  }
  alert('Début Script');
  doParse();[onshow; block=_; when [var.tbsUserID]!=0]
  alert('Fin script');
</script>

<article>
    <p>Contenu du widget</p>
</article>

MaPage.html :
<html>
  <head>
    [onshow..store.default]
  </head>
  <body>
    Une page...
    [onshow;file=widget.tpl;getpart=(article);store=(script)]
    Suite de la page
</body>
</html>

Lorsque j'affiche ce test, voici ce que j'obtiens :
<html>
  <head>
    <script type="text/javascript">
  function doParse() {
    alert('Je parse');
  }
  alert('Début Script');
  doParse();[onshow; block=_; when 0!=0]
  alert('Fin script');
</script>
  </head>
  <body>
    Une page...
    <article>
    <p>Contenu du widget</p>
</article>
    Suite de la page
</body>
</html>

Le block inséré par le paramètre "store" n'est pas interprété... (par contre, il semblerait que dans cet exemple les variables soient correctement évaluées).

Désolé d'avoir mal expliqué / qualifié ma demande !
By: Skrol29
Date: 2014-03-30
Time: 22:40

Re: Nouveaux paramètres "getpart" et "store"

Ok, je vois mieux ce dont tu parlais.

Quand tu charge un sous-modèle, seuls les champs automatiques [onload] sont fusionnés. Et c'est tout à fait normal.
Les champs [onshow] seront fusionnés lors de la commande Show(). À ce moment le champ incorporé [var] sera fusionné pour évaluer le paramètre "when".
By: BlueSky
Date: 2014-03-31
Time: 00:10

Re: Nouveaux paramètres "getpart" et "store"

Oui, mais tout de même, les blocks ne sont pas fusionnés par la méthode Show() ! (Mon exemple est le résultat de la méthode Show() )
Ca reste un problème pour moi : a l'affichage de la page par Show(), il reste de commandes du templates qui ne sont pas évaluées, et il reste donc le : [onshow; block=_;when 0!=0], ce qui n'a ni l'effet escompté (ne pas afficher la ligne), et produit un code HTML non valide :p
By: Skrol29
Date: 2014-03-31
Time: 02:14

Re: Nouveaux paramètres "getpart" et "store"

Je suis étonné que les balises [onshow] ne soient pas traitées par TBS.
Peux-tu m'envoyer un petit bout de code qui reproduit le phénomène ?
By: BlueSky
Date: 2014-03-31
Time: 11:16

Re: Nouveaux paramètres "getpart" et "store"

Je suis étonné aussi ;)

Pour l'exemple, il suffit de reprendre les 2 templates de mon post précédent (widget.tpl et MaPage.html (que j'aurais du appeler .tpl aussi d'ailleurs)), et je reproduis avec le php suivant :
<?php
  include('tbs/tbs_class.php');
  $page = new clsTinyButStrong('', 'tbs');
  $page->LoadTemplate('MaPage.html');
  $tbsUserID = 0;
  $page->Show();
?>

Je peux t'envoyer un .zip avec tout ça si ça t'aide...
By: Skrol29
Date: 2014-03-31
Time: 23:47

Re: Nouveaux paramètres "getpart" et "store"

Salut,

Ok, vu, je reproduis bien ton problème.

Ce qu'il se passe c'est qu'un champ [onshow] amène un autre champ [onshow]. Ors TBS ne traite pas [onshow] emboîtés afin d'éviter les boucles infinies.

La solution : forcer la fusion des [onshow] :
<?php
  include('tbs/tbs_class.php');
  $page = new clsTinyButStrong('', 'tbs');
  $page->LoadTemplate('MaPage.html');
  $tbsUserID = 0;
  $page->MergeField('onshow');      // ligne supplémentaire
  $page->Show();

By: BlueSky
Date: 2014-04-01
Time: 12:05

Re: Nouveaux paramètres "getpart" et "store"

OK super ça marche.
Idéalement le moteur de TBS devrait boucler uniquement le nombre de fois où il y a une inclusion d'un autre fichier, ou boucler un max de X fois (paramétrable).
Bref, c'est un détail, déjà ça m'a débloqué, merci !

Incidemment, je trouve un autre petit problème : avec un emplacement de store définit ([onshow..store.default]) dans le template, s'il n'y a pas d'inclusion de fichier (file=XXX;store=yyy), à la fusion finale, j'obtiens l'erreur :
TinyButStrong Error in field [onshow..store.default...]: Store named 'default' is not defined yet.
Pour reproduire : dans le même exemple, supprimer la ligne  [onshow;file=widget.tpl;getpart=(article);store=(script)] du fichier "MaPage.html"

Y'aurait un moyen de contourner ça ?
By: BlueSky
Date: 2014-04-06
Time: 13:50

Re: Nouveaux paramètres "getpart" et "store"

En attendant, si ça peut aider quelqu'un, j'ai trouvé un contournement.
J'ai rajouter ça dans mes entêtes :
[onload;file=fake.tpl;getpart=fake;store=fake]
Il ne reste plus qu'à créer un fake.tpl.
C'est moche, mais ça dépanne !
A+
By: Skrol29
Date: 2014-04-07
Time: 23:45

Re: Nouveaux paramètres "getpart" et "store"

Merci, je me penche sur ce problème.