Categories > TinyButStrong general (FR) >

code TBS dans variable ?

The forum is closed. Please use Stack Overflow for submitting new questions. Use tags: tinybutstrong , opentbs
By: ced
Date: 2006-11-14
Time: 11:38

code TBS dans variable ?

Bonjour,

Selon vous, est-il possible d'inclure du code TBS dans une variable (ou une constante) qui sera ensuite interprétée par TBS ?

L'objectif serait de simplifier au maximum le travail sur un template par une tierce personne tout en offrant la possibilité d'inclure des zones préféfinies par le biais du template.

Par exemple, en faisant [ZONE.CALENDRIER], cela permettrait d'insérer le code faisant intervenir un sous-template (avec subtpl par exemple).

Ce serait beaucoup plus facile pour un simple designer de template et les zones possibles (et leur chemin) seraient prédéfinies.
De plus, de cette manière, les informations de ces zones seraient appellées dynamiquement par le template, seulement si elles sont inclues et utilisées (je ne veux pas faire une fusion de toutes les zones disponibles).

J'ai essayé de donner un maximum de détails.
Merci.

Cédric
By: ced
Date: 2006-11-14
Time: 11:48

code TBS dans variable ? (compléments)

Pour préciser :

Côté php, la variable (ou constante) serait définie avec un code TBS du style [var.sub;script=calendrier.php;subtpl] par exemple.

J'ai tenté avec qqch du genre : [[var.ZONE.CALENDRIER]] mais évidemment TBS m'affiche le contenu de la variable comme texte, logique.
By: Skrol29
Date: 2006-11-14
Time: 14:51

Re: code TBS dans variable ? (compléments)

Salut,

Oui c'est possible, tu peux bien sûr le faire avec des sous-modèles mais si tu veux passer par des variables, il faut faire attention à deux choses :
1/ Par défaut, TBS protège contre l'injection de balise TBS.
2/ L'ordre dans le quel sont traitées les balises compte.


Je m'explique :
1/
Quand tu fusionnes la valeur "[coucou]", TBS le converti en "[coucou]". C'est justement pour que les valeurs injectées ne puissent pas changer le modèle. Sans cela, une application telle que ce forum serait soumis à des risques de sécurité.
Pour annuler la protection il faut ajouter le paramètre "protect=no" dans la balise TBS, ou bien utiliser la propriété Protect mais elle est dangeureuse.
Il vaut mieux aussi ajouter "htmlconv=no"

2/
Les balises [onload] sont fusionnées sur LoadTemplate() et les balises [onshow] et [var] sont fusionner sur Show() (je ne sais plus dans quel ordre).
Ainsi par exemple la balise [var.x;protect=no] ne donnera pas le résultat escompté si $x = "[onload;file=toto]".

Pour finir, tu peux aussi te développer tes petites balises TBS qui seront fusionnée à ta manière grâce à un plug-in personnalisé.
By: ced
Date: 2006-11-18
Time: 09:11

Re: code TBS dans variable ? (compléments)

Merci pour les infos.

Finallement, j'ai combiné un peu les 2 idées.

Côté template, j'ai qqch comme çà :
[ZONE.SUB1]

Côté php, je peux disposer d'un tableau de ce type :
$zone['SUB1'] = '[onshow;script=sub1.php;subtpl]';
$zone['SUB2'] = '[onshow;script=sub2.php;subtpl]';

Je me suis créé un petit plugin qui est appelé comme çà :
$TBS->PlugIn(TBS_SUBTPL);
$TBS->PlugIn(TBS_SUBTPL, 'ZONE', $zone);

Côté plugin, j'ai simplement codé ceci :
function OnInstall($id=false, $cmd=false) {
        return array('OnCommand');
    }

    function OnCommand($id=false,$cmd=false) {       
        if($id && $cmd){
          foreach($cmd as $key=>$val){
        $this->TBS->Protect = false;           
            $this->TBS->MergeField($id.'.'.$key,$val);
            $this->TBS->Protect = true;
      }
    }
    }

Mon but était de faire vite et simple, il y a peut-être mieux.
J'ai volontairement évincé certains tests d'erreur afin de simplifier l'explication.

Je pars aussi du principe que la fusion n'est réellement effectuée que lorsque TBS trouve la balise correspondante dans le template.
Dans le cas contraire, cette solution ne serait plus valable à mes yeux puisque le but était d'insérer des zones (sous-template) prédéfinies à la demande par le biais du template principal et de manière la plus simple possible pour un designer de template non averti, le tout avec un niveau de performance acceptable (c-à-d pas d'inclusions inutiles).
By: Skrol29
Date: 2006-11-19
Time: 18:05

Re: code TBS dans variable ? (compléments)

Il est très bien ton petit plug-in.
Je voyais ça plutôt avec un OnSpecialVar, mais ta soluce est bonne.
By: ced
Date: 2006-11-19
Time: 18:19

Re: code TBS dans variable ? (compléments)

Je l'ai envisagé mais comme mon idée de base était d'avoir de simples variables comme [ZONE.NOM]

Je dois ajouter aussi qu'on peut rajouter 'protect=yes' dans les définitions de commandes TBS pour un peu plus de sécurité, cela donne par exemple :
$zone['SUB1'] = '[onshow;script=sub1.php;subtpl;protect=yes]';