|
*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*
Documentation pour TinyButStrongversion 3.7
*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.* |
|||||||
Template Engine pour Pro et débutants pour PHP 5 |
TinyButStrong (TBS) est une classe PHP utile pour développer une application en séparant proprement vos scripts PHP de vos fichiers XML/HTML/Texte. Avec TBS, les fichiers sont générées dynamiquement en fusionnant un modèle avec des données. C'est ce qu'on appelle un moteur de modèle (Template Engine).
TBS tient son nom du fait qu'il ne présente que 8 fonctions mais qu'il permet de faire le maximum. Il est ••• très très fort ••• pour fusionner des modèles avec vos variables PHP ou vos requêtes MySQL, PostgreSQL, ou SQLite.
TBS a été conçu pour que vous puissiez développer avec facilité vos modèles depuis n'importe quel éditeur visuel (comme Dreamweaver ou FrontPage), mais si vous avez l'habitude d'utiliser un éditeur textuel il est tout aussi pratique. TBS permet aussi de créer du JavaScript dynamiquement.
Comme son nom l'indique, TBS est simple à utiliser, puissant et rapide. Il est complètement °~° freeware °~°.
Principes de base :
Du coté HTML (ou autre type de fichier) :Vous concevez une page qui n'a pas besoin de contenir de script PHP, ni de programmation. Dans cette page vous placez des balises TBS aux endroits où doivent s'afficher les données dynamiques. Cette page est appelée un 'modèle'. Il existe deux types de balises : les 'champs' qui servent à afficher une donnée dynamiquement, et les 'blocs' qui servent à définir une zone, le plus souvent pour afficher les enregistrements d'une source de données.
Du coté PHP :
Vous utilisez une variable objet TBS pour piloter la fusion de votre modèle avec des données. à la fin, TBS affiche le résultat de la fusion.
Installation :
1. | Copiez le fichier tbs_class.php dans un répertoire de votre site Web. |
2. | Au début de votre programme PHP, ajoutez les lignes : include_once('tbs_class.php'); $TBS = new clsTinyButStrong; Remarque : si le fichier tbs_class.php se trouve dans un répertoire différent de celui de votre programme, vous devrez préciser le répertoire devant le nom du fichier. |
Explications et détails techniques :
TinyButStrong est un librairie écrite en PHP, c'est un composant à référencer dans vos propres programmes PHP. En terme technique, TinyButStrong est une 'classe' d'objet PHP ; le nom de cette classe est clsTinyButStrong.
La variable $TBS que ajoutez en début de programme sert à piloter la fusion de votre modèle depuis votre application PHP. En terme technique, la variable $TBS est une 'instance' de la classe clsTinyButStrong.
Mini exemples :
Exemple 1 :Modèle Html | Programme Php | Résultat |
<html> <body> [onshow.message] </body> </html> |
<? include_once('tbs_class.php'); $TBS = new clsTinyButStrong; $TBS->LoadTemplate('template.htm'); $message = 'Hello' ; $TBS->Show(); ?> |
<html> <body> Hello </body> </html> |
Modèle Html | Programme Php | Résultat |
<table> <tr><td>[blk.val;block=tr]</td></tr> </table> |
<? include_once('tbs_class.php'); $TBS = new clsTinyButStrong; $TBS->LoadTemplate('template.htm'); $liste = array('X','Y','Z'); $TBS->MergeBlock('blk',$liste); $TBS->Show(); ?> |
<table> <tr><td>X</td></tr> <tr><td>Y</td></tr> <tr><td>Z</td></tr> </table> |
Coté PHP :
Le pilotage de la fusion d'un modèle se fait dans un programme PHP en utilisant une variable objet déclarée à partir de la classe clsTinyButStrong.Exemple de déclaration : $TBS = new clsTinyButStrong;
Cet objet vous permet de charger un modèle, piloter sa fusion avec des données, puis afficher le résultat.
Exemple de code PHP :
$TBS = new clsTinyButStrong;
$TBS->LoadTemplate('template.htm');
$TBS->MergeBlock('ctry','mysql','SELECT * FROM t_coutry');
$TBS->Show();
Voici la description d'un objet TinyButStrong :
créer un nouvel objet TBS :
Syntaxe pour créer un nouvel objet TBS : $TBS = new clsTinyButStrong({string BaliseDelim {, string PrefixeVar {, string PrefixFct}}})
Argument | Description |
BaliseDelim | Définie le couple de délimiteurs des balises TBS reconnues dans les modèles. La valeur par défaut est '' (chaine vide) qui signifie que les délimiteurs par défaut. Il s'agit de '[' et ']'. Exemple : si vous souhaitez que els délimiteurs soient {{ et }} pour les balises TBS, alors définissez BaliseDelim à la valeur '{{,}}'. Ainsi les champs TBS seront du type {{var.x}} au lieu de [var.x]. Il est recommandé de laisser les délimiteurs par défaut, même si vous pouvez les changer sans problème. Les délimiteurs par défaut sont [ et ] parce que ces caractères sont utilisables pratiquement partout dans des documents XML/HTML, et ils sont repérés plus rapidement que les délimiteurs { / } ou ( / ) car ils sont plus rares surtout en HTML. |
PrefixeVar | Limite l'utilisation des champs automatiques ([onload] [onshow] et [var]) dans les modèles. TBS n'affichera que les variables globales PHP préfixées par PrefixeVar. Les autres variables produiront un message d'erreur. La valeur par défaut pour PrefixeVar est '' (chaine vide) ce qui signifie aucune limitation. |
PrefixeFct | Limite l'utilisation des fonctions PHP utilisateur (relatives aux paramètres onformat et ondata) dans les modèles. TBS n'appellera que les fonctions PHP préfixée par PrefixeFct. Les autres fonctions produiront un message d'erreur. La valeur par défaut pour PrefixeFct est '' (chaine vide) ce qui signifie aucune limitation. Cet argument est supporté depuis TBS version 3.6.0. |
Exemples :
$TBS2 = new clsTinyButStrong('{{,}}'); // les balises TBS seront du type {{var.x}} au lieu de [var.x]
$TBS3 = new clsTinyButStrong('', 'tbs_var_'); // TBS n'affichera que les variables globale PHP commençant par 'tbs_var_'
$TBS4 = new clsTinyButStrong('', '', 'tbs_fct_');// TBS n'appellera que les fonctions PHP commençant par 'tbs_fct_'
Méthode LoadTemplate() :
Le contenu complet du fichier est enregistré dans la propriété Source de l'objet TinyButStrong, puis les champs et blocs [onload] sont fusionnés.
Si le fichier n'est pas trouvé il sera aussi recherché dans le répertoire du dernier modèle chargé (depuis TBS version 3.2.0).
Syntaxe : $TBS->LoadTemplate(string Fichier{, string Charset})
Argument | Description |
Fichier | Chemin local ou absolu du fichier modèle à charger. Cette valeur peut être null ou '' (chaine vide) pour des actions spéciales. Voir les détails ci-dessous. |
Charset | Facultatif. Indique l'encodage des caractères (charset) à utiliser pour la conversion des caractères spéciaux des données lorsqu'elles seront fusionnées. La valeur par défaut est '' (chaîne vide) qui équivaut à 'ISO-8859-1' (Latin 1). Si votre modèle utilise un charset spécial, indiquez la valeur Html de ce charset. Dans une page Html, le charset se trouve en tête du fichier, dans l'attribut 'content' d'une balise <Meta>. Les charset supportés par TBS sont ceux supportés par la fonction htmlentities() de Php. Par exemple : 'BIG5' (chinois) ou 'EUCJP' (japonais). Voir ci-dessous pour plus de possibilités. |
Portée de la recherche du fichier :
Si le fichier n'est pas trouvé, il sera aussi recherché dans le répertoire du dernier modèle ou sous-modèle chargé.
Depuis TBS version 3.3.0, le fichier est aussi recherché dans le include_path.
Pas de conversion de caractère :
Si vous utilisez la valeur False pour l'argument Charset, alors les données ne seront pas converties lors de la fusion avec le modèle.
Notez que le paramètre htmlconv peut être utilisé pour définir la conversion de caractères spéciaux pour un champ TBS.
Fonction utilisateur :
Si votre charset n'est pas supporté par PHP, vous pouvez désigner une fonction utilisateur qui réalise la conversion de caractères spéciaux. Pour cela, utilisez l'argument Charset avec la syntaxe '=mafonction'.
Depuis TBS version 3.0, il est aussi possible d'indiquer une méthode de classe (voir POO).
Depuis TBS version 3.3.0, cette fonction utilisateur devrait avoir un second argument pour la conversion des sauts-de-lignes.
Depuis TBS version 3.5.0, l'argument Charset peut aussi être a tableau contenant un objet et une méthode. Exemple : array(&$obj, 'mamethode').
Voici un exemple qui donne la syntaxe attendue :
// Convertie une chaîne en texte XML.
$x = htmlspecialchars(utf8_encode($Txt));
if ($ConvBr) {
$x = nl2br($x); // Convertie tout type de saut-de-ligne
$x = str_replace('<br />', '<text:line-break/>',$x);
return $x;
}
Ajouter le fichier à la suite du modèle en cours :
Vous pouvez utiliser le mot-clé '+' pour l'argument Charset afin que le fichier spécifié par Fichier soit ajouté à la fin du modèle en cours au lieu de l'écraser. Le charset en cours ne sera pas modifié.
Actions spéciales avec l'argument Fichier :
Depuis TBS version 3.4.0.
Si Fichier est '' (chaine vide), alors seul le charset est modifié, sans faire aucune autre action. Un Charset='+' sera ignoré.
Si Fichier est null, alors toutes les actions par défaut (Plugins, balises [onload], et Charset) sont appliquées sans charger aucun fichier.
Dans les deux cas, si Charset vaut '+', il sera ignoré et le charset en cours ne sera pas modifié.
Exemple :
$TBS->LoadTemplate(null,'BIG5'); // lance les plugins s'il y en a, et fusionne les balises [onload] s'il y en a
...
$TBS->LoadTemplate('',false); // remplace le charset pas aucun-charset
Méthode MergeBlock() :
Par défaut, cette méthode retourne le nombre d'enregistrements fusionnés (plus exactement, elle retourne le numéro du dernier enregistrement), mais elle peut aussi retourner le jeu complet des enregistrements fusionnés (voir argument NomBloc).
TinyButStrong supporte plusieurs types de sources de données en natif :
Données Php : un tableau ; une chaîne texte, un nombre.
Base de données : MySQL ; PostgreSQL ; SQLite.
Mais vous pouvez aussi en ajouter de nouveaux : 'plug-ins de base de données'.
Syntaxe : int $TBS->MergeBlock(string NomBloc, mixed Source{, string Requête}{, mixed ReqPrms})
Argument | Description |
NomBloc | Indique le nom du bloc TBS à fusionner. Vous pouvez fusionner plusieurs blocs avec les mêmes données en indiquant leurs noms séparés par des virgules. Si vous ajoutez '*' comme nom de bloc, alors la méthode retournera le jeu complet des enregistrements fusionnés sous forme de tableau PHP, à la place du nombre d'enregistrements. Historique : le mot clé '*' est supporté depuis TBS version 3.0. |
Source | Variable ou mot-clé qui désigne la source de données pour la fusion. |
Requête | Facultatif. Indique la requête SQL qui retourne les données à fusionner. Le tableau ci-dessous indique les valeurs possibles selon le type de source de données. |
ReqPrms | Facultatif. Paramètres suppléemntaires pour la requête. Peu de types de sources de données prennent cet argument en compte. Versioning: the argument QryPrms is supported since TBS version 3.7.0. |
Pour afficher les données d'un enregistrement, vous devez utiliser un champ TBS lié. Un champ TBS est lié lorsque son nom est composé du nom du bloc, suivi d'un point et du nom d'une colonne ou d'une clé du jeu d'enregistrements. Un champ lié doit se trouver à l'intérieur du bloc.
Exemple :
Colonnes retournées par la requête : champ1,champ2,champ3
Champs TBS liés : [bloc1.champ1], [bloc1.champ2], [bloc1.champ3]
Si aucune définition de bloc n'est trouvée dans le modèle, La méthode MergeBlock() fusionnera le premier enregistrement avec tous les champs liés trouvés dans le modèle.
Vous pouvez définir des blocs plus évolués. Pour plus d'information, consultez la rubrique Blocs TBS.
Fusionner plusieurs blocs avec les mêmes données :
Vous pouvez fusionner plusieurs blocs avec les mêmes données en indiquant leurs noms séparés par des virgules dans l'argument NomBloc. Dans ce cas, la requête n'est ouverte qu'une seule fois et les enregistrements sont mis dans un cache afin de remplir les blocs.
Exemple : $TBS->MergeBlock('bloc1,bloc2,bloc3','mysql','SELECT * FROM MaTable');
Vous ne pouvez pas fusionner plusieurs blocs ayant le même nom parce qu'ils sont considérés par TBS comme un seul et même bloc composé de plusieurs sections. Néanmoins, vous pouvez utiliser une astuce pour obtenir un résultat similaire. Si vous utilisez le paramètre p1 sans valeur dans une définition de bloc, cela force TBS à considérer la section comme une rupture de nouveau bloc, comme il le fait pour les sous-blocs.
Exemple :
|
|
$TBS->MergeBlock('b','mysql','SELECT * FROM MaTable');
Retourner l'ensemble des enregistrements fusionnés :
Dans certains cas, il vous sera peut être pratique de récupérer l'ensemble des enregistrements fusionnés après la fusion. Pour cela, il suffit d'ajouter le mot-clé '*' dans la liste des noms de bloc. Utilisez cette fonctionnalité avec parcimonie car elle conserve les données fusionnées en mémoire ce qui consomme plus ressource.
Exemple : $data = $TBS->MergeBlock('bloc1,*','mysql','SELECT * FROM MaTable');
Décompte des enregistrements :
Exemple : [bloc1.#]
La colonne virtuelle '$' permet d'afficher la clé de l'enregistrement en cours lorsque la source de données est un tableau Php (array).
Exemple: [bloc1.$]
Utilisation des arguments Source et Requête selon le type de source de données :
Type de source de données | Source | Requête |
Assigné (*) | Le mot-clé 'assigned', ou omis | - |
Texte (*) | Le mot-clé 'text' | Un texte |
Nombre (*) | Le mot-clé 'num' | Un nombre ou un tableau spécial (voir plus bas) |
Vide (*) | Le mot-clé 'clear' | - |
Conditionnel (*) | Le mot-clé 'cond' | - |
Tableau PHP (*) | Un tableau Php | - |
Le mot-clé 'array' | Un tableau Php | |
Le mot-clé 'array' | Une chaîne texte qui représente un tableau contenu ou encapsulé dans une variable PHP globale (voir ci-après) | |
PHP ArrayObject | Un objet PHP. Supporté depuis TBS version 3.5.0. | - |
PHP Iterator | ||
PHP IteratorAggregate | ||
PDO | Un objet PDO. Supporté depuis TBS version 3.7.0. | Une requête SQL. L'argument optionel QryPrms peut être utilisé comme avec PDOStatement->execute(QryPrms). |
MySQLi | Un objet MySQLi. Supporté depuis TBS version 3.7.0. | Une requête SQL |
MySQL | Une ressource de connexion MySql ou le mot-clé 'mysql' | Une requête SQL |
Une ressource de résultat MySql | - | |
PostgreSQL | Une ressource de connexion PostgreSql | Une requête SQL |
Une ressource de résultat PostgreSql | - | |
SQLite | Une ressource de connexion SQLite | Une requête SQLite |
Une ressource de résultat SQLite | - | |
Personnalisé |
Un mot-clé, un objet ou une ressource non listé dans ce tableau. Voir le paragraphe 'plug-ins de base de données'. |
Une requête SQL ou autre chose. |
Source de données Php :
Le bloc est fusionné avec les arguments définis dans la propriété Assigned.
Exemple : $TBS->MergeBlock('b1');
Texte
Tout le bloc est remplacé par le texte contenu dans la paramètre Requête. Les champs liés ne sont pas gérés sauf '#' qui retourne 1, ou 0 si Requête est une chaîne vide.
Exemple : $TBS->MergeBlock('b1','text','Bonjour, comment allez-vous ?');
Nombre
L'argument Requête peut être soit un nombre, soit un tableau.
arg Requête | Jeu d'enregistrements retourné |
Nombre : | Ce nombre doit être supérieur ou égale à zéro. Le jeu d'enregistrement retourné est composé d'une colonne 'val' dont la valeur va de 1 à ce nombre. |
Tableau : | Ce tableau doit contenir une clé 'min' et une clé 'max' et éventuellement une clé 'step'. Le jeu d'enregistrement retourné est composé d'une colonne 'val' qui va de la valeur de 'min' à la valeur de 'max'. |
$TBS->MergeBlock('b2','num',array('min'=>20,'max'=>30));
$TBS->MergeBlock('b3','num',array('min'=>10,'max'=>20,'step'=>2));
Vide
Tous les blocs et leurs sections sont supprimés. C'est la même chose que fusionner avec un tableau vide.
Exemple : $TBS->MergeBlock('b1','clear');
Conditionnel
Le bloc est fusionné comme si c'était un bloc conditionnel onload et onshow. Le bloc n'est pas fusionné avec des données et donc il ne doit pas avoir de champ TBS lié. Chaque section de bloc doit avoir un paramètre when ou un paramètre default. Voir bloc conditionnel pour plus de détails.
Exemple : $TBS->MergeBlock('bz','cond');
Tableau
Syntaxe de la chaîne : 'globvar[item1][item2]...'
'item1' et 'item2' sont des clés d'un item ou d'un sous item de $globvar.
Exemple:
Cela va fusionner 'block1' avec $jours['lun'] qui est supposé être un tableau.
Exemple:
Il y a deux avantages à utiliser une chaîne pour représenter le tableau :
-> Les items seront lus directement dans le tableau (assigné par référence) au lieu de lire une copie des items. Cela peut améliorer les performances.
-> Vous pouvez utiliser des requêtes dynamiques.
Afficher la clé de l'enregistrement en cours :
Vous pouvez utiliser la colonne virtuelle '$' qui affiche la clé de l'enregistrement en cours. Cela peut être particulièrement utile pour les sous-blocs avec requêtes dynamiques.
Exemple: [bloc1.$]
Structure des tableaux supportés :
Les items du tableau spécifié peuvent être de deux types : des valeurs simples avec des clés associées (cas 1), ou des valeurs tableaux dont les items sont eux-mêmes des valeurs simples avec des clés associées (cas 2).
Cas 1 :
Exemple : | ['clé1']=>valeur1 ['clé2']=>valeur2 ... |
Cas 2 :
Exemple : | [0] => (['colonne1']=>valeur1-0 ; ['colonne2']=>valeur2-0 ; ...) [1] => (['colonne1']=>valeur1-1 ; ['colonne2']=>valeur2-1 ; ...) [2] => (['colonne1']=>valeur1-2 ; ['colonne2']=>valeur2-2 ; ...) ... |
Méthode Show() :
Syntaxe : $TBS->Show({int Render})
La méthode Show() exécute les actions suivantes :
- fusion des champs [var] (par compatibilité avec les versions antérieures à 3.2.0),
- fusion des champs et blocs [onshow],
- affiche le résultat (cette action peut être annulée par la propriété ou l'argument Render),
- termine le script (cette action peut être annulée par la propriété ou l'argument Render).
La propriété et l'argument Render permettent de régler le comportement de la méthode Show(). Consultez la propriété Render pour plus d'information.
Méthode GetBlockSource() :
Si aucun bloc n'est trouvé, la méthode retourne la valeur False.
Syntaxe : string $TBS->GetBlockSource(string NomBloc {, boolean EnTableau}{, boolean BalisesDef}{, mix RemplacePar})
Argument | Description |
NomBloc | Nom du bloc à rechercher. |
EnTableau | Facultatif. La valeur par défaut est False. Si ce paramètre est à True, la méthode retourne le surce du bloc sous forme de tableau PHP au lieu d'une chaîne texte. Si le résultat est un tableau, alors chaque section est sauvée comme un item. Le premier item a l'index 1. |
BalisesDef | Facultatif. La valeur par défaut est True. Par défaut, la méthode GetBlockSource() retourne le source du bloc avec ses balises de définition. Si vous souhaitez que ces balises soient retirées, forcez l'argument BalisesDef à False. Si le bloc est défini avec une syntaxe simplifiée alors les balises de définition de bloc ne seront de toute façon pas supprimées car elles sont aussi des balises de champ. Historique : cet argument est supporté depuis TBS version 3.0. |
RemplacePar | Facultatif. la valeur par défaut est False. Si cet argument est une chaîne alors le source du bloc est remplacée par celle-ci dans le modèle. Vous pouvez utiliser RemplacePar = '' (chaîne vide) pour supprimer le source du bloc dans el modèle. Historique : cet argument est supporté depuis TBS version 3.05. |
Cette méthode permet de récupérer le source d'un bloc afin de gérer manuellement sa fusion. Si par la suite vous souhaitez remplacer le bloc par du texte, vous pouvez utiliser ma méthode MergeBlock() avec le paramètre 'text'.
Méthode MergeField() :
Depuis TBS version 3.0, il est aussi possible d'indiquer une méthode de classe (voir POO).
Tous les champs du modèle ayant le nom de base indiqué seront fusionnés.
Il est aussi possible de fusionner les champs spéciaux [onload], [onshow] et [var] (voir plus bas).
Syntaxe : $TBS->MergeField(string NomBase, mixed X {, boolean ModeFonction}{, array PrmParDefaut})
Argument | Description |
NomBase | Le nom de base des champs TBS. Par exemple 'compte'. |
X | La valeur à afficher (ou une chaîne représentant le nom d'une fonction utilisateur si l'argument ModeFonction est à true). |
ModeFonction | Indique que la valeur à afficher est calculée par une fonction utilisateur. La valeur par défaut est false. Si cet argument est à true, alors X doit être une chaîne texte donnant le nom de la fonction utilisateur. Cette fonction doit exister et avoir la syntaxe décrite ci-après. |
PrmParDefaut | Liste des paramètres à appliquer par défaut aux champs fusionnés. Les paramètres doivent être donnés sous forme d'un tableau PHP associatif. Si un paramètre est défini à la fois dans l'argument PrmParDefaut et dans le champ, c'est le paramètre du champ qui sera pris en compte. |
Fusion avec une valeur :
X peut être un numérique, une chaîne, un tableau ou un objet. Pour un tableau ou un objet, les noms de champs TBS doivent avoir des suffixes comme pour les champs automatiques ([onload] et [onshow]).
Exemple :
Fusion avec une fonction utilisateur :
TBS appelle une fonction utilisateur pour chaque champ trouvé dans le modèle.
Cette fonction doit avoir la syntaxe suivante:
Exemple :
...
function m_multilangue($Subname) {
global $langue_id;
$rs = mysql_query("SELECT texte_$langue_id AS txt FROM t_langue WHERE cle='$Subname");
$rec = mysql_fetch_array($rs);
return $rec['txt'] ;
}
Fusion de champs et blocs automatiques :
Vous pouvez vous servir de la méthode MergeField() pour forcer la fusion des champs et blocs automatiques ([onload] et [onshow]). Mais dans ce cas, seul le premier argument doit être indiqué.
Exemple : $TBS->MergeField('var');
Méthode PlugIn() :
Syntaxe : mixed $TBS->PlugIn(mixed arg1, mixed arg2, ...)
Rappel : pour que votre plug-in TBS fonctionne, sont script PHP doit préalablement être inséré dans votre application.
Exemple : include_once('tbs_plugin_xxx.php');
De plus, chaque plug-in TBS doit avoir une clé comme expliqué au chapitre Plug-ins.
Appeler une commande d'un plug-in :
Utilisez la clé du plug-in comme argument principal. Les arguments suivants sont propres au plug-in appelé.
Exemple :
Installer un plug-in :
Bien que certains plug-in soient installés automatiquement, dans d'autres cas il peut être utile de faire une installation manuelle. Pour cela on utilise la constante TBS_INSTALL avec la clé du plug-in .
Exemple :
* Un plug-in est installé relativement à une instance de TBS (une variable $TBS par exemple ). Si vous utilisez une deuxième instance de TBS (par exemple $TBS2) alors il vous faudra aussi installer le plug-in sur cette instance.
* Un plug-ins est installé automatiquement lors que vous appelez une de ses commandes à l'aide de la méthode PlugIn() (voir plus haut).
Propriété Assigned :
Syntaxe : array $TBS->Assigned
La propriété Assigned est un tableau PHP définie par l'utilisateur. On y enregistre les arguments des méthodes MergeBlock() ou MergeField(). Les arguments doivent être enregistrés dans un tableau PHP avec des clés numériques et ordonnées en suivant la syntaxe de ces méthodes. Il est possible d'utiliser des clés chaines optionnelles pour définir certains comportements :
Clé optionnelle | Description |
'type'=>'mergeblock' | Indique qu'il s'agit d'arguments pour la méthode MergeBlock(). Cette clé est facultative puisque c'est le comportement par défaut. |
'type'=>'mergefield' | Indique qu'il s'agit d'arguments pour la méthode MergeField(). |
'auto'=>'onload' | Indique que la fusion doit être lancée automatiquement après les balises [onload]. |
'auto'=>'onshow' | Indique que la fusion doit être lancée automatiquement après les balises [onshow]. |
'merged'=>0 | Cette clé est ajoutée automatiquement par TBS lors de la fusion. Elle compte le nombre de fois où cette entrée a été fusionnée. |
Exemple de fusion manuelle :
...
$TBS->MergeBlock('b'); // fusionne les blocks b1 et b2 avec la requête SQL
Exemple de fusion de champs :
...
$TBS->MergeField('f1'); // fusionne le ou les champs f1 avec le tableau $data
Remarques :
- Pour fusionner un bloc ou un champ déjà assigné, il suffit d'appeler la méthode correspondante avec seulement le nom de la clé assignée. Vous pouvez ajouter l'argument Source = 'assigned', mais cela est facultatif car il s'agit de la valeur par défaut. En d'autres termes, $TBS->MergeBlock('b') équivaut à $TBS->MergeBlock('b', 'assigned').
- Une assignation avec 'auto'=>'onload' ne serra bien sûr fusionnée que si elle est définie avant d'appeler méthode LoadTemplate().
- Vous pouvez passer des arguments par référence dans vos assignations. C'est particulièrement utile pour PHP 4 qui passe les objets en copie par défaut.
Propriété NoErr :
Syntaxe : boolean $TBS->NoErr
La propriété NoErr est pratique dans deux cas :
- Pour les sites professionnels mis en production pour lesquels aucun message d'erreur ne doit être affiché. Attention car vous n'avez plus aucune indication sur le bon déroulement de votre fusion. Il est souvent plus judicieux d'utiliser le paramètre noerr qui permet d'annuler des messages sur une balise TBS bien précise.
- Pour les fusions qui n'acceptent pas les messages d'erreur basic de TinuButStrong. Par exemple un document OpenOffice ne pourra pas s'ouvrir correctement si une erreur TBS survient. Utilisez $TBS->NoErr=true et le champ [onshow..error_msg] pour afficher les erreurs TBS dans un emplacement lisible de votre document OpenOffice.
- La propriété NoErr est supportée depuis TBS version 3.0.
- Le champ spécial [onshow..error_msg] est supporté depuis TBS version 3.5.0.
Propriété Render :
Sa valeur doit être une combinaison des constantes du tableau ci-dessous.
Par défaut, sa valeur est (TBS_OUTPUT + TBS_EXIT).
Syntaxe : int $TBS->Render
La propriété Render influe sur le comportement de la méthode Show().
Constante | Description |
TBS_NOTHING | Indique qu'aucune action ci-dessous n'est effectuée à la fin de la fusion. |
TBS_OUTPUT | Indique que le résultat de la fusion doit être affiché. (utilisation de la commande PHP Echo) |
TBS_EXIT | Indique qu'on doit quitter le script juste après la fin de la fusion. |
Propriété Source :
Lorsque TinyButStrong opère une fusion (en utilisant la méthode MergeBlock() par exemple), la propriété Source est modifiée immédiatement.
Syntaxe : string $TBS->Source
Remarques :
- La méthode LoadTemplate() charge un fichier dans la propriété Source et fusionne automatiquement les balises [onload]. Il se peut donc que Source soit un peu différent du modèle initial après LoadTemplate().
- La méthode Show() fusionne automatiquement les balises [onshow] avant d'afficher le résultat.
Pour charger un modèle contenue dans une variable Php, vous pouvez coder :
$TBS->LoadTemplate(null); // lance les plugins s'il y en a, et fusionne les balises [onload] s'il y en a
Pour récupérer le résultat à la fin d'une fusion, vous pouvez coder :
$resultat = $TBS->Source;
Propriété TplVars :
Syntaxe : array $TBS->TplVars
Vous pouvez définir des variables de modèle en utilisant un ou des champs automatiques onload avec le paramètre tplvars. Tous les paramètres qui suivent le paramètre tplvars sont ajoutés à la propriété TplVars quand la méthode LoadTemplate() est appelée.
[onload;tplvars;template_version='1.12.27';template_date='2004-10-26']
Cette balise TBS va créer deux items équivalents au code PHP suivant :
$TBS->TplVars['template_version'] = '1.12.27';
$TBS->TplVars['template_date'] = '2004-10-26';
- Le paramètre tplvars ne fonctionne qu'avec les champs automatiques onload.
- Vous pouvez utiliser le paramètre tplvars plusieurs fois dans le même modèle.
Programmation Orientée Objet (POO):
Appels à des méthodes de classe sans objet crées :
Fonctionnalité | Exemple |
Paramètre ondata | [blk1.colonne1;block=tr;ondata=MaClasse.methA] |
Paramètre onformat | [blk1.colonne2;onformat=MaClasse.methB] |
Méthode LoadTemplate() | $TBS->LoadTemplate('monmodele.htm','=MaClasse.methC'); |
Méthode MergeField() | $TBS->MergeField('nomchamp','MaClasse.methD',true); |
Appels à des objets crées :
Exemple :
Vous pouvez utiliser un tableau si vous avez plusieurs objets à référencer :
$TBS->ObjectRef['item1'] =& $MonObjet1;
$TBS->ObjectRef['item2'] =& $MonObjet2;
Vous pouvez utilisez autant de niveau que vous le souhaitez :
$TBS->ObjectRef['item3']['a'][0] =& $MonObjet3;
* Pensez à utiliser l'assignation par référence à l'aide de "=&" au lieu de "=", sinon une copie de l'objet sera créée.
* Une fois un objet référencé sous ObjectRef, ses sous-objets seront aussi accessibles par la syntaxe TBS.
• Utilisation d'ObjectRef dans les champs automatiques :
Utilisez le symbole '~' pour appeler ce qui est référencé sous ObjectRef.
Par exemple (valables aussi bien pour [onload], [onshow] et [var]):
Le champ | Ferra appel à | |
[onshow.~propA] | $TBS->ObjectRef->propA | |
[onshow.~propA.propB] | $TBS->ObjectRef->propA->propB | |
[onshow.~item2.propA] | $TBS->ObjectRef['item2']->propA | |
[onshow.~item2.methX] | $TBS->ObjectRef['item2']->methX() | |
[onshow.~item2.methY(a,b)] | $TBS->ObjectRef['item2']->methY('a','b') |
TBS opère un contrôle de cohérence, il déterminera de lui même si votre définition de champ automatique fait appel à ObjectRef via un item d'un tableau, une propriété d'objet ou une méthode d'objet. Dans tous les cas, faites bien attention à ce que votre champ automatique doit au final retourner une valeur et non pas un objet.
• Utilisation d'ObjectRef dans d'autres fonctionnalités TBS :
Les fonctionnalités TBS suivantes supportent l'appel à des méthodes d'objets référencés sous ObjectRef.
Fonctionnalité | Exemple |
Paramètre ondata | [blk1.colonne1;block=tr;ondata=~item1.methA] |
Paramètre onformat | [blk1.colonne2;onformat=~item1.methB] |
Méthode LoadTemplate() | $TBS->LoadTemplate('monmodele.htm','=~item1.methC'); |
Méthode MergeField() | $TBS->MergeField('nomchamp','~item1.methD',true); |
Méthode MergeBlock() | $TBS->MergeBlock('blk1','~madb','SELECT * FROM t_table'); |
Coté modèle :
Vous concevez votre modèle en plaçant des balises TBS aux endroits où doivent figurer les données.Il existe deux types de balises TBS : les champs et les blocs.
Un champ TBS est une balise TBS qui doit être remplacé par une donnée simple. Il est possible de spécifier un format d'affichage ainsi que d'autres paramètres. La syntaxe des champs TBS est décrite ci-après.
Un bloc TBS est une région qui devra être répétée. Il est défini par une ou deux balises TBS.
Le plus souvent il s'agit d'une ligne d'un tableau HTML. La syntaxe des blocs TBS est décrite ci-après.
Les champs TBS :
Un champ TBS doit avoir un nom pour l'identifier (qui n'est pas obligatoirement unique) et il peut avoir des paramètres pour modifier la valeur affichée.
Syntaxe : MODÈLE ... [NomChamp{;param1}{;param2}{;param3}{...}] ... MODÈLE
Élément | Description |
NomChamp | Le nom du champ. Attention : les noms de champs commençant par onload, onshow et var. sont réservés pour les champs automatiques. |
param1 | Facultatif. Un ou plusieurs paramètres de la liste ci-dessous, séparés par des ';'. Certains paramètres peuvent être affectés d'une valeur en utilisant le caractère '='. Exemple : frm=0.00 Si la valeur du paramètre contient des espaces, des points-virgules ou des guillemets, alors vous pouvez utiliser les guillemets simples comme délimiteurs. Exemple : frm='0 000.00' Utilisez un second guillemets simples pour échaper un caractère guillemet dans une chaîne délimitée. Exemple : ifempty='coucou c''est moi' Un paramètre peut contenir un champ TBS imbriqué mais uniquement dans certaines circonstances : - le champ imbriqué soit fusionné avant le champ parent, - le champ imbriqué est un champ [var] placé dans un paramètre file, script, if, then, else ou when. Dans les autres cas, le champ TBS imbriqué ne sera pas fusionné et sera interprété tel quel comme du texte. Exemples : [x;htmlconv=[var.y]] : [var.y] ne sera pas fusionné et le paramètre "htmlconv" aura une valeur non valide. [x;if [var.y]=1] : [var.y] sera correctement fusionné et la condition "if" sera correctement évaluée. |
Paramètre | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
htmlconv=val | Permet de modifier la conversion des caractères spéciaux pour ce champ TBS uniquement. Notez que la conversion de caractères spéciaux utilisée par défaut pour tous les champs TBS est celle définie par la méthode LoadTemplate(). Elle correspond souvent à un charset Xml/Html, mais pas nécessairement. La valeur val peut être l'un des mots-clés suivants :
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
. (point) | Si la donnée est vide, on affiche un espace Html insécable. Utile pour les cellules d'un tableau. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ifempty=val | Si la donnée est vide, on la remplace par la valeur indiquée. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
att=chemin | Déplace le champ en cours dans un attribut d'une balise XML/HTML avant d'être fusionné. Ce paramètre est très utile quand il est trop difficile pour le concepteur du modèle de placer un champ TBS dans un attribut. La valeur chemin doit indiquer l'emplacement de l'attribut relativement au champ en cours. Si l'attribut n'existe pas dans la balise spécifiée, alors il est crée. Si l'attribut existe déjà dans la balise spécifiée et qu'il a déjà une valeur, alors le champ remplace toute la valeur en cours. Vous pouvez choisir de placer le champ en tant que valeur ajoutée grâce au paramètre attadd. Vous pouvez compléter la valeur de l'attribut en lui appliquant un masque grâce au paramètre ope=msk. Vous pouvez supprimer l'attribut en cas de valeur vide grâce au paramètre magnet=#. Syntaxe pour la valeur chemin : [+][balise1+balise2+balise3+...#]attribut Par défaut, l'attribut est recherché avant le champ en cours. Mais si '+' est le premier caractère du chemin alors il est cherché après. Si aucune liste de balise n'est spécifiée alors l'attribut est regardé dans la première balise rencontrée dans la direction de la recherche. Si une liste de balise est utilisée, balise1 est recherché en premier, puis balise2, ... indépendamment du sens de la recherche (avant/après). Vous pouvez placer un nom de balise entre un ou plusieurs niveaux de parenthèses afin de spécifier que la balise recherchée doit encapsuler le champ en cours. Exemples : [onshow.x;att=class] se déplace dans l' attribut 'class' de la première balise placée avant.
[onshow.x;att=div#class] se déplace dans l' attribut 'class' du premier <div> placé avant. [onshow.x;att=+div#class] se déplace dans l' attribut 'class' du premier <div> placé après. [onshow.x;att=((div))#class] se déplace dans l' attribut 'class' du second <div> encapsulant placé avant. [onshow.x;att=table+div#class] se déplace dans l' attribut 'class' du premier <div> après le premier <table> placé avant. Remarques : - La méthode MergeBlock() ne peut pas déplacer un champ TBS par dessus un autre champ TBS placé après lui. Cela produit une erreur TBS. - Quand un attribut n'aucune valeur avant que le champ ne soit déplacé, alors TBS choisoi quel délimiteur de chaine il doit utiliser en fonction des autres attributs (XML/HTML accepte (") et (')). Vous pouvez forcer le délimiteur que vous voulez à l'aide de la propriété $TBS->AttDelim. Historique: Le paramètre att est supporté depuis TBS version 3.5.0 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
attadd | S'utilise avec le paramètre att. Indique que le champ s'ajoute à la valeur de l'attribut au lieu de remplacer la valeur de l'attribut. Remarquez que la valeur ajoutée ne sera pas simplement concaténée avec les valeurs précédentes, elle sera ajoutée avec un caractère espace comme séparateur afin de réaliser un ajout au sens des attributs. Exemple : <div class="style1">[onshow.x;att=class;attadd]
Il n'y a aucun moyen pour l'instant pour concaténer simplement la valeur du champ avec la valeur précédente de l'attribut. Mais à la pace, vous pouvez utiliser le paramètre ope=msk afin d'appliquer un masque sur la valeur du champ.dans cet exemple, si nous avons $x='style2' alors nous allons obtenir <div class="style1 style2"> Exemple : <div class="ancien">[onshow.z;att=class;ope=msk:style*]
dans cet exemple, si nous avons $z='2'alors nous allons obtenir <div class="style2"> Historique: Le paramètre attadd est supporté depuis TBS version 3.5.0 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
atttrue or atttrue=valeur |
S'utilise avec la paramètre att. Indique que l'attribut (désigné par la paramètre att) doit être géré en tant qu'attribut booléen XHTML/HTML. C'est à dire qu'il est soit présent dans la balise sous la forme attribute="attribute" pour dire VRAI, soit être omis dans la balise pour dire FAUX. Si atttrue est défini avec une valeur, alors l'attribut booléen sera VRAI (présent) si la valeur du champ est égale à cette valeur, sinon il sera FAUX (omis). Si atttrue est défini sans valeur, alors l'attribut booléen sera VRAI (présent) pour toute valeur du champ non vide, et sera FAUX (omis) si la valeur du champ est vide. Exemple : <input type="checkbox">[onshow.accepter;att=selected;atttrue=1]
Historique: Le paramètre atttrue est supporté depuis TBS version 3.6.0 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
magnet=tag ou magnet=expr |
Assigne une balise XML/HTML magnétique à un champ TBS. Une balise magnétique est gardée telle quelle quand le champ à une valeur, et elle est supprimée quand le champ est null ou chaîne vide. Le paramètre magnet a la même syntaxe que le paramètre block, c'est à dire que expr doit être une balise XML/HTML ou une expression de bloc étendu. Exemple :
Par défaut, la balise XML/HTML magnétique doit être un couple de balises ouvrante-fermante (comme <a></a>) dont la première balise est placée avant le champ TBS. Mais cela peut être changé en utilisant le paramètre mtype (voir ci-après).(<a href="[onshow.lien;magnet=a]">cliquez ici</a>) Résultat pour $lien='www.tbs.com': (<a href="www.tbs.com">cliquez ici</a>) Résultat pour $lien='': () Depuis TBS version 3.3.0, le paramètre ope a des mot-clés (nif, minv, mok et mko) qui améliorent l'utilisation du paramètre magnet. Remarque : les paramètres if then else sont traités avant le paramètre magnet. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
mtype=val | S'utilise avec la paramètre magnet. Définit le comportement de la balise magnétique.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
comm | Étendre les limites du champ TBS jusqu'aux limites de la balise commentaire Html qui l'entoure, ou bien jusqu'aux limites d'un autre couple de balise XML/HTML. Exemple : xxx <!-- [mochamp;comm] des commentaires ici --> yyy
ouxxx <div> [monchamp;comm=div] des commentaires ici </div> yyy
sont strictement identiques à :xxx [monchamp] yyy
Ce paramètre particulièrement pratique pour l'élaboration du modèle avec un éditeur HTML visuel (tel que Dreamweaver ou FrontPage).Historique : Le support pour les autres balise XML/HTML a été ajouté à TBS 3.0. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
noerr | Empêche l'affichage de certains messages d'erreurs TBS. Quand un message peut être annulé, cela est mentionné dans le message. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
file=nomfichier | Remplace le champ par le contenu du fichier. Nomfichier peut être une chaîne fixe ou une expression. Vous pouvez utiliser le mot-clé [val] dans l'expression pour insérer la valeur du champ en cours. Vous pouvez utiliser des champs [var] dans l'expression. Si le paramètre file est utilisé en omettant la valeur nomfichier (exemple : [onshow.file;file;subtpl]), alors c'est la valeur du champ qui est utilisée pour le nom du fichier. Si le fichier n'est pas trouvé il sera aussi recherché dans le répertoire du dernier modèle chargé (depuis TBS version 3.2.0). Exemples : [onload;file=entete.html]
Si nomfichier est une chaîne vide, alors aucun message d'erreur n'est affiché, c'est comme si le paramètre file est ignoré. Cela peut être utilisé pour gérer l'insertion conditionnelle de fichier. [onload;file=[var.fichier]] Exemple : [onload;file=[var.insertion;if [val]=1;then 'entete.html';else '']]
Vous trouverez plus de détails sur ce paramètre la rubrique Sous-modèles.Voir aussi : getbody script |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
getbody=listebalise | S'utilise avec le paramètre file ou script. Indique qu'on ne charge pas le fichier entièrement mais seulement certaines parties XML/HTML définie par la liste de balises. Les balises de la liste doivent être séparées par des plus (+), et placées entre parenthèses si vous voulez que les balises elles-mêmes soient récupérées avec leur contenu. Si le fichier contient plusieurs patries XML/HTML, alors toutes ces parties seront automatiquement concaténées. Si le paramètre getbody est utilisé sans valeur, alors la balise <body> est prise par défaut. Exemple : [onload;file=entete.htm;getbody=(script)+(style)+body]
Historique : le paramètre getbody est supporté depuis TBS version 3.0.
Dans les versions précédentes, il était opéré automatiquement lors de l'utilisation du paramètre file. Maintenant il devient explicite. La liste de balise est supportée depuis TBS version 3.5.0. Avant cette version, la valeur de getbody ne peut être qu'une balise unique sans parenthèses. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
rename ancien=nouv | S'utilise avec le paramètre file ou script. Renomme des blocs et des champs TBS dans le sous-modèle avant son insertion. Vous pouvez définir plusieurs blocs à renommer en les séparant par des virgules. Si un nouveau nom est une chaîne vide, alors l'ancien bloc sera supprimé en le fusionnant avec un tableau vide. Ce paramètre est utile quand vous voulez utiliser le même sous-modèle plusieurs fois dans le modèle principale. Exemple : Adresse 1: [onload;file=adresse.htm]
Adresse 2: [onload;file=adresse.htm;rename ville1=ville2,code1=code2,email=] Historique : le paramètre rename est supporté depuis TBS version 3.5.1.
Voir rubrique 'Sous-modèles' pour plus de détails à propos des sous-modèles. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
script=nomfichier | Exécute le script PHP juste avant le remplacement du champ. Nomfichier peut être une chaîne fixe ou une expression. Vous pouvez utiliser le mot-clé [val] dans l'expression pour insérer la valeur du champ en cours. Vous pouvez utiliser des champs [var] dans l'expression. Si le paramètre script est utilisé en omettant la valeur nomfichier (exemple : [onshow.file;script;subtpl]), alors c'est la valeur du champ qui est utilisée pour le nom du fichier. Si le fichier n'est pas trouvé il sera aussi recherché dans le répertoire du dernier modèle chargé (depuis TBS version 3.2.0).
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
subtpl | S'utilise avec le paramètre script ou onformat. Active le mode sous-modèle pendant l'exécution du script ou de la fonction. Voir le chapitre Sous-modèles pour plus d'information. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if exp1=exp2 | Affiche la donnée si la condition est vérifiée, sinon n'affiche rien à moins que les paramètres then ou else soient utilisés. Les opérateurs supportés sont :
Vous pouvez utiliser le mot-clé [val] dans l'expression pour insérer la valeur du champ en cours. Vous pouvez utiliser des champs [var] dans l'expression. Les expressions peuvent contenir d'autres champs TBS, mais vous devez vous assurer qu'ils soient fusionnés avant le champ contenant. Depuis TBS version 3.0, il est aussi possible de définir plusieurs couple de if/then dans le même champ. Voir paramètres then et else pour des exemples. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
then val1 | Si le paramètre if a été défini et que sa condition est vérifiée, alors la donnée sera replacée par val1. Depuis TBS version 3.0, il est aussi possible de définir plusieurs couples de if/then dans le même champ. Exemple : [onshow.image;if [val]='';then 'image0.gif']
Vous pouvez utiliser le mot-clé [val] dans l'expression pour insérer la valeur du champ en cours.[onshow.x;if [val]=1;then 'un';if [val]=2;then 'deux';else 'plus'] Vous pouvez utiliser des champs [var] dans l'expression. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
else val2 | Si le paramètre if a été défini et que sa condition n'est pas vérifiée, alors la donnée sera replacée par val2. Exemple : [onshow.error_id;if [val]=0;then 'pas d''erreur';else 'erreur constatée']
Vous pouvez utiliser le mot-clé [val] dans l'expression pour insérer la valeur du champ en cours.Vous pouvez utiliser des champs [var] dans l'expression. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
onformat=nom_fct | Indique le nom d'un fonction PHP utilisateur qui sera exécutée avant la fusion du champ. Depuis TBS version 3.0, il est aussi possible d'indiquer une méthode de classe (voir POO). La fonction nom_fct doit avoir la syntaxe suivante : function nom_fct($NomChamp,&$CurrVal,{&$CurrPrm,{&$TBS}}) { ... }
Depuis TBS version 3.6.0, il est possible de limiter les fonctions PHP autorisées pour le paramètre onformat. Voir créer un nouvel objet PHP. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
protect=val | Permet de protéger ou non la donnée à fusionner en remplaçant les caractères '[' pour leur équivalent Html '['. La valeur val peut être l'un des mots-clés suivants : yes : (valeur par défaut) la donnée est protégée. no : la donnée n'est pas protégée. Par défaut, toutes données fusionnées avec un modèle sont protégées sauf s'il s'agit de l'inclusion d'un autre fichier. Il est fortement recommandé de protéger les valeurs affichées lorsque qu'il s'agit de données saisies librement comme sur un forum par exemple. Il est néanmoins possible de désactiver la protection par défaut en mettant la propriété $TBS->Protect à false. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ope=action | Effectue une ou plusieurs opérations sur la valeur à fusionner. Vous pouvez définir plusieurs opération à exécuter en ordre en les séparant par des virgules (,). Exemple : [onshow.x;ope=add:-1,mod:10]
Les opérations supportées sont :
Historique : - Le paramètre ope est supporté depuis TBS version 3.0. Il remplace le paramètre max qui n'existe plus depuis cette version. - Les opérations multiples et "mul" et "div" sont supportées depuis TBS version 3.2.0 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
frm=format | Spécifie un format d'affichage pour une donnée de type date/heure ou numérique. Il est possible d'utiliser un format conditionnel qui change selon le signe de la valeur. Le format est considéré de type numérique s'il contient le caractère 0, sinon il est considéré de type date/heure. La valeur à fusionner n'influe pas sur le type de format. Format date/heure :
Il s'agit d'un format semblable au format VisualBasic. Les mots-clés suivants sont reconnus :
Les autres caractères sont conservés. Il est possible de mettre de protéger des chaînes texte en les plaçant entre guillemets doubles ("). Exemples : [chp;frm=dd/mm/yyyy] affichera 21/12/2002
[chp;frm='yyyy-mm-dd hh:nn:ss'] affichera 2002-12-21 15:45:03 Historique :
- Les mots-clés ampm et AMPM sont supportés depuis TBS version 3.0. - Le mot-clé hm supportés depuis TBS version 3.0 est déprécié et remplacé par rr depuis TBS 3.2.0. - Les mots-clés rr, r et h sont supportés depuis TBS version 3.2.0. - Me mot-clé (locale) est supporté depuis TBS version 3.4.0. Format numérique :
Pour définir la partie décimale, utilisez un expression du type '0d0...' où 'd' est le séparateur de décimal, et '0...' est une répétition de zéro correspondant au nombre de décimales. S'il n'y a aucune décimale, utilisez le format '0.' (avec un point). Pour définir un séparateur de milliers, utilisez une expression du type '0m000d...' où 'm' est le séparateur de milliers. S'il n'y a aucune décimale, utilisez le format '0m000.' (avec un point). Pour afficher les zéros non significatifs, utilisez une expression du type '0000d...' où '0000' représente le nombre de chiffres que vous voulez avoir. S'il n'y a pas de décimale, utilisez le format '0000.' (avec nu pointa dot). Historique : Cette fonctionnalité est supportée depuis TBS version 3.5.2. Si le format contient le caractère '%', alors la valeur affichée sera multipliée par 100. Le caractère '%' reste affiché. Le format numérique peut contenir d'autres chaînes texte. Mais seule l'expression de zéro placée la plus à droite sera considérée comme un format, les autres caractères seront conservés. Exemples :
Formats conditionnels :
Il est possible de définir jusqu'a 4 formats conditionnels selon que la valeur est respectivement positive, négative, zéro ou nulle (ou chaîne vide). Les formats conditionnels doivent être séparés par un caractère '|'. Chaque format conditionnel est facultatif. Exemples :
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
locale | Obsolète depuis TBS version 3.4.0. Il fait la même chose que le mot-clé (locale) utilisé dans le paramètre frm. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tplfrms | Permet de définir des formats dans le modèle que vous pouvez réutiliser pour le paramètre frm. Ce paramètre ne fonctionne qu'avec des champs automatiques onload. Exemple : [onload;tplfrms;euro=0 000,00 €;mydt=yyyy-mm-dd] [onshow.montant;frm=euro] ... [onshow.date;frm=mydt] |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tplvars | Permet de définir des variables dans le modèle que vous pouvez récupérer dans le programme Php en utilisant la propriété TplVars. Ce paramètre ne fonctionne que avec des champs automatiques onload. |
Quand vous souhaitez utiliser plusieurs paramètres dans le même champ TBS, il peut être intéressant de comprendre dans quel ordre ils sont traités.
Chaque paramètre change la valeur à fusionner, mais la source d'où la valeur est prise n'est pas changée.
Ordre :
1) -> Récupération de la valeur du champ à fusionner.
2) -> Traitement des paramètres sur la valeur :
2.1) -> onformat
2.2) -> ope / plug-ins OnOperation
2.3) -> frm / XML/HTML ou autre conversion de caractères
2.4) -> if
2.5) -> file
2.6) -> script
2.7) -> att
2.8) -> . / ifempty / magnet
3) -> Insertion de la valeur dans le modèle.
Les champs automatiques :
Exemple : [onload.x] sera fusionné automatiquement avec la variable globale $x quand la méthode LoadTemplate() est appelée.
Les champs automatiques peuvent fusionner des variables PHP uniquement si elles sont globales. Il n'existe pas de solution pour fusionner une variable qui est locale à une fonction, à moins lui faire une référence avec une variable globale, ou de la fusionner avec MergeField().
Les champs automatiques peuvent aussi fusionner des informations spéciales de TBS (voir Champs automatiques spéciaux), ou des données de la propriété ObjectRef (voir Programmation Orientée Objet).
Il existe trois types de champs automatiques :
- Les champs [onload], qui sont fusionnés automatiquement quand la méthode LoadTemplate() est appelée.
- Les champs [onshow], qui sont fusionnés automatiquement quand la méthode Show() est appelée.
- Les champs [var], qui sont fusionnés automatiquement durant la fusion du champ dans lequl ils sont encapsulés mais uniquement s'ils sont placés dans les paramètres file, script, if, then, else et when.
- Les champs automatiques [onload] et [onshow] sont supportés depuis TBS version 3.2.0. Par compatibilité avec les versions avant 3.2.0, les champs [var] restants sont toujours fusionnés comme des champs [onshow] mais il est conseillé d'utiliser de véritables champs [onshow] à la place.
- Les champs var ne sont traités dans les paramètres then et else que depuis TBS version 2.02.
Les champs automatiques peuvent avoir ou ne pas avoir de sous-nom, comme le x dans [onload.x], [onshow.x] ou [var.x]. Un champ automatique qui n'a pas de sous-nom sera fusionné avec la valeur chaine vide (''). Exemple : [onload;file=entete.html] ce champ instert un sous-modèle quand la méthode LoadTemplate() est appelée.
Un champ automatique qui a un sous-nom sera fusionné avec la variable globale PHP correspondante.
Si la variable globale n'existe pas à ce moment là alors une erreur TBS se produit à moins que l'on ajoute le paramètre noerr.
Exemples :
[onshow.x] ce champ sera fusionné avec la variable globale $x quand la méthode Show() sera appelée.
[b1.col1;if [val]=[var.x];then 'bien'; else 'mauvais'] : le champ [var.x] est fusionné en même temps que [b1.col1].
Vous pouvez aussi fusionner des items de tableau, des propriétés d'objet ou des résultats de méthode à l'aide du séparateur point ("."). Les variables de type Ressource sont ignorées.
Par exemples (valables aussi bien pour [onload], [onshow] et [var]) :
[onshow.tbl.item1] | va afficher | $tbl['item1'] | ||
[onshow.tbl.item2.a.0] | va afficher | $tbl['item2']['a'][0] | ||
[onshow.obj.prop1] | va afficher | $obj->prop1 | ||
[onshow.obj.methA] | va afficher | $obj->methA() | ||
[onshow.obj.methB(x,y)] | va afficher | $obj->methB('x','y') | ||
[onshow.tbl.item3.prop2.item4 | va afficher | $tbl['item3']->prop2['item4'] |
Remarque : vous pouvez forcer la fusion des champs automatiques (ou d'autres types de champ) à tout moment grâce à la méthode MergeField().
Champs automatiques imbriqués
Un champs TBS imbriqué n'est jamais fusionné à moins que :
- il soit fusionné avant le champ parent,
- il s'agit d'un champ [var] placé dans un paramètre file, script, if, then, else ou when.
Exemples :
Cet exemple affichera toujours 'non', car le champ imbriqué [onload.x] ne sera jamais évalué. Il vaut mieux utiliser à la place [onload;if [var.x]=1;then 'oui';else 'non'], ou encore mieux [onload.x;if [val]=1;then 'oui';else 'non']
[b1.nom;block=tr;headergrp=[var.x]]
Dans cet exemple, [var.x] ne sera pas encore fusionné quand vous appelez $TBS->MergeBlock('b1',...)
L'entête de groupe sera donc défini de façon incorrecte.
Il faut :
- soit utiliser un champ onload : [b1.name;block=tr;headergrp=[onload.x]]
- soit appeler $TBS->MergeField('var') avant $TBS->MergeBlock('b1',...)
- soit utiliser un nom de champ personnalisé : [b1.name;block=tr;headergrp=[zzz]] fusionné manuellement avec $TBS->MergeField('zzz',$x)
Sécurité : comment limiter l'utilisation des champs automatiques dans les modèles ?
Vous pouvez limiter l'utilisation des champs automatiques en définissant un préfixe pour les variables PHP autorisées. Pour les détails, voir créer un nouvel objet TBS.
Empêcher le traitement des champs automatiques [onload] et [onshow]
Les propriétés $TBS->OnLoad et $TBS->OnShow vous permettent d'annuler le traitement des champs [onload] et [onshow]. Ces propriétés acceptent uniquement les valeurs true et false. Cela peut être très pratique principalement, mais pas uniquement, pour certains plug-ins TBS. Les champs [var] sont traités automatiquement même si $TBS->OnShow = false.
Exemple :
$TBS->OnShow = false;
Les propriétés OnLoad et OnShow sont supportées depuis TBS version 3.6.0.
Les champs automatiques spéciaux :
Le sous-nom d'un champ automatique spécial doit être un de la liste ci-dessous.
Les paramètres de champs TBS standards sont valables pour les champs [var] Spéciaux.
Exemple : Date du jour : [onshow..now;frm='dd/mm/yyyy']
(valables aussi bien pour onload, onshow et var) :
Nom | Description |
onload..now | Date et heure du serveur. |
onload..version | La version de TinyButStrong. |
onload..script_name | Le nom du fichier PHP en cours d'exécution. |
onload..template_name | Le nom du dernier fichier modèle chargé. Il s'agit du nom tel que indiqué lors de l'appel à la méthode LoadTemplate(). |
onload..template_date | La date de création du dernier fichier modèle chargé. |
onload..template_path | Le répertoire du dernier fichier modèle chargé. Il s'agit du répertoire tel que indiqué lors de l'appel à la méthode LoadTemplate(). |
onload..tplvars.* | La valeur d'un item défini dans la propriété TplVars. ('*' doit être la clé d'un item existant dans le tableau) |
onload..cst.* | La valeur d'une constante PHP. (* doit être le nom d'une constante existante) |
onload..tbs_info | Information sur TBS et les plug-ins installés. |
onshow..error_msg | Affiche les messages d'erreur qui ont été annulés durant le temps où la proprété NoErr est définie à true. Ce champ automatique spécial est utile surtout avec onshow. |
- les champs var spéciaux "cst" et "tbs_info" sont supportés depuis TBS version 3.2.0.
- "error_msg" est supporté depuis TBS version 3.5.0.
Les blocs TBS :
On peut définir un bloc TBS à l'aide d'une ou deux balises TBS (voir plus bas).
Fusion avec des données :
La fusion d'un bloc avec des données est réalisée grâce à la méthode MergeBlock(). Quand un bloc TBS est fusionné avec des données, il est répété autant de fois qu'il y a d'enregistrements ; et les champs TBS associés sont remplacés par les valeurs des colonnes de l'enregistrement en cours.
Un champ TBS associé à un bloc est identifié par son nom qui doit être composé du nom du bloc suivi du nom de la colonne à afficher et séparés par un point.
Exemples :
- [Bloc1.ColB;frm='dd-mm-yyyy'] Champ avec un paramètre
Depuis TBS version 3.5.0 les noms de colonne avec espaces sont acceptés.
Attention : lorsque deux blocs séparés portent le même nom, alors ils seront considérés comme deux sections d'un même bloc. Tout ce qui se trouve entre deux sections d'un bloc sera ignoré et supprimé lors de la fusion. Voir sections de bloc pour plus de détail sur les sections.
Il existe trois syntaxes possibles pour définir un bloc TBS :
MODÈLE...[NomBloc;block=begin;params]...MODÈLE...[NomBloc;block=end]...MODÈLE
MODÈLE...<nom_balise...>...[NomBloc;block=nom_balise;params]...</nom_balise...>...MODÈLE
Cette balise TBS sera supprimée lors de la fusion.
Remarque : Vous pouvez aussi définir une zone de bloc en combinant des balises XML/HTML. Voir le paramètre block pour plus de détails.
MODÈLE...<nom_balise...>...[NomBloc.NomColonne;block=nom_balise;params]...</nom_balise...>...MODÈLE
Remarques :
• vous ne devez pas répéter le paramètre block=... sur chaque champ du bloc, un seul suffit. Si vous en mettez plusieurs, ce sera accepté par TBS mais il y aura peut être des confusions sur des paramètres de bloc complémentaires.
• Vous pouvez aussi définir une zone de bloc en combinant des balises XML/HTML. Voir le paramètre block pour plus de détails.
La syntaxe 'explicite' est rarement utilisée avec des éditeurs visuels parce que les balises TBS doivent souvent être placées entre deux balises XML/HTML. Par contre, elle convient assez bien pour des éditeurs textuels.
La syntaxe 'relative' permet de désigner un bloc avec seulement une balise TBS. De plus, on pas besoin de cacher la balise TBS car elle sera supprimée lors de l'affichage. Cette syntaxe est assez pratique.
La syntaxe 'simplifiée' est réellement simple. Elle permet de définir un bloc TBS et un champ TBS avec une seule balise TBS. Cette syntaxe est la plus courante et la plus pratique.
Exemple :
<balise_perso>Bonjour [blk1.colonne1;block=balise_perso], comment allez vous ?</balise_perso>
Paramètre | Description | |||||||||||||||||||||
nodata | Désigne une section qui ne s'affiche que s'il n'y a aucune donnée à fusionner. Exemple :
Pour plus d'information sur les sections, voir le paragraphe 'sections de bloc'. |
|||||||||||||||||||||
bmagnet=tag ou bmagnet=expr |
Désigne une zone XML/HTML qui doit être supprimée si le bloc n'est fusionné avec aucun enregistrement (une requête vide, par exemple, ou un tableau PHP sans item). Le paramètre bmagnet a la même syntaxe que le paramètre block, c'est à dire que expr doit être une balise XML/HTML ou une expression de bloc étendu. Exemple :
Remarque : La valeur null n'est pas acceptée par la méthode MergeBlock() comme une source de données, et elle provoque une erreur TBS au lieu de supprimer la zone bmagnet. Si votre source peut être nulle, vous devez faire une vérification préalable. Exemple : if (is_null($data)) $data = array();
$TBS->MergeBlock('b1',$data); Historique : le paramètre bmagnet est supporté depuis TBS version 3.0. |
|||||||||||||||||||||
headergrp=colnom | Désigne une section d'entête qui sera affichée chaque fois que la colonne colnom change de valeur. colnom doit être un nom de colonne valide retourné par la source de données. Depuis TBS version 3.3.0, colnom peut aussi être une colonne virtuelle # ou $, et il supporte aussi la syntaxe des sous-items des champs TBS. Vous pouvez définir plusieurs sections headergrp sur des colonnes différentes. L'ordre de placement des sections headergrp dans un bloc peut changer le résultat. Pour plus d'information sur les sections, voir le paragraphe 'sections de bloc'. |
|||||||||||||||||||||
footergrp=colnom | Désigne une section de pied qui sera affichée chaque fois que la colonne colnom change de valeur. See headergrp. | |||||||||||||||||||||
splittergrp=colnom | Désigne une section de séparation qui sera affichée chaque fois que la colonne colnom change de valeur. See headergrp. | |||||||||||||||||||||
parentgrp=colnom | Désigne une section parent qui sera affichée chaque fois que la colonne colnom change de valeur. Contrairement aux autres sections, une section parentgrp peut contenir des sections normales. C'est un moyen de définir un entête et pied de groupe avec une seule section. | |||||||||||||||||||||
serial | Indique que le bloc est un bloc principal qui contient une série de blocs secondaires. Pour plus d'information, voir le paragraphe 'Affichage en série (en colonne)'. |
|||||||||||||||||||||
p1=val1 | Signal l'utilisation d'une requête dynamique. Toutes les occurrences de la chaîne '%p1%' trouvées dans la requête passée à la méthode MergeBlock() sont remplacées par la valeur val1. Pour plus d'information, voir le paragraphe Sous-blocs et requêtes dynamiques. S'il est utilisé sans valeur, cela vous permet de fusionner plusieurs blocs du même nom. Pour plus de détail, voir "Fusionner plusieurs blocs avec les mêmes données". |
|||||||||||||||||||||
sub1=colonne1 | Définie la colonne contenant les données pour un sous-bloc automatique. Pour plus d'information, voir le paragraphe Sous-blocs automatiques. |
|||||||||||||||||||||
ondata=nom_fct | Indique le nom d'une fonction Php utilisateur qui sera exécutée pendant la fusion du bloc. Depuis TBS version 3.0, il est aussi possible d'indiquer une méthode de classe (voir POO). Cette fonction est appelée chaque fois qu'un enregistrement est récupéré dans la source de données. Vous pouvez utilisez les arguments d'une telle fonction Php pour modifier les enregistrements avants qu'ils ne soient fusionnés. La fonction doit avoir la syntaxe suivante: function nom_fct($NomBloc,&$Enreg,$NumEnreg) { ... }
function f_ajout_colonne($NomBloc,&$Enreg,$NumEnreg) {
$Enreg['taille'] = strlen($Enreg['texte']); } Depuis TBS version 3.6.0, il est possible de limiter les fonctions PHP autorisées pour le paramètre ondata. Voir créer un nouvel objet PHP. |
|||||||||||||||||||||
when expr1=expr2 | Rend la section conditionnelle et définie la condition. Une section conditionnelle n'est affichée que si sa condition est vérifiée. Les opérateurs supportés sont :
Exemple : <div>[onload;block=div;when [var.x]+-0] ... </div>
Le bloc <div> ne sera affiché que si $x>0. Remarque : ne pas confondre le paramètre when (qui ne marche qu'avec les blocs et sections TBS) et le paramètre if (qui ne marche qu'avec les champs TBS). Le paramètre when n'est pris en compte que si le paramètre block est présent dans la même balise TBS. Consultez la rubrique blocs conditionnels pour plus d'information. |
|||||||||||||||||||||
default | S'utilise uniquement avec les blocs conditionnels. Indique un bloc conditionnel qui ne doit s'afficher que si aucune des autres sections du même bloc (nommé) n'a été affichée. | |||||||||||||||||||||
several | S'utilise uniquement avec les blocs conditionnels. Indique que plusieurs sections du bloc (nommé) peuvent être affichées si plusieurs conditions sont vérifiées. Par défaut, les sections sont exclusives. |
Sections de bloc :
Les sections peuvent servir pour :
- alterner la présentation (sections normales),
- afficher quelque chose si il n'y a aucun enregistrement (section NoData),
- afficher un entête à chaque changement de la valeur d'une colonne (sections de regroupement).
Quand vous définissez plusieurs sections normales, elles seront utilisées de façons alternatives à chaque enregistrement.
[b1.libelle;block=tr] |
[b1.libelle;block=tr] |
Dans cet exemple, le bloc nommé 'b1' contient deux sections normales. Les enregistrements seront affichés alternativement avec un fond vert puis un fond bleu.
Affiche la section si la source de données de contient aucun enregistrement.
La section NoData est définie en ajoutant le paramètre nodata.
[b1.libelle;block=tr] |
Il n'y a rien. [b1;block=tr;nodata] |
Les sections de regroupement s'affichent chaque fois que la valeur d'une colonne du jeu d'enregistrement change. Vous pouvez définir des sections d'entêtes, de pieds-de-groupe, de séparation et des sections parent à l'aide des paramètres headergrp, footergrp, splittergrp et parentgrp. Voir les paramètres de bloc pour plus de détail.
Année :[b1.annee;block=tr;headergrp=annee] | |
[b1.libelle] | [b1.montant;block=tr] |
Les sections conditionnelles ne s'affichent que lorsque leur condition est vérifiée. La condition d'affichage est définie avec le paramètre when. Dès qu'une section a ce paramètre, elle devient conditionnelle. Voir le chapitre sur l'affichage conditionnel pour plus de détail.
[b1.nom;block=tr] |
[b1.adresse;block=tr;when [b1.adr_ok]==1] |
Blocs automatiques :
Il existe deux types de blocs automatiques :
- Les blocs [onload] qui sont fusionnés automatiquement quand la méthode LoadTemplate() est appelée.
- Les blocs [onshow] qui sont fusionnés automatiquement quand la méthode Show() est appelée.
Les blocs automatiques ne sont pas fusionnés avec des données ; c'est pourquoi ils ne peuvent pas avoir de sections normales (non conditionnelles) ni de champs liés. Les blocs automatiques ne peuvent avoir que des sections conditionnelles. Les conditions sont évaluées une seule fois, et elles peuvent être des expressions contenant des champs [var].
[onload;block=tr;when [var.lumiere]=1] Lumière allumée. |
[onshow;block=tr;when [var.user]=1] Utilisateur : [onshow.username] |
Si vous avez besoin d'avoir un groupe sections exclusives, avec ou sans section par défaut, vous pouvez suffixer les noms de bloc [onload] et [onshow] avec "_" suivi d'un nom secondaire.
[onload_lumiere;block=tr;when [var.lumiere]=1] Lumière allumée. |
[onload_lumiere;block=tr;when [var.lumiere]=0] Lumière éteinte. |
[onload_lumiere;block=tr;default] Lumière ? |
Voir les sections conditionnelles pour plus d'information.
Affichage en série (en colonnes) :
|
||||
|
||||
|
Dans cet exemple, les blocs principaux sont les lignes bleues du tableau, les blocs secondaires sont les cases roses.
|
Le code PHP correspondant est :
$TBS->MergeBlock('bx',$cnx_id,'SELECT txt FROM t_info ORDER BY txt')
|
||||
|
Remarque :
L'affichage en série marche aussi avec les sections de bloc et les requêtes dynamiques.
Les sous-blocs :
Bloc parent - enregistrement n° 1
|
|||
Bloc parent - enregistrement n°2
|
|||
Bloc parent - enregistrement n°3
|
On peut réaliser des sous-blocs de deux manières différentes avec TBS :
- Sous-blocs automatiques : (depuis TBS 3.5.0) c'est lorsque les données du bloc parent ont une colonne qui contient les données prête à fusionner pour le sous-bloc. Les sous-blocs automatiques sont activées à l'aide du paramètre sub1 dans le bloc parent, et ils sont fusionnées automatiquement pendant la fusion du bloc parent. Il n'y a pas besoin d'un MergeBlock() supplémentaire.
Voir Sous-blocs automatiques pour plus de détails.
- Sous-blocs avec requête dynamique : c'est quand les données du sous-bloc sont récupérées à l'aide d'une requête qui peut changer pour chaque enregistrement du bloc parent. Les sous-blocs avec requête dynamiques ont besoin d'un MergeBlock() supplémentaire pour réaliser l fusion avec leur requête dynamique. Le paramètre p1 est aussi nécessaire dans la définition, du sous-bloc afin de préciser les valeurs à injecter dans la requête dynamique.
Voir Sous-blocs avec requêtes dynamiques pour plus de détail.
Sous-blocs automatiques :
Vous pouvez utiliser les sous-blocs automatiques lorsque les données du bloc parent ont une colonne qui contient les données prête à fusionner pour le sous-bloc. Ajoutez le paramètre sub1=colonne dans le bloc parent pour définir la colonne qui contient les données pour le sous-bloc. Si vous avez plusieurs sous-blocs à fusionner dans le même bloc parent, alors utilisez les paramètres sub2, sub3, ... Le nom du sous-bloc doit être le même que le bloc parent suivi du suffixe _sub1, (ou _sub2, _sub3, ...)
Les données du bloc parent doivent avoir une colonne contenant les données du sous-bloc. Les types de données supportés sont :
- un tableau PHP
- un objet supporté par TBS (en natif, ou avec un plug-in)
- une chaine texte de valeurs séparées par des virgules (,).
Nom : [pers.nom;block=tr;sub1=langue]
|
Code PHP correspondant :
$TBS->MergeBlock('pers',$cnx_id,'SELECT nom,langue FROM t_personne')
Résultats de la fusion :
Nom : Pierre
|
|||
Nom : Paul
|
|||
Nom : Jacques
|
Avoir une colonne optionnelle : Si vous ne voulez pas de message d'erreur quand la colonne est omise dans les données parent, alors vous pouvez la définir comme optionnelle en utilisant des parenthèses. Cela fonctionne uniquement si les données parent est un tableau PHP. La colonne optionnelle est supportée depuis TBS version 3.6.0.
Nom : [pers.nom;block=tr;sub1=(langue)]
|
Sous-blocs directs (qui ne sont pas enregistrés sous une colonne) : Si vous utilisez le paramètre sub1 en omettant le nom de colonne, alors TBS va considérer que les données du sous-bloc sont directement accessibles sur l'enregistrement en cours plutôt que dans une colonne de cet enregistrement. Les sous-blocs directs sont supportés depuis TBS version 3.6.1.
$data = array();
$data['groupe1'] = array();
$data['groupe1'][] = array('id'=>1, 'nom'=>'pierre');
$data['groupe1'][] = array('id'=>2, 'nom'=>'paul');
$data['groupe2'] = array();
$data['groupe2'][] = array('id'=>3, 'nom'=>'jules');
$data['groupe2'][] = array('id'=>4, 'nom'=>'jim');
Exemple de sous-bloc direct qui peut être fusionné avec ces données :
Groupe : [pers.$;block=tr;sub1]
|
Sous-blocs avec des requêtes dynamiques :
Il est possible d'utiliser la méthode MergeBlock() avec une requête dynamique.
Dans votre modèle, vous devez définir un bloc en ajoutant les paramètres p1, p2, p3,... avec leurs valeurs.
La requête passée à la méthode MergeBlock() doit contenir des marqueurs %p1%, %p2%, %p3%, ... pour accueillir les valeurs des paramètres p1, p2, p3,... .
Chaque section du bloc à fusionner contenant un paramètre p1 sera traité comme un bloc à part pour lequel on ré-exécute la requête dynamique. Les sections du bloc sui n'ont pas de paramètre p1 sont rattachées à la section avec paramètre p1 qui précède.
Pays : France
[blk.ville;block=tr;p1='france'] | [blk.pays] |
Pays : USA
[blk.ville;block=tr;p1='us'] | [blk.pays] |
Code PHP correspondant :
$TBS->MergeBlock('blk',$cnx_id,"SELECT ville,pays FROM t_geo WHERE (pays='%p1%')")
Résultat de la fusion :
Pays : France
Paris | france |
Toulouse | france |
Pays : USA
Washington | us |
Boston | us |
Les requêtes dynamiques vous permettent de réaliser simplement un système de bloc-principal / sous-blocs. Voici comment vous pouvez faire :
- Créez un bloc principal, puis un sous-bloc contenu dans le bloc principal.
- Liez-les en ajoutant au sous-bloc un paramètre p1 qui prend pour valeur un champ du bloc principal.
- Du côté PHP, fusionnez d'abord le bloc principal, puis le sous-bloc.
Pays : [pri.pays;block=tr]
|
Code PHP correspondant :
$TBS->MergeBlock('pri',$cnx_id,'SELECT pays,pays_id FROM t_pays')
$TBS->MergeBlock('sub',$cnx_id,'SELECT ville FROM t_ville WHERE (pays_id=%p1%)')
Résultat de la fusion :
Pays : France
|
||
Pays : Allemagne
|
||
Pays : Espagne
|
Remarques :
- Le paramètre htmlconv=esc permet de passer à la requête des valeurs chaînes protégées.
- Les requêtes dynamiques marchent aussi avec les sections de bloc et l'affichage en série.
Sous-modèles :
Insertion brute avec le paramètre file :
C'est la meilleure façon pour insérer une partie se trouvant dans un autre fichier, comme cela est habituellement fait pour les entêtes et pieds-de-page.
La valeur donnée au paramètre file doit être le nom d'un fichier existant sur le serveur. Vous pouvez utiliser une expression avec des champs [var] et le mot-clé [val] qui représente la valeur du champ.
Exemples :
[onload;file=[var.fichier_entete]]
[onshow.sub1;file=[val]]
Le contenu du fichier est insérer à la place du champ, sans conversion de caractère et sans protection TBS .
Les balises [onload] contenues dans le fichier sont traitées au moment de l'insertion. Les balises [onshow] seront fusionnées sur la méthode Show() parce qu'elles sont devenues parties intégrantes du modèle principal.
Le sous-modèle peut contenir des champs TBS, y compris des champs [var] et des blocs à fusionner. Si vous avez l'intention de fusionner des données avec un bloc défini dans un sous-modèle, alors il est conseillé d'utiliser le paramètre file dans un champ [onload] pour s'assurer que le sous-modèle soit inséré avant que vous appeliez MergeBlock().
Vous pouvez concevoir un sous-modèle comme une page XML/HTML/Texte indépendante, et demander à TBS de n'inclure que la partie <body> (ou une autre partie) dans le modèle principal. Ceci se réalise en utilisant le paramètre getbody en plus du paramètre file dans le champ TBS du modèle principal. Cette technique vous permet de travailler en WYSIWYG sur vos sous-modèles.
Le paramètre subtpl est utile pour gérer l'insertion d'un sous-modèle à l'aide de code Php. La paramètre subtpl n'est actif que lorsqu'il est utilisé avec un paramètre script ou onformat. Il bascule l'instance courante de TBS dans le mode Sous-modèle pendant l'exécution du script ou de la fonction, et peut agir sur un nouveau modèle sans altérer le modèle principal.
Le mode Sous-modèle présente les caractéristiques suivantes :
* | Les sorties Php sont affichées à l'emplacement du champ au lieu d'être envoyés immédiatement au client. Par exemple, l'utilisation de la commande Php echo() insérera un texte dans le modèle principal au lieu de le sortir directement. L'utilisation de la méthode Show() insérera aussi le résultat de la sous-fusion dans le modèle principal. |
* | Une référence à l'instance de TBS est fournie par la variable $this ou $TBS, selon que vous utilisez le paramètre script ou onformat. Cette variable peut être utilisée pour de nouvelles sous-fusions sans altérer le modèle principal. La méthode Show() n'arrêtera pas l'exécution de script durant le mode Sous-modèle, comme cela est fait par défait dans le mode normal. |
Quand le script ou la fonction se termine, l'instance TBS retourne en mode normal et agit sur le modèle principal.
Exemple avec le paramètre script :
HTML : | [onload.fichier;script=specialbox.php;subtpl] |
Script PHP : | <?php echo('* Ici insertion d'un sous-modèle *'); $this->LoadTemplate($CurrVal); $this->MergeBlock('blk1',$GLOBALS['conn_id'],'SELECT * FROM table1'); $this->Show(); ?> |
Remarques : | $CurrVal est une variable locale fournie par TBS quand on utilise le paramètre script ; cette variable fait référence à la valeur du champ en cours de fusion. Dans l'exemple ci-dessus, $CurrVal contient la valeur de la variable globale $file. Vous pouvez la remplacer, par exemple, par le nom du fichier du sous-modèle à charger (par exemple : 'monsousmodele.htm'). Voir le paramètre script pour plus d'information. |
Exemple avec le paramètre onformat :
HTML : | [onload.user_mode;onformat=f_user_info;subtpl] |
Fonction PHP : | function f_user_info($FieldName,&$CurrVal,&$CurrPrm,&$TBS) { if ($CurrVal==1) { // User is logged in $TBS->LoadTemplate('user_info.htm'); $TBS->MergeBlock('blk1',$GLOBALS['conn_id'],'SELECT * FROM table1'); $TBS->Show(); } else { // User not logged in echo('You are not logged in.'); } } |
Remarques : | $CurrVal est une variable déclarée en tant qu'argument de la fonction. C'est TBS qui se charge d'appeler cette fonction de sorte que $CurrVal fasse référence à la valeur du champ en cours de fusion. Dans exemple ci-dessus, $CurrVal est égal à la valeur global $user_mode. De même la variable $CurrPrm fait référence au tableau des paramètres du champ en cours de fusion, et $TBS fait référence l'instance de TinyButStrong en cours d'utilisation. Voir le paramètre onformat pour plus d'information. |
Affichage conditionnel :
Champs conditionnels
Tous les champs TBS acceptent les paramètres d'affichage conditionnel rappelés ci-dessous.
Paramètre | Description |
. (point) | Affiche un espace insécable Html si la valeur du champ est vide. |
ifempty=valeur2 | Affiche valeur2 si la valeur du champ est vide. |
magnet=tag | Supprime une balise ou un couple de balise si la valeur du champ est vide. |
if condition then valeur1 else valeur2 |
Affiche valeur1 ou valeur2 selon que la condition est vérifiée ou non. |
frm=format1|format2|format3|format4 | Change le format numérique ou date/heure selon que la valeur du champ est positive, négative, zéro ou vide. |
[onshow.error_id;if [val]=0;then 'pas d''erreur';else 'erreur constatée']
Sections conditionnelles
Vous pouvez utiliser des sections conditionnelles dans n'importe quel bloc TBS (bloc de données ou bloc automatique). Une section conditionnelle est une section qui a un paramètre when définissant une condition, ou bien un paramètre default. Lors de la fusion du bloc, chaque condition when est évaluée jusqu'a ce qu'une soit vérifiée. Dès qu'une condition when est vérifiée, sa section conditionnelle est conservée et toutes les autres sont supprimées. Si aucune condition when n'est vérifiée, alors la section default est conservée si elle existe.
Cas des blocs de données :
S'il s'agit d'un bloc de données, c'est à dire fusionné avec MergeBlock(), alors les sections conditionnelles sont réévaluée pour chaque enregistrement. Il est même possible de définir un bloc de données qui ne contient que des sections conditionnelles, sans section standard.
Définition des conditions :
Les conditions définies dans le paramètre when peuvent être des expressions contenant des champs [var] et des champs liés (s'il s'agit d'un bloc de données). Voir paramètre when pour plus de détail sur les opérateurs supportés par TBS.
Exclusivité des sections :
Par défaut, les sections conditionnelles sont exclusives pour un même bloc. C'est à dire qu'une seule section conditionnelle peut être affichée par bloc. Mais si vous souhaitez qu'un bloc ait des sections conditionnelles non-exclusives, vous pouvez utiliser le paramètre several sur la première section conditionnelle. Avec ce paramètre, toutes les conditions sont évaluées et chaque condition vraie fera afficher se section.
Exemple avec un bloc de données :
Nom : [b1.Nom;block=tr] | section standard |
Adresse : [b1.ad_ligne1;block=tr;when [b1.adresse]=1] [b1.ad_ligne2] [b1.ad_cp] - [b1.add_town] |
section conditionnelle |
Sans adresse.[b1;block=tr;default] | section conditionnelle par défaut (facultatif) |
Exemple avec un bloc automatique :
[onload_err;block=tr;when [var.email]='';several] Votre email est vide. |
[onload_err;block=tr;when [var.nom]=0] Votre nom est vide. |
[onload_err;block=tr;default] Tout est ok. |
Coder des plug-ins :
Il est possible d'ajouter des fonctionnalités à TinyButStrong à l'aide de plug-ins. Les plug-ins de bases de données permettent simplement à la méthode MergeBlock() de reconnaître de nouveaux types de bases de données. Les autres plug-ins permettent d'ajouter des fonctionnalités à TBS ou bien de modifier ses principales méthodes pour le rendre plus spécialisé.Dans le deux cas, un plug-in se présente sous la forme d'un jeu de fonctions PHP ou d'une seule classe PHP qui doivent répondre à une syntaxe précise attendue par TBS. Des plug-in sont proposés au téléchargement sur le site web de TinyButStrong.
Plug-ins de base de données :
Un plug-in de base de données permet à la méthode MergeBlock() de reconnaitre a nouveau type de base de données.
Quand vous faites un appel tel que $TBS->MergeBlock($NomBloc, $Source, $Requête), le processus MergeBlock commence par examiner $Source pour voir si son type est supporté.
• | Si $Source est un type de ressource connu en natif par TBS, alors le processus MergeBlock n'a besoin d'aucun plug-in, il va retrouver les données par lui-même. |
• | Si $Source est un objet avec une méthode nommée tbsdb_open() alors le processus MergeBlock suppose que cet objet est un plug-in de base de données et il va l'utiliser pour récupérer les données. (Voir plus en détail ci-dessous) |
• | Si $Source est une chaîne commençant par '~' alors le processus MergeBlock suppose que la propriété $TBS->ObjectRef est un plug-in de base de données et il l'utilise pour récupérer les données. (Voir plus en détail ci-dessous) |
• | Si $Source est autre chose alors le processus MergeBlock essaye de trouver le plug-in fait avec des fonctions utilisateur et qui correspond au type de $Source. (Voir plus en détail ci-dessous) |
Plug-in basé sur des fonctions utilisateur :
Quand le processus MergeBlock rencontre un type de valeur de $Source qui n'est pas supporté en natif, il détermine le TBS Id qui correspond a ce type. Puis il recherche les fonctions utilisateur qui correspondent à ce TBS Id.
Comment déterminer le TBS Id :
Le TBS Id est une chaine identifiant déterminée par l'argument $Source.
Si $Source est une chaine => le TBS Id est cette chaine.
Si $Source est une ressource PHP => le TBS Id est le nom du type de ressource.
Si $Source est un objet => le TBS Id est le nom de la classe.
Pour certaine commodité, si le TBS Id contient un espace (' '), il est coupé. Si le TBS Id contient des '-', ils sont remplacés par des '_'.
Par exemple, une variable PHP pour une connexion Sybase a le type Resource et son nom de ressource est 'sybase-db link'. Le TBS Id correspondant est 'sybase_db'.
Comment construire le plug-in pour un TBS Id:
Le plug-in est constitué de 3 fonctions utilisateur qui doivent avoir des noms spécifiques.
Les fonctions qui suivent sont faites pour un TBS Id qui est 'tbsid'. Pour un autre TBS Id, il vous suffit de renommer les fonctions.
Vous trouverez plusieurs exemples de plug-in de base de données sur le site web de TinyButStrong.
Synopsis:
function tbsdb_tbsid_open(&$Source, &$Requête)
Elle est supposée utiliser $Source et $Requête pour ouvrir un recordset, et retourner une référence sur ce recordset.
Cette fonction doit retourner le prochain enregistrement sous forme d'un tableau associatif (nom de colonne => valeur), ou retourner false s'il n'y a plus d'enregistrement.
$Rs est la valeur fournie par tbsdb_tbsid_open(). C'est communément une référence de recordset.
$RecNum peut être utile pour certains types de base de données tel que Oracle, pour lesquels le numéro de l'enregistrement est requis pour l'extraire.
Cette fonction doit fermer le recordset de façon appropriée.
$Rs est la valeur fournie par tbsdb_tbsid_open(). C'est communément une référence de recordset.
Plug-in basé sur un objet :
Quand le processus MergeBlock rencontre une valeur de $Source qui est un objet, et si cet objet a une méthode nommée tbsdb_open(), alors il suppose que l'objet est un plug-in de base de données.
L'objet doit avoir au moins 3 méthodes tbsdb_open(), tbsdb_fetch() et tbsdb_close(). Il peut y avoir d'autres méthodes et d'autres propriétés, mais ces 3 méthodes doivent avoir la même syntaxe et les mêmes fonctionnalités que els fonctions utilisateur décrites ci-avant.
Synopsis :
class clsTbsPlugin {
function tbsdb_open(&$Source, &$Requête)
function tbsdb_fetch(&$Rs [,$RecNum])
function tbsdb_close(&$Rs)
}
Plug-in basé sur la propriété ObjectRef :
Quand le processus MergeBlock rencontre une valeur de $Source qui est une chaine commençant par '~' alors il suppose que la propriété $TBS->ObjectRef est un plug-in de base de données basé sur un objet (voir POO). L'objet doit avoir les mêmes caractéristiques que le plug-in décrit ce-avant, mais le nom de ses méthodes peuvent être différents.
Exemple :
$TBS->MergeBlock($NomBloc,'~dbkey',$Requête);
class clsTbsPlugin {
function dbkey_open(&$Source, &$Requête)
function dbkey_fetch(&$Rs [,$RecNum])
function dbkey_close(&$Rs)
}
Autres plug-ins :
Coding a plug-in using a PHP class:
• Plug-in's key:
Each plug-in has a plug-in key which is the name of its Php class. This key must be given to the method PlugIn() when you use it. Thus, it is recommended to define a PHP constant for the plug-in's key (see example below).
• Plug-in events:
A TBS plug-in must be a PHP class which contains one or several specific methods that will be recognized and plugged by TBS. Those specific methods are called plug-in events because they are executed automatically by TBS when the corresponding event occurs. A TBS plug-in can also have other methods and properties for internal purpose. A TBS plug-in must have at least the OnInstall event.
For example:
define('TBS_XXX','clsTbsPlugIng_XXX'); // That is the plug-in's key
class clsTbsPlugIng_XXX() {
function OnInstall(...) {...} // That is the OnInstall event
...
}
See the PHP file "tbs_plugin_syntaxes" to have all plug-in events, their usage and expected arguments. There is also a list of supported events at the bottom of this section.
The OnInstall event is special. It has to return an array with all activated events for the current plug-in (see the PHP file "tbs_plugin_syntaxes"). The OnInstall event is called when the plug-in is installed at the TBS instance.
This event can be called in three situations:
- When using method PlugIn() with the plug-in's key for the first time.
- When using method PlugIn() with the plug-in's key and the argument TBS_INSTALL.
- When a new TBS instance is created, if the plug-in's key has be added to the global array $_TBS_AutoInstallPlugIns[] (see file "tbs_plugin_syntaxes.php" for more details).
Property ->TBS:
As soon as the plug-in is installed on the TBS instance, a property ->TBS is automatically added to the plug-in, its value is a reference to the parent TBS instance. Remember this because this property can be very useful inside the plug-in's code.
Coding a plug-in using PHP functions:
The plug-ins' key is a string that you choose and which will be used for naming the function. It is recommended to define a PHP constant for the plug-in's key (see example below).
The plug-in events are coded using functions, and they names must be the string 'tbspi_', followed by the plug-in's key, followed by '_' and the event's name.
Example:
function tbspi_xxx_OnInstall(...) {...}
...
All the rest works like for plug-in coded with a class. You must have at least the event OnInstall created, and it works the same way.
Remark: PHP functions are often faster than methods, but they don't let you having a ->TBS property to reach the parent TBS instance.
List of plug-in events:
Plug-in Events | Description | |
• | OnInstall | Executed automatically when the plug-in is called for the first time, or when PlugIn() method is called with the specific argument for installing. |
• | OnCommand | Executed when PlugIn() method is called. This is a way to execute any user command specific to the plug-in. |
• | BeforeLoadTemplate |
Executed when LoadTemplate() method is called. Can cancel TBS basic process. |
• | AfterLoadTemplate | Executed at the end of LoadTemplate(). |
• | BeforeShow | Executed when Show() method is called. Can cancel TBS basic process. |
• | AfterShow | Executed at the end of Show(). |
• | OnData | Executed each time a record of data is retrieved for a MergeBlock() process. (similar to parameter 'ondata' but for every block) |
• | OnFormat | Executed each time a fields is being merged. (similar to parameter 'onformat' but for every fields) |
• | OnOperation | Executed each time parameter 'ope' is defined with an unsupported keyword. |
• | OnCacheField | Executed each time a field is put in the cache of a Block definition. (supported since TBS 3.6.0) |
• | BeforeMergeBlock | Executed when bounds of a block are founded. Can cancel TBS basic process. |
• | OnMergeSection | Executed when a section is merged, and before it is added to other sections. |
• | OnMergeGroup | Executed before a header, a footer or a splitter section is merged. (supported since TBS 3.3.0) |
• | AfterMergeBlock | Executed just before a merged block is inserted into the template. |
• | OnSpecialVar | Executed when a non native Special Var Field (like [onshow..now]) is met. |
• | OnMergeField | Executed on each field met when using the MergeField() method. |
Résumés :
Paramètres de champ TBS :
Paramètre | Résumé |
htmlconv | Mode de conversion de caractère pour la valeur du champ. |
. (point) | Si la valeur du champ est vide, affiche un espace insécable. |
ifempty | Si la valeur du champ est vide, affiche une autre valeur. |
att | Déplace le champ dans un attribut de balise XML/HTML. |
attadd | S'utilise avec att. Indique que la valeur fusionnée doit être ajoutée à la valeur de l'attribut. |
atttrue | S'utilise with att. Indique que l'attribut cible doit être géré comme un attribut booléen. |
magnet | Si la valeur du champ est vide, supprime des balises proches. |
mtype | S'utilise avec magnet. |
if | Si la condition est vérifiée, change la valeur affichée. |
then | S'utilise avec if. |
else | S'utilise avec if. |
onformat | Exécute une fonction Php de l'utilisateur qui modifie la fusion du champ. |
frm | Applique un format date-heure ou numérique. |
tplfrms | S'utilise avec des champs onload uniquement. Définie des formats de modèle. |
tplvars | S'utilise avec des champs onload uniquement. Définie des variables de modèle. |
protect | Mode de protection sur les caractères '['. |
comm | Étend les limites du champ à la balise commentaire qui l'entoure. |
noerr | Empêche l'affichage de certaines erreurs TBS. |
file | Insert le contenu du fichier. |
script | Exécute le script Php. |
getbody | S'utilise avec file ou script. Insert seulement une partie du sous-modèle. |
rename | S'utilise avec file ou script. Renome des blocs et des champs TBS dans un sous-modèle. |
subtpl | S'utilise avec script ou onformat. Passe l'instance TBS en mode Sous-modèle. |
Paramètres de bloc TBS :
Paramètre | Résumé |
block | Défini les limites du bloc. |
nodata | Désigne la section qui s'affiche lorsqu'il n'y a aucun enregistrement dans la source de données. |
headergrp | Désigne une section d'entête qui sera affichée lorsque la valeur d'une colonne change. |
footergrp | Désigne une section de pied qui sera affichée lorsque la valeur d'une colonne change. |
splittergrp | Désigne une section de séparation qui sera affichée lorsque la valeur d'une colonne change. |
parentgrp | Désigne une section parent qui sera affichée lorsque la valeur d'une colonne change. |
serial | Désigne une section qui contient une série de plusieurs enregistrements. |
p1 | Envoie un paramètre à la requête dynamique de la source de données. |
sub1 | Définie la colonne contenant les données pour un sous-bloc automatique. |
ondata | Exécute une fonction Php de l'utilisateur pour modifier l' l'enregistrement lorsqu'il vient juste d'être récupérer de la source de données. |
when | S'utilise avec onload ou onshow. Affiche la section quand la condition est vérifiée. |
default | S'utilise avec onload ou onshow. Affiche la section quand aucune condition n'est vérifiée. |
several | S'utilise avec when. Indique que plusieurs sections du groupe peuvent être affichées. |
Noms de blocs et champs spéciaux :
Nom | Résumé |
val | Le mot-clé [val] peut être utilisé dans des paramètres de champs pour représenter la valeur de ce champ. |
# | Colonne virtuelle pour un bloc. Affiche le numéro de l'enregistrement en cours. |
$ | Colonne virtuelle pour un bloc. Affiche la clé de l'enregistrement en cours si la source de données est un tableau Php. |
onload | Champ ou bloc automatique, fusionné lorsque le modèle est chargé. |
onshow | Champ ou bloc automatique, fusionné lorsque le modèle est affiché. |
var | Champ automatique encapsulé. |