Categories > TinyButStrong general (FR) >

Champs TBS générés à la volée

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: Mushu
Date: 2011-12-07
Time: 14:26

Champs TBS générés à la volée

Bonjour,

Je bloque très certainement sur quelque chose de simple, mais cela me bloque pas mal pour l'instant.
Je souhaite générer dans une <div> de mon site des champs TBS à la volée. Dans cette partie du site doit s'afficher plusieurs petits blocs contenant diverses données. Or en fonction de la page visitée, je souhaite que ces blocs soient différents.

Actuellement, voici où j'en suis :
template.tpl :
   <div id="Main">
      <div id="Main-left">
         [onload;file=[var.template_main]]
      </div>
      <div id="Main-right">  
         [onload;onformat=get_bloc]
      </div>
   </div>

template.php :
   $bloc_list = 'blocA,blocB' ;
   [...]
   // Création des pages via les templates
   $TBS = new clsTinyButStrong ;
   $TBS->LoadTemplate('./templates/template.tpl') ;
   $TBS->Show() ;


fonctions.php :
   function get_bloc($FieldName,&$CurrVal,&$CurrPrm,&$TBS){
      global $bloc_list ;
      $main_right_display = "" ;
      $bloc = explode(",", $bloc_list);
      foreach($bloc as $value){
         switch($value){
            case 'blocA' :
               $template_bloca = './bloca.php';
               $main_right_display .= '[onshow;file=[var.template_bloca]]<br />' ;
               break;
            case 'blocB' :
               $template_blocb = './blocb.php' ;
               $main_right_display .= '[onshow;file=[var.template_blocb]]<br />' ;
               break;
            case 'blocC' :
               $template_blocc = './blocc.php' ;
               $main_right_display .= '[onshow;file=[var.template_blocc]]<br />' ;
               break;
            [...]
            default :
               break;
         }
      }
      $CurrVal = $main_right_display ;
   }

Actuellement, j'ai ceci qui s'affiche en lieu et place des blocs attendus :
   [onload;file=[var.template_categorie]]<br />[onload;file=[var.template_newsletter]]<br />

J'avoue que je suis un peu perdu là. J'ai testé tout plein de chose dont je serait très probablement incapable de relister de mémoire ici.

Par avance, merci pour votre aide :)
Mushu
By: Skrol29
Date: 2011-12-07
Time: 21:26

Re: Champs TBS générés à la volée

Bonjour Mushu,

Dans ta fonction get_bloc(), tu mets :
$main_right_display .= '[onshow;file=[var.template_bloca]]<br />' ;
Mais $template_bloca est une variable locale, pas globale. Tu ferais mieux de mettre :
$main_right_display .= '[onshow;file='.$template_bloca.']<br />' ;

De plus dans ta fonction il y a codé des [onshow], alors que dans ton résultat tu indiques des [onload]. Pour assurer la fusion il vaudrait mieux des [onshow].
By: Mushu
Date: 2011-12-07
Time: 23:36

Re: Champs TBS générés à la volée

Bonjour et merci pour cette première réponse rapide :)

J'ai effectué les modifications proposées mais hélas je n'ai pas beaucoup avancé. j'obtiens maintenant ce qui suit :
   [onshow;file=./bloca.php.php]<br />[onshow;file=./blocb.php]<br />

A tout hasard j'ai tenté de mettre des guillemets doubles autour de la variable PHP, mais sans résultat.

J'ai l'impression que le code généré par la fonction n'est pas interprété comme étant du HTML. J'ai aussi tenté en conséquence cette modification dans le fichier template.tpl
      <div id="Main-right"> 
         [onshow;onformat=get_bloc;htmlconv:no]
      </div>

Mais hélas toujours pareil. J'ai essayé de chercher coté PHP voir si je n'avais pas un bout de code qui neutralise les balises HTML, mais je n'ai rien trouvé qui fasse cela sur ce bout de code, le charset du fichier tpl est bien "text/html; charset=iso-8859-1", là je sèche :(

TBS effectue t-il un verrouillage du code HTML dans certaines conditions pour améliorer la sécurité ? Si non, où ai-je péché dans mon code  ?

Merci
Mushu
By: Skrol29
Date: 2011-12-08
Time: 00:57

Re: Champs TBS générés à la volée

Il faut mettre "htmlconv=no" et non pas "htmlconv:no", et en plus "protect=no".
By: Mushu
Date: 2011-12-08
Time: 01:19

Re: Champs TBS générés à la volée

Damned :(

Bon, maintenant les balises <br /> sont bien interprétées, par contre, j'ai toujours:
   [onshow;file=./bloca.php]
   [onshow;file=./blocb.php]
By: Skrol29
Date: 2011-12-08
Time: 23:38

Re: Champs TBS générés à la volée

Tu as bien mis le protect ?
Regarde le source du HTML généré, quel est-il ?
By: Mushu
Date: 2011-12-09
Time: 00:10

Re: Champs TBS générés à la volée

Je n'avais jamais fait attention à cette option protect. En la rajoutant, les blocs s'affichent, mais ces blocs étant des templates, je me retrouve à décaler le problème. J'ai donc tenté le protect également sur les appels suivants mais là ça n'évolue plus.

By: Mushu
Date: 2011-12-09
Time: 00:14

Re: Champs TBS générés à la volée

Alors plus précisément, je vois de voir que les champs TBS sont bien gérés mais pas les blocs
By: Mushu
Date: 2011-12-09
Time: 04:10

Re: Champs TBS générés à la volée

Désolé pour les doubles posts. J'ai essayé de retourner le problème dans tous les sens et je bloque toujours. Par souci de clarté je vais reprendre ici l'ensemble des éléments de mon problème afin de faire une petite synthèse :

--> template.tpl
   <div>  
      [onshow;onformat=get_bloc;htmlconv=no;protect=no]
   </div>

--> template.php
   $bloc_list = 'blocA,blocB' ;
   create_categories() ;
   [...]
   $TBS = new clsTinyButStrong ;
   $TBS->LoadTemplate('./templates/template.tpl') ;
   $TBS->MergeBlock('b_cat',$tab_cat) ;
   $TBS->Show() ;

--> fonctions.php
   function get_bloc($FieldName,&$CurrVal,&$CurrPrm,&$TBS){
      global $bloc_list ;
      $main_right_display = "" ;
      $bloc = explode(",", $bloc_list);
      foreach($bloc as $value){
         switch($value){
            case 'blocA' :
               $template_bloca = './bloca.php';
               $main_right_display .= '[onshow;file=' . $template_bloca . ';htmlconv=no;protect=no]<br />' ;
               break;
            case 'blocB' :
               $template_blocb = './blocb.php' ;
               $main_right_display .= '[onshow;file=' . $template_blocb . ';htmlconv=no;protect=no]<br />' ;
               break;
            case 'blocC' :
               $template_blocc = './blocc.php' ;
               $main_right_display .= '[onshow;file=' . $template_blocc . ';htmlconv=no;protect=no]<br />' ;
               break;
            [...]
            default :
               break;
         }
      }
      $CurrVal = $main_right_display ;
   }


   function create_categories() {
      global $prefixe_db, $tab_cat ;
      $tab_cat = array() ;
      $sql = "SELECT nom FROM categories ;" ;
      if (mysql_num_rows($req = mysql_query($sql))) {
         $i = 0 ;
         while ($ent = mysql_fetch_array($req)) {
            $tab_cat[$i]['nom'] = $ent['nom'];
            $i++ ;
         }
      }
   }   

--> sous_template.tpl
   <div>
      <img src="[onshow.repertoire]head.jpg" />
   </div>
   <div>
      <a href="#">[b_cat.nom;block=a+br/]</a><br />
   </div>

Description : Suite aux différentes modifs indiquées ci-dessus, le sous-template m'affiche l'image, donc cela voudrait dire qu'il sait récupérer le champ TBS [onshow.repertoire]. Le code HTML généré m'indique bien la bonne valeur. Par contre, le bloc TBS 'b_cat' lui reste sous la forme TBS. Ainsi, sous mon image, j'ai ceci d'écrit : [b_cat.nom;block=a+br/]
J'ai tenté de rajouter la ligne $TBS->LoadTemplate('./templates/sous_template.tpl', '+') ; dans la fonction get_bloc() dans le case 'blocA' et ça ne change rien

As-tu une idée de ce qui pourrait encore me bloquer ?

Merci
Mushu
By: Skrol29
Date: 2011-12-15
Time: 23:26

Re: Champs TBS générés à la volée

Tu as trouvé ?
By: Mushu
Date: 2011-12-16
Time: 03:11

Re: Champs TBS générés à la volée

Oups, oui, pardon.
J'ai effectivement trouvé la solution après avoir re-parcourus entièrement le manuel (faut bien occuper les voyages en train :) )

Voici les modifications faites :
--> template.tpl (Ajout de l'option subtpl]
   <div> 
      [onshow;onformat=get_bloc;subtpl]
   </div>

--> fonctions.php (Je fais un LoadTemplate() (avec l'option '+') puis un premier Show() dans le sous template au lieu d'utiliser la variable $CurrVal
   function get_bloc($FieldName,&$CurrVal,&$CurrPrm,&$TBS){
      global $bloc_list ;
      $bloc = explode(",", $bloc_list);
      foreach($bloc as $value){
         switch($value){
            case 'blocA' :
               $TBS->LoadTemplate('./bloca.php', '+') ;
               break;
            case 'blocB' :
               $TBS->LoadTemplate('./blocb.php', '+') ;
               break;
            case 'blocC' :
               $TBS->LoadTemplate('./blocc.php', '+') ;
               break;
            [...]
            default :
               break;
         }
      }
      $TBS->Show();
   }

Merci pour le temps que tu as passé à m'aider :)
By: Skrol29
Date: 2011-12-17
Time: 00:47

Re: Champs TBS générés à la volée

Ok, c'est plutôt moi qui m'excuse car j’avais perdu de vu ton problème.

@+