Categories > TinyButStrong general (FR) >

Sous-modèle exécutable

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: ashorlivs
Date: 2006-01-17
Time: 19:51

Sous-modèle exécutable

Bonsoir à tous,

voilà une journée que je m'arrache les cheveux sur un problème qui doit pourtant être simple. Il est similaire à celui lancé par dib258 le 20/11/2005 à 21h01 (mais ce topic n'a plus été suivi par son auteur)

Dans mon site, j'utilise un fichier "contenu.html" qui appelle un sous-modèle nommé "menu.html". J'ai dans contenu.html :
[onload;file=menu.html]

Ca marche ! Ouf. Mais aujourd'hui, j'ai besoin d'ajouter des données dynamiques dans ce menu.

J'ai fait du menu un couple template/parser avec 2 fichiers : menu.html et menu.php. Si j'appelle dans mon navigateur menu.php seul, il s'affiche très bien.

MAIS. J'ai essayé plusieurs techniques pour inclure menu.php dans contenu.html et aucune ne fonctionne comme il faudrait. En reprenant la doc et les exemple j'ai essayé :
[var.fichier_menu;script=menu.php;subtpl]
Une fois les variables locales passées en globale, quand j'appelle contenu.php je vois bien menu.php mais le contenu de contenu.php disparait purement et simplement (et NON ce n'est pas un probleme de html/css lol)

onformat
Dans un acte de désespoir, j'ai fait une fonction qui affiche le menu pour l'afficher via onformat, mais ça n'affiche rien.

[onload;script=menu.php;subtpl]
Plusieurs bidouilles à base de onload, qui affichent soit rien soit uniquement le contenu de menu.php, et contenu.php disparait (remarque : quand je parle du contenu des fichiers php je veux bien sur parler du contenu des fichiers html parsés par TBS)

Ce que j'ai besoin de faire est-il au moins possible ??
Thanks,
Ashor
By: ashorlivs
Date: 2006-01-17
Time: 19:53

Re: Sous-modèle exécutable

Précision : dans les exemples les modèles d'include sont très bien documentés avec des pages statiques (html non parsé). Comme ma question semble revenir de temps à autres, je souhaite, Skroll, que tu aies du temps un jour pour faire un exemple avec inclusion parsée ^_^
By: Skrol29
Date: 2006-01-17
Time: 20:07

Re: Sous-modèle exécutable

Oui je crois que c'est une bonne idée de fournir un exemple de sous-modèle dynamique.

Peux tu donner des précisions sur menu.html et menu.php oubien m'envoyer les fichiers pour que je vois ce qui cloche ?
By: ashorlivs
Date: 2006-01-18
Time: 12:19

Re: Sous-modèle exécutable

(c'est parti sur ton mail hier soir :)
By: Skrol29
Date: 2006-01-18
Time: 12:21

Re: Sous-modèle exécutable

Peux-tu me le renvoyer STP ?
By: ashorlivs
Date: 2006-01-18
Time: 13:59

Re: Sous-modèle exécutable

c'est fait !
By: Skrol29
Date: 2006-01-18
Time: 16:18

Re: Sous-modèle exécutable

Ok, j'ai regardé ton code. Merci de l'avoir envoyé.

Le problème vient de ton sous-modèle "menu.php". Voici ton code :
<?
include_once('tbs_class.php') ;
  $TBS = new clsTinyButStrong ;
  $GLOBALS['descriptionMenu'] = "Menu";
  $TBS->LoadTemplate('menu.html') ;
  $TBS->Show() ;
?>

En effet, si tu crées une nouvelle instance de TBS, alors celle-ci se comporte de manière indépendant de l'instance du modèle parent. À la fin, fette nouvelle instance affiche sont propre résultat et quitte le script, comme il se doit. Donc ce que tu vois est normal.

Le code équivalent en mode sous-modèle aurait dû être :
<?
  $GLOBALS['descriptionMenu'] = "Menu";
  $this->LoadTemplate('menu.html') ;
  $this->Show() ;
?>

Pas besoin de include_once() ni de new(), car TBS est déjà chargé. En plus il est déjà en mode sous-modèle donc Show() aura un effet limité (pas d'affichage direct, ni de sortie de script).

Voilà, et comme ça tout beigne.
Si en plus tu souhaites tester ton script en mode normal, tu peut ajouter au début :
  if (!isset($this)) $this = new clsTinyButStrong;
By: ashorlivs
Date: 2006-01-19
Time: 02:34

Re: Sous-modèle exécutable

Yeah, cela fonctionne !
Merci surtout à toi d'avoir analysé le code !

Je me doutais que c'était un problème du genre mais je n'aurais jamais trouvé tout seul.

Du coup je fais face à un second problème mais j'ignore si c'est normal ou pas. Si je mets :
[onload;script=menu.php;subtpl]
ça marche. Mais par contre ça ne marche plus si je mets :
[onload;script=[var.tplMenu];subtpl]
pourtant dans la page PHP j'ai :
$GLOBALS['tplMenu'] = "menu.php";

J'obtiens toujours l'erreur : TinyButStrong Error (Parameter 'script'): Field [onload] cannot be merged because file '[var.formulaire]' is not found or not readable.

mais si je fais afficher [var.formulaire] il m'indique bien le bon chemin. Bizarre non ?
By: Skrol29
Date: 2006-01-19
Time: 13:06

Re: Sous-modèle exécutable

Comment TBS peut afficher un message à propos de '[var.formulaire]' alors que cette valeur n'apparait pas dans ton code ?

À mon avis il doit y avoir quelque chose comme
  $GLOBALS['tplMenu'] = '[var.formulaire]';
au lieu de
  $GLOBALS['tplMenu'] = "menu.php";
By: ashorlivs
Date: 2006-01-19
Time: 22:48

Re: Sous-modèle exécutable

Oups désolé c'est une erreur de ma part, j'avais écrit tplMenu pour coller à ce qui est indiqué dans la doc mais j'a oublié de changer le message d'erreur ! sorry :-(

La var du message d'erreur porte bien le même nom que celle du template et que celle déclarée en globals.

ashor
By: Skrol29
Date: 2006-01-20
Time: 02:01

Re: Sous-modèle exécutable

Heu.. je suis un peu perdu.
Si tu n'as pas résolu le pb, peux-tu poster le bout de code et le message d'erreur original ?