Sitio Web : www.tinybutstrong.com
Autores: skrol29@freesurf.fr, Pirjo
Fecha: 2005-01-03

Traducción al Español: mochin@gmail.com, Hermes
Fecha: 2005-02-25
*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*
TinyButStrong
version 2.01
*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*.^.*
 
 
Motor de Plantilla para Profesionales y Principiantes
para PHP versión 4.0.6 o superior
 

Tabla de Contenidos:
Tema Descripción
   
• Introducción  
    Principios básicos  
    Instalación  
    Mini ejemplos  
• Dentro de PHP  
    • Para empezar  
        método LoadTemplate() carga una plantilla desde un archivo
        método MergeBlock()

combina una parte de la plantilla con una fuente de datos

        método Show()

procesamiento automático y muestra de los resultados

    • Avanzado  
        método CacheAction()

activa el Sistema de Cache para resultados combinados

        método GetBlockSource()

devuelve el origen de la definición de un bloque

        método MergeField() combina un campo específico con un valor
        método MergeNavigationBar()

combina una barra de navegación

        método MergeSpecial()

combina campos automáticos, variables PHP y otros ...

        propiedad Render

para alterar la opción final del combinado

        propiedad Source

devuelve el contenido actual del resultado

        propiedad TplVars

devuelve las variables de la plantilla

        Agregando un tipo de fuente de datos

para hacer que TBS reconozca una nueva base de datos

• Dentro del HTML  
    • Campos TBS  
        Definición y sintáxis  
        Parámetros  
        Campos Var  
        Campos Var especiales  
    • Bloques TBS  
        Definición y sintáxis  
        Parámetros  
        Secciones de bloque  
        Salida Serial (en columnas)  
        Consultas dinámicas / sub-bloques  
        Mostrar una barra de navegación  
     • Misceláneas  
        Campos y bloques automáticos  
        Incluir una sub-plantilla  
        Incluir el resultado de otro script PHP  
        Revisión de la salida condicional  
• Resumen  
    Parámetros para los campos TBS  
    Parámetros para los bloques TBS  
    Campos y parámetros para la barra de Navegación  
    Nombres de Campos y Bloques Especiales  

Introducción:

TinyButStrong (TBS) es una clase PHP muy útil para desarrollar una aplicación de una forma limpia, separando los scripts PHP y los archivos HTML. Con TBS, las páginas HTML son generadas dinámicamente al combinar una plantilla con datos. Esto es lo que se llama un Motor de Plantillas.

El nombre TBS viene del hecho que esta herramienta contiene solamente 8 funciones y aún es muy poderosa. Le permite combinar páginas de plantillas HTML con sus variables PHP. o datos de MySQL, PostgreSQL o SQLite.

TBS ha sido concebido de forma tal que Ud. pueda desarrollar su plantilla de páginas HTML con facilidad al usar cualquier editor HTML visual (como Dreamweaver o Frontpage). Pero si Ud. diseña sus páginas HTML con un editor de texto, también es una forma limpia de hacerlo. TBS también le permite crear Javascript dinámicamente.

Como su nombre lo dice, TBS es fácil de usar, fuerte y rápido, además es completamente °~° freeware °~°.

Principios básicos:

En el lado HTML:
Usted diseña una página la cual no contiene necesariamente algún script PHP, así como nada de programación. En esta página se colocan etiquetas TBS en los lugares donde se desea mostrar los datos dinámicos. Esta página se llama una 'plantilla'.
Existen dos tipos de etiquetas: los 'campos' que son utilizados para mostrar los ítems de datos dinámicos, y los 'bloques' que se usan para definir una área, generalmente a fin de mostrar registros de una fuente de datos.

En el lado PHP:
Usted utiliza variables tipo objetos TBS para manejar la combinación de su Plantilla HTML con los datos. Al final, TBS muestra los resultados de la combinación.

Instalación:

1. Copie el archivo tbs_class.php en un directorio de su sitio Web.
2. Al inicio de su programa PHP, agregue las siguientes líneas:
  include_once('tbs_class.php');
  $TBS = new clsTinyButStrong ;
Atención: si el archivo TBS tbs_class.php se encuentra en un directorio distinto al de su aplicación, entonces deberá indicar dicho directorio en la parte inicial del nombre del archivo TBS.


Explicación y detalles técnicos:
TinyButStrong es una librería escrita en PHP; es un componente para ser referenciado en sus programas PHP. En términos técnicos TinyButStrong es una 'clase' escrita en PHP y el nombre de dicha clase es clsTinyButStrong.
La variable $TBS que Ud. agrega al principio de sus programas PHP le permite ejecutar la combinación de su plantilla con su aplicación PHP. En términos técnicos, la variable $TBS es una 'instancia' de la clase clsTinyButStrong.

Mini ejemplos:

Ejemplo 1:
Plantilla Html Programa Php Resultado
<html>
 <body>
  [var.message]
 </body>
</html>

<?

include_once('tbs_class.php');
$TBS = new clsTinyButStrong ;
$TBS->LoadTemplate('template.htm') ;

$message = 'Hello' ;
$TBS->Show() ;

?>
<html>
 <body>
  Hello
 </body>
</html>

Ejemplo 2:
Plantilla Html Programa Php Resultado
<table>
 <tr><td>[blk.val;block=tr]</td></tr>
</table>

<?

include_once('tbs_class.php');
$TBS = new clsTinyButStrong ;
$TBS->LoadTemplate('template.htm') ;

$list = array('X','Y','Z') ;
$TBS->MergeBlock('blk',$list) ;
$TBS->Show() ;

?>
<table>
 <tr><td>X</td></tr>
 <tr><td>Y</td></tr>
 <tr><td>Z</td></tr>
</table>
Dentro de PHP:

La combinación de una plantilla se realiza cuando un programa PHP utiliza una variable objeto declarada como una clase clsTinyButStrong.
Por ejemplo, la sentencia: $TBS = new clsTinyButStrong ;
Este objeto permite cargar la plantilla, para hacer la combinación de ésta con los datos, y entonces mostrar el resultado.

Ejemplo de código PHP:

include_once('tbs_class.php');
$TBS = new clsTinyButStrong ;
$TBS->LoadTemplate('template.htm') ;
$TBS->MergeBlock('ctry','mysql','SELECT * FROM t_country') ;
$TBS->Show() ;

A continuación una lista de las propiedades y métodos de los objetos TinyButStrong:

método LoadTemplate():
Carga una plantilla para el proceso de combinación (merging).
El contenido completo del archivo se almacena en la propiedad Source del objeto TBS.

Sintaxis:

$TBS->LoadTemplate(string File{, string HtmlCharSet})

Argumento Descripción
File Ruta local o absoluta del archivo a cargar.
HtmlCharSet

Opcional. Indica la codificación de caracteres (charset) a usar para la conversión HTML de los datos cuando sean combinados. Debería ser el mismo que el charset de la plantilla. El valor por defecto es '' (vacío) que es equivalente a 'ISO-8859-1' (Latin 1).

Si su plantilla utiliza un charset especial, indique entonces el valor Html para este charset.
En una página Html, el charset se coloca al inicio del archivo, en el atributo 'content' de una etiqueta <Meta> . Los charsets soportados por TBS son los charsets soportados por la función PHP htmlentities(). Por ejemplo: 'BIG5' (Chinese) o 'EUCJP' (Japanese).


Sin conversión Html:
Si utiliza un valor de False como el parámetro HtmlCharSet, los datos no serán convertidos cuando sean combinados con la plantilla.

Función de usuario:
Si su charset no es soportado por PHP, se puede indicar una función de usuario que haga la conversión Html. Para esto, se utiliza el parámetro HtmlCharSet con la sintáxis '=myfunction'.
La función de usuario deberá tomar como argumento una cadena y devolver la misma cadena convertida.

Agregando el archivo al final de la plantilla actual:
Se puede utilizar la palabra clave '+' en lugar del charset para tener el archivo cargado al final de la plantilla actual. El parámetro charset continúa siendo el mismo de la primera plantilla cargada.

método MergeBlock():
Combina uno o muchos bloques TBS con los registros provenientes de una fuente de datos.
Devuelve el número del último registro mostrado (el primero es el número 1).

TinyButStrong soporta varios tipos de datos en forma nativa:
Datos Php: un arreglo, una cadena, un número.
Base de datos : MySQL ; PostgreSQL ; SQLite.
Ud. puede también agregar uno nuevo: 'agregando un tipo de origen de datos'.

Existe un modo de 'Por Página' , descrito más adelante.

Sintaxis: int $TBS->MergeBlock(string BlockName, mixed Source{, string Query}{, int PageSize, int PageNum}{, int RecCount})
Argumento Descripción
BlockName Indica el nombre del bloque TBS a combinar.
Se pueden mezclar muchos bloques con los mismos datos al indicar sus nombres separados por comas.
Source

Indica la fuente de datos a combinar.
La tabla inferior muestra los valores posibles de acuerdo al tipo del origen de datos.

Query

Opcional. Indica la sentencia SQL que devolverá los registros a combinar.
La tabla inferior muestra los valores posibles de acuerdo al tipo del origen de datos.

PageSize

Opcional. Se debe definir este argumento si se desea activar el Modo por página.
Indica el número de registros en una página.

PageNum

Opcional. Este argumento debe ser definido si se desea activar el Modo por página .
Indica el número de la página a mostrar. La primera página es la número 1.
El valor especial de -1 muestra la última página del total de ellas.

RecCount

Opcional. Este argumento es útil sólo con el Modo por página . Permite ajustar el cálculo del número de registros devueltos por el método MergeBlock().

RecCount Valor devuelto por MergeBlock()
0 : Es el valor por defecto. Este método devuelve el número del último registro mostrado en la página requerida.
-1 : El método lee todos los registros hasta el final y devuelve el número total de registros. De todas formas, sólo los registros requeridos serán los mostrados.
>0 : El método devuelve el valor de RecCount. De todas formas, éste retornará el número del último registro en la página requerida si éste es mayor que RecCount.

Utilice este parámetro a fin de calcular y salvar el número total de registros.
Por ejemplo:
if (isset($_POST['nbr_rec'])) {
  $nbr_rec = $_POST['nbr_rec'] ;
} else {
  $nbr_rec = -1 ;
}
$nbr_rec = $TBS->MergeBlock('blk1',$cnx_id,'select * from t_country',$p_size,$p_num,$nbr_rec);

Enlaces entre bloque y registros:

El método MergeBlock() busca en la plantilla por el nombre especificado del bloque TBS. Entonces, dicho bloque se repite tantas veces como registros existen dentro del origen de datos.
Para mostrar los datos de un registro, se deben usar los campos TBS enlazados. Un campo TBS está enlazado cuando el nombre de éste está compuesto por el nombre del bloque seguido por un punto y un nombre de columna o índice del Record Set. Un campo enlazado debe estar dentro de un bloque.

Ejemplo:
Nombre del bloque: block1
Columnas devueltas por la sentencia: field1,field2,field3
Campos TBS enlazados: [block1.field1], [block1.field2], [block1.field3]

Si no se encuentra la definición del bloque en la plantilla, entonces el método MergeBlock() combinará el primer registro con todos los campos enlazados que se encuentren en la plantilla.

Es posible definir también bloques más complejos. Para mayor información, refiérase al capítulo Bloques TBS.

Combinando muchos bloques con los mismos datos:

Se pueden combinar múltiples bloques con los mismos datos indicando sus nombres separados por comas dentro del parámetro BlockName. En este caso, la sentencia es abierta una única vez, y los registros son almacenados para alimentar los distintos bloques.

Ejemplo:
$TBS->MergeBlock('block1,block2,block3','mysql','SELECT * FROM MyTable');

Contando los registros:

Para mostrar el número de un registro, utilice un campo TBS vinculado a la columna virtual '#'.
Si coloca este campo fuera del bloque, mostrará el número total de registros.

Ejemplo: [block1.#]

La columna virtual '$' mostrará el índice del registro actual si el origen de los datos viene de una arreglo Php.

Ejemplo: [block1.$]

Argumentos de Recursos y Peticiones de acuerdo al tipo de origen de los datos:

Tipo de Origen de Datos Origen Sentencia
Text (*) La palabra clave 'text' Un texto
Number (*) La palabra clave 'num' Un número o un arreglo especial (vea más abajo)
Clear (*) La palabra clave 'clear' -
Conditional (*) La palabra clave 'cond' -
PHP Array (*) Un arreglo Php -
La palabra clave 'array' Un arreglo Php
La palabra clave 'array' Una cadena que representa un arreglo contenido o anidado en una variable global Php (vea más abajo)
MySQL Un identificador de una conexión MySql o la palabra clave 'mysql' Una sentencia SQL
Un identificador de un result MySql -
PostgreSQL Un identificador de una conexión PostgreSql Una sentencia SQL
Un identificador de un result PostgreSql -
SQLite Un identificador de una conexión SQLite Una sentencia SQLite
Un identificador de un result SQLite -
custom
Una palabra clave, un objeto o un identificador de recursos no mencionado en esta tabla.
Vea el capítulo 'agregando un tipo de origen de datos'.
Una sentencia SQL o algo así.
(*) Vea la explicación en el capítulo siguiente.

Orígenes de datos Php:

Texto
El argumento Source tiene que ser igual a 'text'.
El bloque completo es reemplazado por el texto (éste debe ser una cadena) dado como el argumento Query. No se procesan campos enlazados excepto '#' el cual devuelve 1, o 0 si Query es una cadena vacía.

Numerico
El argumento Source tiene que ser igual a 'num'.
El argumento Query puede ser un número o un arreglo.

arg Query Record Set devuelto
Número: Query tiene que ser positivo o igual a cero.
El Record Set devuelto consiste de una columna 'val' donde los valores van desde 1 hasta Query.
Arreglo: El arreglo debe contener una clave 'min' y una clave 'max' y eventualmente una clave 'step'.
El Record Set devuelto consiste de una columna 'val' que va desde el valor 'min' hasta el valor 'max'.

Ejemplo:
array('min'->101,'max'->150) ;

mostrará 50 bloques numerados desde 101 a 150.

Limpiar
El argumento Source debe ser igual a la palabra clave 'clear'.
Todos los bloques y las secciones son borrados. Esto es lo mismo que hacer la combinación con un arreglo vacío.

Condicional
El argumento Source debe ser igual a la palabra clave 'cond'.
El bloque es combinado como si estuviese en un bloque condicional onload y onshow. El bloque no es combinado con los datos, y así que éste debe contener campos TBS no enlazados. Cada sección de bloques necesita un parámetro when o un parámetro default. Vea bloques condicionales para más detalles.

Arreglo
El argumento Source tiene que ser un arreglo Php o la palabra clave 'array'. Si utiliza la palabra clave 'array', entonces el argumento Query tiene que ser un arreglo Php o una cadena que representa un arreglo contenido o anidado en una variable global.

Sintaxis de cadena: 'globvar[item1][item2]...'
'globvar' es el nombre de la variable global $globvar la cual debe ser un arreglo.
'item1' y 'item2' son los índices de un ítem o sub-ítem de $globvar.

Ejemplo:
  $TBS->MergeBlock('block1','array','days[mon]');

Es posible representar nombres de variables sin ítem.

Existen dos ventajas en utilizar una cadena para representar un arreglo:
-> Los ítems serán leídos directamente del arreglo (asignado por referencia) en lugar de leer una copia de los ítems. Esto puede mejorar la respuesta global.
-> Se pueden utilizar sentencias dinámicas.

Mostrando el índice del registro actual:
Se puede hacer uso de la columna virtual '$' que representa el índice del registro actual. Esto puede ser especialmente útil para sentencias dinámicas y sub-bloques.

Ejemplo: [block1.$]

Estructura de los arreglos soportados:

Los ítems de un arreglo específico pueden ser de dos clases: valores simples con índices asociados (caso 1), o arreglos de valores para ítems completos que son para sí mismos simples valores con índices asociados (caso 2).

Caso 1:
Ejemplo: ['key1']=>value1
['key2']=>value2
...
El Record Set devuelto consiste de una columna 'key' conteniendo el nombre del índice, y una columna 'val' conteniendo el valor del índice.

Caso 2:
Ejemplo: [0] => (['column1']=>value1-0 ; ['column2']=>value2-0 ; ...)
[1] => (['column1']=>value1-1 ; ['column2']=>value2-1 ; ...)
[2] => (['column1']=>value1-2 ; ['column2']=>value2-2 ; ...)
...
El Record Set devuelto consiste de las columnas 'column1', 'column2',... con sus valores asociados.

Modo Por Página:

El Modo Por Página es activado cuando se coloca en el argumento PageSize un valor diferente de cero. Los datos que se mostrarán serán entonces limitados a la página especificada con PageNum. Si PageNum tiene un valor de -1, entonces se mostrará la última página.

Acotación importante:
Aunque es fácil y práctico, el Modo Por Página no es óptimo para grandes números de registros. Si la muestra de los datos es muy lenta, o si su base de datos está muy congestionada, entonces esto es un anuncio para hacer uso de las funciones nativas de su Sitema de Base de Datos (si éste posee limitadas funcionalidades para las sentencias).
Por ejemplo: con MySQL se puede hacer uso de la cláusula LIMIT.

Explicación: considerando la variedad de sintáxis SQL, TinyButStrong no es capaz de modificar una sentencias de forma que ésta devuelva un Record Set limitado. Por ejemplo, no es capaz de agregar la cláusula LIMIT dentro de una sentencia MySQL.
Es por esto que TinyButStrong tiene que llamar la sentencia original, y entonces leer los registros uno por uno e ignorando todos aquellos que están después de la página requerida. Esto hace que el muestreo de los datos sea más lento cuando el número de página a alcanzar es alto. Cuando se alcanza la página, TinyButStrong libera la sentencia sin ir al final del Record Set.
método Show():
Termina el proceso de combinación.

Sintaxis: $TBS->Show({int Render})

El método Show hará lo siguiente:
- Combinar campos Var,
- Combinar campos [onshow] ,
- Mostrar el resultado (puede ser cancelado por la propiedad Render),
- Finaliza el script (puede ser cancelado por la propiedad Render).

La propiedad Render permite ajustar el comportamiento del método Show().
Los parámetros de Render también permiten ajustar el comportamiento del método Show() pero solamente por una llamada.
método CacheAction():
Activa el Sistema de Cache o inicia otra operación en los archivos cache.

Sintaxis: bool $TBS->CacheAction(string CacheId {, int ActTimeOut}{, string Dir})

Argumento Descripción
CacheId Una cadena que identifica de forma unívoca su página en el directorio de cache.
ActTimeOut Opcional. Debe ser el tiempo de time-out (expiración) expresado en segundos o una de las constantes indicadas más abajo.
El valor por defecto es 3600, lo cual significa una hora.
Dir Opcional. La ruta del directorio donde será salvado el archivo de cache.
Por defecto, es el mismo directorio del script.

En lugar del tiempo de time-out, se puede hacer uso de las siguientes constantes a fin de iniciar una acción especial del Sistema de Cache.

Constante Descripción
TBS_DELETE Borra el archivo de cache. Si el parámetro CacheId es establecido a la palabra clave '*' entonces serán borrados todos los archivos cache del directorio.
TBS_CANCEL Cancela la actualización del archivo de cache si éste ha sido indicado para ser actualizado al final de la combinación.
TBS_CACHENOW Salva el resultado actual de la combinación en el archivo cache.
TBS_CACHEONSHOW El resultado de la combinación será salvado en el archivo cache cuando sea llamado el método Show().
TBS_CACHELOAD Carga el archivo cache y continua el script.

El Sistema de Cache le permite incrementar la velocidad al mostrar las páginas HTML al proceder con la combinación a intervalos regulares de tiempo en lugar de hacerlo cada vez que se llama la página. Para esto, se debe preparar una cadena única de identificación como parte del nombre del archivo para cada página que será salvada (lo llamaremos el 'archivo de cache'), y también un período de refrescamiento (lo llamaremos el tiempo de time-out). Cuando se llama al método CacheAction() el Sistema buscará por un archivo de cache existente y obtendrá su fecha de creación. Si el tiempo de creación es menor que el tiempo de time-out, entonces se cargará el contenido del archivo de cache y termina la combinación. Si el tiempo de creación es mayor que el tiempo de time-out, entonces el archivo de cache será ignorado pero será actualizado en la próxima llamada al método Show() para salvar el resultado de la combinación en este archivo de cache.

Si el archivo de cache es cargado, entonces el método devuelve True, de otra forma devuelve False.
Por defecto, si el archivo es cargado entonces se muestra el contenido y el script finaliza pero se puede modificar este comportamiento usando la propiedad Render.
método GetBlockSource():
Devuelve el origen de un bloque TBS.
Solamente será retornada la definición de la primera sección del bloque, a menos que el argumento Sections sea establecido a True.
Si no se encuentra el bloque, el método devuelve False.

Sintaxis: string $TBS->GetBlockSource(string BlockName {, boolean Sections})

Argumento Descripción
BlockName El nombre del bloque a buscar.
Sections Opcional. El valor por defecto es False.
Si este parámetro es colocado en True el método devuelve un arreglo que contiene la definición para todas las secciones del bloque nombrado. La primera sección es retornada dentro del ítem[1] del arreglo.

Este método le permite obtener el origen de un bloque a fin de realizar el proceso de combinación manualmente. Después de esto, si necesita reemplazar el bloque con texto, puede utilizar el método MergeBlock() con el parámetro 'text'.
método MergeField():
Reemplaza uno o varios campos TBS con un valor fijo o una función.
Si varios campos TBS tienen el mismo nombre dentro de la plantilla, entonces todos ellos serán ser procesados.

Sintaxis: $TBS->MergeField(string FieldName, mixed X {, boolean FunctionMode})

Argumento Descripción
FieldName El nombre del campo TBS. Por ejemplo 'Title'.
X El valor a mostrar o el nombre del la función de usuario.
FunctionMode Indica que el valor a mostrar se calcula por una función de usuario. El valor por defecto es false. Si el argumento es establecido a true, entonces X debe ser una cadena de texto dando el nombre de la función de usuario. Esta función debe existir y poseer la sintáxis descrita más abajo.

Combinando con una función de usuario:

TBS llama esta función para cada campo encontrado en la plantilla.
Esta función debe tener la siguiente sintáxis:
function fct_user($Subname [, $PrmLst]) {...}
Cuando es llamada la función, su argumento $Subname posee por valor el sufijo del nombre de los campos (ejemplo: para un campo llamado 'ml.title', $Subname tendrá el valor 'title'). Y el argumento opcional $PrmLst contiene un arreglo asociativo con los parámetros del campo. La función debe devolver el valor a ser combinado.

Ejemplo:
$TBS->MergeField('ml','m_multilanguage',true);
...
function m_multilanguage($Subname) {
  global $lang_id;
  $rs = mysql_query("SELECT text_$lang_id AS txt FROM t_language WHERE key='$Subname");
  $rec = mysql_fetch_array($rs);
  return $rec['txt'] ;
}
En este ejemplo, el campo llamado [ml.title] será combinado con el valor retornado por m_multilanguage('title').

método MergeNavigationBar():
Muestra una barra de navegación basada en campos y bloques TBS.
Para más detalles sobre cómo construir una barra de navegación, por favor lea 'Mostrando una barra de navegación'.

Sintaxis: $TBS->MergeNavigationBar(string NavName, mix Options, int PageNum [, int RecCount, int PageSize])

Argumento Descripción
NavName El nombre de la barra de navegación.
Options Permite forzar algunas opciones de la barra de navegación. Tales opciones pueden ser también definidas usando bloques de parámetros en la plantilla. Pero, si también son colocados en MergeNavigationBar(), entonces serán forzados.
Este parámetro puede ser blanco ('', 0 o null), un valor numérico o un arreglo.
Si éste es un valor numérico, entonces indica el número de páginas a ser mostradas.
Si éste es un arreglo, entonces contiene los siguientes ítems:

Clave Valor
'navsize' Número de páginas a mostrar en la barra de navegación (por defecto = 10).
'navpos' Posición de la barra de navegación comparada al número de página actual. Se utilizan una de las siguientes palabras claves:
- 'step' (por defecto) para tener la barra de navegación progresando por pasos.
- 'centred' para centrar la barra en el número de página activa.
'navdel' Nombre del bloque TBS a borrar cuando allí exista sólo una página o ninguna página a mostrar.
Este bloque TBS debe contener la barra de navegación. Si existen muchas páginas para mostrar entonces solamente las etiquetas de definición TBS de este bloque serán borradas.
'pagemin' Número de la primera página (por defecto = 1).
PageNum Número de la página activa.
La primera página es número 1. Para indicar la última página, use el valor -1.
RecCount Opcional. El valor por defecto es -1.
Indica el número total de registros, si se conoce. Si el número es desconocido, deberá colocar este valor en -1. Este argumento se utiliza solamente para calcular el número de la última página de la barra de navegación.
PageSize Opcional. El valor por defecto es 1.
Indica el número total de registros por página. Debe ser usado junto a RecCount. Solamente se utiliza para calcular el número de la última página de la barra de navegación.

Ejemplo:
$TBS->MergeNavigationBar('nav','',$page,$rec_nbr,$page_size);

método MergeSpecial():
Reemplaza los bloques y campos especiales del tipo especificado.

Sintaxis: $TBS->MergeSpecial(string Type)

El argumento Type tiene que ser colocado en uno de los siguientes valores:

Valor Descripción
'var' Reemplaza todos los campos Var.
'onload'

Reemplaza todos los campos onload.

'onshow' Reemplaza todos los campos onshow.

Acotación:
Por defecto, el método Show() reemplaza todos los bloques y campos especiales justo antes de mostrar el resultado del proceso de combinación. Esto es por lo que es raro utilizar el método MergeSpecial() en un programa.
propiedad Render:
Indica cómo culmina el proceso de combinación.
Este valor debe ser una combinación de las siguientes constantes.
El valor por defecto es (TBS_OUTPUT + TBS_EXIT).

Sintaxis: int $TBS->Render

La propiedad Render cambia el comportamiento de los métodos Show() y CacheAction().

Constante Descripción
TBS_NOTHING Indica que una de las acciones indicadas más abajo deben ser ejecutadas al final del proceso de combinación.
TBS_OUTPUT Indica que el resultado del proceso de combinación debe ser mostrado. TBS utiliza el comando echo de Php.
TBS_EXIT Indica que se debe salir del script justo al finalizar la combinación.
propiedad Source:
Obtiene o establece el código HTML con el cual el proceso de combinación es aplicado.
Después de la llamada al método LoadTemplate(), esta propiedad contiene el código HTML de la plantilla.
Esta propiedad permite leer o modificar el resultado de la combinación, en el código.

Sintaxis: string $TBS->Source
propiedad TplVars:
Contiene el arreglo de las variables de la plantilla correspondientes a la plantilla actual.

Sintaxis: array $TBS->TplVars

Se pueden definir variables en la plantilla usando uno o varios campos automáticos onload con los parámetros tplvars.
Todos los otros parámetros que siguen a los parámetros tplvars son agregados a la propiedad TplVars cuando es llamado el método LoadTemplate().

Ejemplo:
  [onload;tplvars;template_version='1.12.27';template_date='2004-10-26']

This TBS tag will create two items equivalent to the PHP code:
 $TBS->TplVars['template_version'] = '1.12.27';
 $TBS->TplVars['template_date'] = '2004-10-26';
Recuerde que :
- Los parámetros tplvars funcionan solamente con los campos automáticos onload.
- Se pueden usar parámetros tplvars muchas veces dentro de la misma plantilla.
Agregando un tipo de origen de datos:
Se pueden agregar otro tipo de origen de datos no soportados en forma nativa por TinyButStrong.
Para esto, se deben codificar tres funciones (o métodos) con sentencias específicas, y nombres correspondientes al tipo a agregar.
No agregue las funciones dentro del código de TBS, escríbalas en su aplicación o en un script Php externo.
Se pueden encontrar fuentes adicionales de orígenes de datos en el sitio web de TinyButStrong.

Se puede escoger entre las funciones codificadas por el usuario y los métodos codificados de una clase.
Si escoge las funciones de usuario, éstas tienen que tener un nombre el cual usará un identificador TBS específico al tipo de origen de datos a utilizar (vea más abajo).
Si escoge los métodos de la clase, tales métodos deben ser nombrados tbsdb_open, tbsdb_fetch y tbsdb_close.

Ejemplo:
class clsTest {
  function tbsdb_open(...)  {...}
  function tbsdb_fetch(...) {...}
  function tbsdb_close(...) {...}
}

Identificadores TBS (solamente para funciones de usuario):

EL argumento $Source que se pasa al método MergeBlock() tiene un identificador específico TBS que debe utilizar para el nombramiento de la función.
Si $Source es un objeto, entonces el identificador TBS es el nombre de la clase Php.
Si $Source es un recurso, entonces el identificador TBS es de tipo recurso (resource).
Si $Source es una cadena, entonces el identificador TBS es esa cadena.
El tipo de argumento $Source podría no ser soportado en forma nativa por TinyButStrong, de otras formas las funciones serán ignoradas.
El identificador TBS puede ser modificado por TBS para hacer que éste encaje en el nombre de la función.

Ejemplo:
Si $Source es una conexión Sybase (resource type = 'sybase-db link'), entonces el identificador TBS es 'sybase_db'.

Enunciado de las funciones o métodos:

Las tres funciones a agregar a su aplicación deben tener la siguiente sintáxis:
Si usted está codificando las funciones de usuario, entonces reemplaze las palabra claves 'customdb' con el identificador TBS del tipo de origen de los datos. Si usted está codificando métodos, reemplaze el nombre de las funciones con tbsdb_open, tbsdb_fetch y tbsdb_close.


function tbsdb_customdb_open(&$Source,&$Query) {...}
Esta función debe abrir la sentencia (query) requerida y devolver un identificador al Record Set.
En caso de error, la función debe retornar el valor de False, y puede mostrar un mensaje.

Argumento Descripción
$Source Es el mismo argumento dado al método MergeBlock().
$Query Es el mismo argumento dado al método MergeBlock().

Ejemplo:
function tbsdb_sybase_db_open(&$Source,&$Query) {
  return sybase_query($Query,$Source) ;
}

function tbsdb_customdb_fetch(&$Rs{,$RecNum}) {...}
Esta función deberá retornar un arreglo asociativo correspondiente al registro actual, con los nombres de las columnas y sus valores. Esta función tiene que retornar el valor de False cuando no existen más registros aquí.

Argumento Descripción
$Rs El identificador del Record Set devuelto por la función tbsdb_customdb_open().
$RecNum Opcional. El número de registros esperados. El primero es el número 1.

Ejemplo:
function tbsdb_sybase_db_fetch(&$Rs) {
  return sybase_fetch_assoc($Rs) ;
}

Si su origen de datos necesita conocer el número de registros esperados, se puede agregar el argumento $RecNum a la declaración de su función. Pero en otros casos, este argumento es opcional porque todos los registros son llamados en orden de cualquier manera.

function tbsdb_customdb_close(&$Rs) {...}

Esta función deberá cerrar o liberar el identificador del Record Set.
No tiene que retornar valor alguno.

Argumento Descripción
$Rs El identificador del Record Set devuelto por la función tbsdb_customdb_open().

Ejemplo:
function tbsdb_sybase_db_close(&$Rs) {
  return sybase_free_result($Rs) ;
}
Dentro del HTML:
Las plantillas se diseñan al agregar las etiquetas TBS en los lugares donde deberían aparecer los ítems de datos.

Existen dos tipo de etiquetas TBS: Campos y Bloques.

Un Campo TBS es una etiqueta TBS la cual deberá ser reemplazada por un ítem de datos único. Es posible especificar un formato para mostrarlo y también otros parámetros. La sintáxis de los campos TBS se describe más abajo.

Un Bloque TBS es un área que deberá ser repetida. Se define usando uno o dos campos TBS.
Muy a menudo, esta es una fila de una tabla HTML. La sintáxis para los Bloques TBS se describe más abajo.

Campos TBS:
Un Campo TBS es una etiqueta TBS la cual deberá ser reemplazada por un ítem sencillo de datos.
Posee un nombre el cual le permite identificarlo y los parámetros se pueden especificar en orden para modificar el comportamiento al mostrar los datos.

Sintaxis: HTML ... [FieldName;params] ... HTML

Elemento Descripción
FieldName El nombre del Campo.
Peligro: los nombres que empiezen con var. , onload y onshow son reservados. Estos son respectivamente usados por los campos Var, y campos automáticos.
params Opcional. Uno o más parámetros de la lista inferior y separadas con ';'.
Algunos parámetros pueden ser establecidos a un valor usando el signo de igualdad '='.

Ejemplo: frm=0.00

Si el valor contiene espacios o puntos y coma, se pueden utilizar las comillas sencillas.

Ejemplo: frm='0 000.00'.

Es posible usar campos TBS embebidos. Esto significa que puede escribirlos como: [var.v1; if [var.v2]=1]. Pero:
- para campos Var, deberá asegurarse que v2 sea combinada antes que v1.
- para campos tipo Bloque, deberá asegurarse que la columna v2 esté antes que la columna v1.

Parámetros de los Campos:
Parámetro Descripción
htmlconv=val Le permite forzar o prevenir la conversión de los ítems de datos a texto Html.
El valor val puede ser una de las siguientes palabras claves:

yes: (valor por defecto) forza la conversión a Html incluyendo las nuevas líneas.
nobr: obliga la conversión a Html pero no las nuevas líneas (por ejemplo útil para las etiquetas <pre>).
wsp: preserva los espacios en blancos (útil para espacios al inicio de las líneas).
no: previene la conversión a Html. Util para modificar el código Javascript o el código fuente Html.
look: convierte el ítem de datos a Html solamente si no se encuentran entidades Html dentro del ítem de datos.
esc: sin conversión Html y cambia por comillas dobles las comillas simples (').
. (punto) Si el ítem de datos esta vacío, entonces se muestra un espacio (&nbsp;). Util para celdas dentro de las tablas.
ifempty=val Si el ítem de datos esta vacío, entonces éste es reemplazado por el valor especificado.
magnet=tag Asigna una etiqueta magnética Html a un campo Tbs. Una etiqueta magnética se mantiene cuando el campo tiene un valor, y es borrada cuando el campo es nulo o una cadena vacía.

Ejemplo:
(<a href="[var.link;magnet=a]">presione aquí </a>)
Resultará para $link='www.tbs.com': (<a href="www.tbs.com">presione aquí </a>)
Resultará para $link='': ()

Por defecto, la etiqueta magnética Html debe ser un par de etiquetas de abrir-cerrar (como <a></a>) en el cual la primera etiqueta es colocada antes del campo TBS. Este comportamiento puede ser cambiado usando el parámetro mtype (vea más abajo).

Acotación:
Los parámetros if then else son procesados antes que el parámetro magnet.
mtype=val Para ser usada con el parámetro magnet. Define el tipo de magnetismo.

Valor Comportamiento magnético cuando el campo es null o una cadena vacía
m*m Este es el valor por defecto. Elimina el par de etiquetas que contienen al campo TBS. Todo lo que esta entre ellas es borrado también. El campo puede ser colocado dentro de una de las etiquetas.

Ejemplo:
(<a href="[var.link;magnet=a]">presione aquí</a>)
Resultará para $link='www.tbs.com': (<a href="www.tbs.com">presione aquí </a>)
Resultará para $link='': ()

m+m Elimina el par de etiquetas que envuelven el campo TBS, pero manteniendo todo lo demás que este entre las etiquetas.

Ejemplo:
(<a href="mailto:[blk.email;magnet=a;mtype=m+m]">[blk.name]</a>)
Resultará para $email='me@tbs.com': (<a href="mailto:me@tbs.com">MyName</a>)
Resultará para $email='': (MyName)

m* Borra la etiqueta simple que esta después del campo, y todo lo demás entre la etiqueta y el campo.

Ejemplo 1: <img href="[var.link;magnet=img;mtype=m*]">
Ejemplo 2: <br> [var.address;magnet=br]

*m Borra la etiqueta simple que esta antes del campo, y todo lo demás entre la etiqueta y el campo.

Ejemplo: [var.address;magnet=br;mtype=*m]<br>
selected Este parámetro permite seleccionar un ítem de una Lista (List), botones tipo Radio o Botones de Selección (Checkboxes) colocados dentro de una forma Html. Es necesario asegurarse que los ítems son creados (combinados) antes de la combinación con la plantilla.

Listas Html:
Utilice el parámetro selected sin valor alguno de establecimiento para éste. El campo TBS debe ser colocado dentro de las opciones de la lista de valores. Cuando el campo TBS es combinado, éste es borrado, pero el ítem que tenía el mismo valor del campo es entonces seleccionado. Si el valor no se encuentra, entonces se agrega un nuevo ítem.

 
Ejemplo:
el cual será después de la combinación:

Botones de Radio y de Seleccion (checkboxes):
Utilice el parámetro selected para indicar el valor al cual debería ser el nombre del botón de Radio o de Selección a procesar. El campo TBS debe ser colocado dentro de la forma. Cuando el campo TBS es combinado, éste es borrado, pero el ítem que posee el mismo valor del campo será seleccionado.

 
Ejemplo:
Boston [town_id;selected=r_test]
Washington
New York
el cual será después de la combinación: Boston
Washington
New York

En este ejemplo, el botón tipo Radio señalado como 'Washington ' ha sido seleccionado porque el nombre de la etiqueta de botón Radio es ''r_test' y su valor es 2, y la etiqueta TBS nombrada 'town_id' ha sido combinada con el valor 2.

Multi-selección:
Para Listas, botones Radio o Checkboxes, se puede hacer una multi-selección al indicar un arreglo Php como el valor del campo TBS.

Límites:
Por defecto los límites para la búsqueda de los ítems a seleccionar son las etiquetas Html <select> para las Listas , y <form> para los botones Radio y Checkboxes. Es posible modificar estos usando el parámetro selbounds (vea más abajo).
selbounds=tag Para ser usado con el parámetro selected. Este permite cambiar la zona de búsqueda para los ítems a seleccionar al indicar el tipo de etiqueta Html. Por defecto, este valor es select para una Lista, y form para botones de Radio y Checkboxes.

Ejemplo: [town_id;selected=r_test;selbounds=div]

En este ejemplo, los ítems a seleccionar para la búsqueda estarán entre las etiquetas <div> y </div> que contiene al campo TBS.
comm Este parámetro le permite ampliar los límites del campo TBS hasta los límites de la etiqueta Html comentario que le envuelve.

<!-- [myfield;comm] this is an example--> es estrictamente idéntico a [myfield]

Esto es particularment útil para el diseño de plantillas cuando se encuentra diseñando con un Editor HTML Visual (como lo son Dreamweaver o FrontPage).
noerr Oculta algunos de los mensaje de Error TBS. Cuando un mensaje puede ser cancelado, ésto se menciona en el mensaje mismo de error.
file=archivo Reemplaza el campo con el contenido del archivo. Archivo puede ser una cadena o una expresión construida por los campos Var que devuelven la ruta al archivo.
Cómo usar este parámetro se detalla en el capítulo incluir una sub-plantilla.
script=archivo Ejecuta el script Php justo después de reemplazar el localizador. Desde este script, puede leer y escribir el valor del campo usando la variable global $tbs_CurrVal.
Archivo puede ser una cadena o una expresión construida por los campos Var que devuelven la ruta al archivo.

Acotación:
- El script será ejecutado como si éste fuese codificado dentro de la función. De todas manera, las variables globales no serán reconocidas en el script excepto si son declaradas usando la instrucción Php global o si utiliza el arreglo $GLOBALS.
- La ejecución del script es cancelada si el campo TBS tiene el parámetro if con una condición falsa.
Para más información, por favor lea el capítulo 'incluir el resultado de otro script PHP'.
getob Para ser usada con el parámetro script.
Indica que el texto mostrado usando el comando echo() en el script Php reemplaza el valor del campo TBS.
once Para ser usada con el parámetro script.
Cancela la ejecución del script si éste ha sido previamente llamado.
if expr1=expr2 Muestra el ítem de datos sólo si la condición es verificada, de otra forma no muestra nada a menos que se utilicen los parámetros then o else.

Los operadores soportados son:
= o == igual
!= no igual
+- mayor que
+=- mayor que o igual a
-+ menor que
-=+ menor que o igual a

Tanto expr1 como expr2 deben ser una cadena o expresiones numéricas. Se puede utilizar la palabra clave [val] dentro de la expresión para representar el ítem de datos. La expresión puede contener campos TBS, pero deberá asegurarse que estos sean combinados antes que el campo que lo contiene.
Vea parámetros then y else para algunos ejemplos.
then val1 Si el parámetro if es definido y su condición es verificada, entonces el ítem de datos es reemplazado con val1.

Ejemplo:
 [var.image;if [val]='';then 'image0.gif']
else val2 Si el parámetro if es definido y su condición no es verificada, entonces el ítem de datos es reemplazado con val2.

Ejemplo:
 [var.error_id;if [val]=0;then 'no error';else 'error found']
onformat=fct_name Indica el nombre de una función Php de usuario que será ejecutada antes de la combinación del campo. La función fct_name debe tener la siguiente sintáxis:
  function fct_name($FieldName,&$CurrVal) { ... }

Parámetro Descripción
$FieldName Retorna el nombre del campo que está llamando la función (sólo lectura).
$CurrVal Retorna el valor actual (lectura/escritura ; no olvide el caracter & en la declaración).
protect=val Le permite proteger o desproteger el ítem de datos a ser combinado al reemplazar los caracteres '[' con sus correspondientes códigos Html '&#91;'. El valor val puede ser una de las siguientes palabras claves:
  yes: (valor por defecto) el ítem de datos esta protegido.
  no: el ítem de datos no esta protegido.
Por defecto, toda la data combinada con la plantilla está protegida excepto si este es un archivo para inclusión. Es extremadamente recomendable proteger los datos cuando estos vienen de lugares públicos como por ejemplo un foro.
max=val Indica el número máximo de caracteres a mostrar. Más allá de este límite, el ítem de datos es truncado y se le agregan las elipsis (...) al final.
frm=format Especifica el formato para mostrar un ítem de datos de tipo fecha/hora o numérico. Para un ítem numérico, es posible utilizar un formato condicional el cual cambia dependiendo del signo del valor.

Formatos Fecha-Hora:

Es muy similar al formato de VisualBasic. Son reconocidas las siguientes palabras claves:
d, dd, ddd, dddd: número del día, número del día en dos digitos, nombre corto del día, nombre completo del día. Use el parámetro locale para mostar los nombres de acuerdo a la localidad.
xx muestra st, nd, rd o th dependiendo del número del día.
m, mm, mmm, mmmm: número del mes, número del mes en dos digitos, nombre corto del mes, nombre completo del mes. Utilice el parámetro locale para mostrar los nombres de acuerdo a la localidad.
yy, yyyy: año en dos digitos, año completo.
hh, nn, ss: hora, minutos, segundo en dos digitos.

Los demás caracteres son mantenidos intactos.
Es posible proteger las cadenas internas al colocar estas entre comillas sencillas o simples.

Ejemplos:
 [fld;frm=mm/dd/yyyy] mostrará 12/21/2002
 [fld;frm='yyyy-mm-dd hh:nn:ss'] mostrará 2002-12-21 15:45:03

Formato numérico:

Para definir la parte decimal, se utiliza una expresión similar a '0x0...' donde 'x' es el separador decimal, y '0...' es una continuación de ceros correspondientes al número de decimales.
Si no existe decimal, use el el formato '0.' (con un punto).

Para definir el separador de miles, use un expresión como '0z000x...' donde 'z' es el separador de miles. Si no existe decimal, use el formato '0z000.' (con un punto).

Si el formato contiene el caracter '%', entonces el valor a mostrar será multiplicado por 100. El caracter '%' también será mostrado.

El formato numérico puede contener otras cadenas. Pero solamente la expresión con uno o más ceros colocados a la derecha será tomada como el formato, los demás caracteres se mantendrán.

Ejemplos:
Valor Campo Se mostrará
2456.1426 [fld;frm='0.000'] 2456.143
  [fld;frm='$ 0,000.00'] $ 2,456.14
  [fld;frm='$ 0,000.'] 2,456
0.2537 [fld;frm='0.00 %'] 25.37%
  [fld;frm='coef 0.00'] coef 0.25

Formatos condicionales:

Existe la posibilidad de definir hasta 4 formatos condicionales cuando el valor es positivo, negativo, cero o null (o una cadena vacía) respectivamente. Los formatos condicionales deben ser separados por el caracter '|'. Cada formato condicional es opcional.

Ejemplos:
Valor Campo Se mostrará
2456.1426 [chp;frm='+0.00|-(0.00)|*|empty'] +2456.14
-156.333 [chp;frm='+0.00|-(0.00)|*|empty'] -(156.33)
0 [chp;frm='+0.00|-(0.00)|*|empty'] *
null [chp;frm='+0.00|-(0.00)|*|empty'] empty
-8.75 [chp;frm='+0.00|-(0.00)'] -(8.75)
locale Para ser usado con el parámetro frm.
Indica que el formato especificado con frm debe mostrar los nombres del día y mes de acuerdo a la localidad.
La información de la localidad se puede establecer usando la función Php setlocale().
tplvars Le permite definir variables en la plantilla que se pueden obtener desde el script Php usando la propiedad TplVars. Funciona sólo con los campos automáticos onload .
Campos Var:
Un campo Var es un campo TBS que muestra una variable Php.
El nombre de ésta debe estar compuesto por la palabra clave 'var.' seguida del nombre de la variable Php.
Los parámetros para los campos estándares TBS están disponibles para los campos Var.

Por ejemplo [var.php_version] será reemplazada por "4.2.3".

Las variables predefinidas y las de usuario pueden ser combinadas pero deben ser variables globales. Las variables Resource son ignoradas.

Es posible combinar una variable tipo Arreglo al indicar el ítem con un punto.
Por ejemplo: [var.myarray.item]

Es posible combinar una variable tipo Objeto al indicar una propiedad (o un método el cual no necesite ningún argumento) con un punto.
Por ejemplo: [var.myobject.property]

¿ Dondé están los campos Var combinados ?
Los campos Var son combinados en el método Show(), lo cual significa que justo antes de mostrar el resultado de la combinación. Pero se puede forzar la combinación en cualquier momento con el método MergeSpecial().

Seguridad: ¿ cómo limitar los campos Var usados en las plantillas ?

Se pueden limitar los campos Var definiendo un Prefijo de Variable Permitida cuando se crea el objeto TinyButStrong.

Ejemplo :
  $TBS = new clsTinyButStrong('','x1_');

En este ejemplo, solamente son permitidas en la plantilla las variables globales que tengan el prefijo 'x1_'. Otros campos Var producirán un mensaje de error explícito cuando sean combinados.
  [var.x1_title] será combinada si existe la variable global $x1_title.
  [var.x2_title] producirá un mensaje de error explícito.

Nota: el primer parámetro '' de clsTinyButStrong() en el ejemplo superior se utiliza para definir los delimitadores de etiquetas TBS. Pero esto no se describe en este manual.
Campos Var especiales:
Un campo Var Especial es un campo TBS que muestra datos proporcionados por el Sistema TinyButStrong.
El nombre de un campo Var Especial debe comenzar con 'var..', seguido por una de las palabras claves indicadas en la parte inferior.
Los parámetros para los campos TBS están disponibles para los campos Var Especiales.

Ejemplo: Fecha del día : [var..now;frm='mm-dd-yyyy']

Nombre Descripción
var..now Fecha y hora del servidor.
var..version La versión de TinyButStrong.
var..script_name El nombre del archivo Php que está siendo ejecutado.
var..template_name El nombre del último archivo de plantilla cargado.
Este es el nombre indicado al método LoadTemplate().
var..template_date La fecha de creación del último archivo de plantilla cargado.
var..template_path El directorio del último archivo de plantilla cargado.
Este es el directorio indicado al método LoadTemplate().
var..tplvars.* El valor de un conjunto de ítems en la propiedad TplVars.
('*' debe ser el índice de un ítem existente en el arreglo)

¿ Cuándo son combinados los campos Var Especiales ?
Los campos Var Especiales son combinados junto con los campos Var normales. Esto es en el método Show(), lo cual significa que justo antes de mostrar el resultado de la combinación. Es posible forzar la combinación en cualquier instante con el método MergeSpecial().
Bloques TBS:
Un bloque TBS le permite mostrar datos desde un conjunto de registros.
La combinación entre el bloque y los datos se realiza usando el método MergeBlock().

Durante la combinación, el bloque TBS es repetido tantas veces como tanto registros existan; y los campos asociados TBS son reemplazados por los valores de las columnas.
Un campo TBS asociado al Block1 y mostrando el valor de la columna ColumnA debe ser nombrado Block1.ColumnA

Ejemplo: [Block1.ColumnA;frm='mm-dd-yyyy']

Dos bloques con el mismo nombre serán tratados como dos secciones del mismo bloque (vea secciones de bloques).

Sintaxis de Bloques:

Existen tres posibles sintaxis para definir un bloque TBS:

Sintaxis Explícita:
Se utilizan dos etiquetas TBS. Una para indicar el comienzo del bloque y otra para indicar el final del bloque.

Ejemplo:
HTML...[BlockName;block=begin;params]...HTML...[BlockName;block=end]...HTML
Las etiquetas TBS para la definición del bloque serán borradas durante el proceso de combinación.

Sintaxis Relativa:
El bloque es definido por un par de etiquetas Html de abrir-cerrar. Solamente se requiere una etiqueta TBS.

Ejemplo:
HTML...<tag_name...>...[BlockName;block=tag_name;params]...</tag_name...>...HTML
La etiqueta TBS para la definición del bloque debe ser colocada entre el par de etiquetas Html.
Esta etiqueta TBS será borrada durante la combinación.

Sintaxis Simplificada:
Se utiliza un campo TBS asociado para definir el bloque de una forma relativa (vea la sintáxis de arriba).

Ejemplo:
HTML...<tag_name...>...[BlockName.ColumnName;block=tag_name;params]...</tag_name...>...HTML
La etiqueta TBS para la definición del bloque debe ser colocada entre el par de etiquetas Html.
Pero no es necesario el primer campo TBS en el bloque.

Elemento Descripción
BlockName El nombre del bloque TBS.
block=begin Indica el inicio del bloque.
block=end

Indica el final del bloque.

block= tag_name

Indica un bloque el cual se encuentra entre la etiqueta de apertura Html <tag_name...> y la etiqueta Html de cierre </tag_name...> que están envolviendo la etiqueta TBS. Tanto la etiqueta Html de apertura como la de cierre son parte del bloque.

- row puede ser usado como un alias a fin de indicar la fila de una tabla.
  block=row es lo mismo que block=tr.
- opt puede ser usado como un alias a fin de indicar el ítem de una lista HTML.
  block=opt es lo mismo que block=option.

params Opcional. Uno o muchos parámetros de la lista de más abajo. Separados con ';'.

¿ Qué sintaxis utilizar ?

La sintaxis 'absoluta' se usa raramente con Editores Visuales debido a que las etiquetas TBS tienen que ser colocadas entre dos etiquetas Html. Por otra parte, es conveniente para editores basados en texto.

La sintaxis 'relativa' le permite indicar un bloque utilizando solamente una etiqueta TBS. Es más, no es necesario ocultar la etiqueta TBS debido a que será borrada cuando se muestre. Esta sintáxis es más o menos práctica.

La sintaxis 'simplificada' es realmente simple. Le permite definir un bloque TBS y un campo TBS con una sola etiqueta TBS. Esta sintáxis es la más común y la más práctica.

Tip:
Se puede usar la sintáxis 'relativa' o 'absoluta' con etiquetas personalizadas usando el estándar Html.

Ejemplo:
<custom_tag>Hello [blk1.column1;block=custom_tag], how are you?</custom_tag>

Parámetros de los Bloques:

Parámetro Descripción
extend=n Puede ser usado sólo con la sintáxis relativa o simplificada.
Extiende la definición del bloque hasta los n siguientes pares de etiquetas siguientes.
Esto le permite, por ejemplo, definir un bloque de dos filas en una tabla.
El valor de n debe ser un entero diferente de 0.
Si n es negativo, entonces el bloque es extendido hasta los pares de etiquetas previos.
encaps=num Indica el nivel de encapsulación de las etiquetas TBS en comparación a las etiquetas Html especificadas con el parámetro block. El valor por defecto es 1.

Ejemplo:

[block1.field1;block=tr;encaps=2] [block1.field2]

En el ejemplo de arriba, la fila azul será duplicada durante la combinación porque aquí existe 'encaps=2'.
Si se establece 'encaps=1' o no se indica, entonces la fila duplicada durante la combinación será la rosada.
comm Este parámetro permite ampliar los límites de la etiqueta TBS hasta los límites de la etiqueta Html de comentario que le está envolviendo.

Ejemplo:
<!-- [block1;block=tr;comm] this is an example--> es idéntico a [block1;block=tr]

Este parámetro es particularmente útil para diseñar la plantilla cuando se utilizan Editores HTML Visuales (como lo son Dreamweaver o FrontPage).
nodata Indica una sección que es mostrada solamente si no existe datos a combinar.

Ejemplo:

[block1.field1;block=tr] [block1.field2]
[block1;block=tr;nodata]There is no data.

Para más información acerca de las secciones, vea el capítulo 'Secciones de bloques'.
headergrp=colname Indica una sección de encabezado que se muestra cada vez que cambia el valor de la columna colname.
colname
debe ser un nombre de columna válido devuelto por la fuente de datos.
Se pueden definir muchas secciones headergrp con diferentes columnas. El orden de colocación de las secciones headergrp dentro del bloque puede modificar el resultado
Para más información acerca de las secciones, vea el capítulo 'Secciones de bloques'.
footergrp=colnom Indica una sección de pie de página que se muestra cada vez que cambia el valor de la columna colname. Vea headergrp.
splittergrp=colnom Indica una sección de intermedio que se muestra cada vez que cambia el valor de la columna colname. Vea headergrp.
serial Indica que el bloque es un bloque principal el cual contiene bloques secundarios seriales.
Para más información, vea el capítulo 'salida serial (en columnas)'.
p1=val1 Indica el uso de una sentencia dinámica. Todas las ocurrencias encontradas de la cadena '%p1%' dentro de la sentencia dada al método MergeBlock() serán reemplazadas por el valor val1.
Para más información, vea el capítulo 'sentencias dinámicas / sub-bloques'.
onsection=fct_name Indica el nombre de una función Php que será ejecutada durante la combinación del bloque. Esta función es llamada cada vez que se muestra un registro. La función fct_name debe tener la siguiente sintáxis:
  function fct_name($BlockName,&$CurrRec,&$DetailSrc,$RecNum) { ... }

Parámetro Descripción
$BlockName Devuelve el nombre del bloque que llama a la función (sólo lectura).
$CurrRec Devuelve un arreglo Php asociativo conteniendo el registro actual (lectura/escritura ; no olvide el & en el encabezado de la función).
Si establece esta variable a False, culmina la combinación como si estuviese al final del conjunto de registros.
$DetailSrc Devuelve la fuente de la sección actual (lectura/escritura ; no olvide el & en el encabezado de la función).
Si establece esta variable a '', esto cancela el mostrar este registro.
$RecNum Devuelve el número del registro actual (sólo lectura, el primer registro es el número 1).
when expr1=expr2 Se utiliza sólo con bloques condicionales. Muestra la seción del bloque solamente si la condición es verificada:

= or == igual
!= no igual
+- mayor que
+=- mayor que o igual que
-+ menor que
-=+ menor que o igual que

Tanto expr1 como expr2 deben ser expresiones de cadena o numéricas. La expresión puede contener campos Var.
default Se utiliza sólo con bloques condicionales. Indica una sección del bloque que debe ser mostrada solamente si no ha sido mostrada sección alguna del mismo bloque (nombre).
several Se utiliza sólo con bloques condicionales. Indica que muchas secciones del bloque pueden ser mostradas si varias condiciones son verdaderas. Por defecto, las secciones son excluyentes.
Secciones de bloque:
Distintos bloques teniendo el mismo nombre serán consideradas como secciones del mismo bloque.
Las secciones pueden ser usadas para:
- alternar los datos a mostrar (secciones Normal),
- mostrar cualquier otra cosa si no existen datos (sección NoData),
- muestra un encabezado cada vez que el valor de una columna cambia (sección HeaderGrp).

Secciones Normal:

Cuando se definen muchas secciones Normal, estas serán usadas alternativamente para cada registro.

Ejemplo:

[b1.caption;block=tr]
[b1.caption;block=tr]

En este ejemplo, el bloque llamado 'b1' contiene dos secciones normales. Los registros serán mostrados alternativamente con un fondo verde y otro azul.

Secciones NoData:

Muestra la sección si los orígenes de datos no contienen registros.
La sección NoData es definida al agregar el parámetro nodata.

Ejemplo:

[b1.caption;block=tr]
There is nothing[b1;block=tr;nodata]

Secciones HeaderGrp:

Muestra una sección de encabezado cada vez que el valor de una columna en el Record Set cambia.
Se define un Encabezado al agregar el parámetro headergrp=nombre_de_columna.

Ejemplo:

Year [b1.year;block=tr;headergrp=year]
[b1.caption] [b1.amount;block=tr]
Salida Serial (en columnas):
La salida o muestra en pantalla de los datos en forma serial, le permite mostrar diversos registros dentro de un bloque. Para esto, se debe hacer uso de un bloque principal y de varios secundarios.

Ejemplo:

Rec 1
Rec 2
Rec 3
Rec 4
Rec 5
Rec 6
Rec 7
Rec 8
Rec 9
...
...
...

En este ejemplo, los bloques principales son las líneas azules de la tabla y los secundarios son los bloques de las celdas rosadas.

Sintaxis:
El bloque principal y sus bloques secundarios son combinados haciendo uso de una única llamada al método MergeBlock(). El bloque principal debe ser definido usando el parámetro serial. El bloque secundario debe estar anidado dentro del bloque principal. Los nombres de los bloques secundarios deben ser el nombre del bloque principal seguido por "_" y un número indicando el orden en el cual se mostrarán.

Ejemplo:

[bx;block=tr;serial][bx_1.txt;block=td]
[bx_2.txt;block=td]
[bx_3.txt;block=td]
[bx_4.txt;block=td]

El código correspondiente en Php es:
 $TBS->MergeBlock('bx',$cnx_id,'SELECT txt FROM t_info ORDER BY txt')

Bloques secundarios vacíos:
Se puede especificar un bloque secundario que será usado para reemplazar bloques secundarios sin usar (sin registros). Este bloque secundario "Vacío" debe tener el índice 0. Puede ser colocado dentro del bloque principal con el bloque secundario normal, o sólo dentro de otro bloque serial. Este bloque secundario "vacío" es opcional.

Ejemplo:

[bx;block=tr;serial][bx_1.txt;block=td]
[bx_2.txt;block=td]
[bx_3.txt;block=td]
[bx_4.txt;block=td]
[bx;block=tr;serial][bx_0;block=td] No records found.
     

Acotación:
La salida serial también funciona con secciones de bloques y sentencias dinámicas.
Sentencias dinámicas / sub-bloques:
Principios de las sentencias dinámicas:

Es posible usar el método MergeBlock() con un sentencia dinámica.
En la plantilla, se debe definir un bloque agregando los parámetros p1, p2, p3,... con sus valores.
La sentencia pasada al método MergeBlock() debe contener marcas tales como %p1%, %p2%, %p3%, ... a fin de recibir los valores de los parámetros p1, p2, p3,... .

Cada sección del bloque a ser combinada que contenga un parámetro p1 será calculada como un bloque separado para el cual la sentencia dinámica es re-ejecutada. La sección del bloque que no tiene el parámetro p1 es combinada con la sección anterior con el parámetro p1.

Ejemplo:

[blk.town;block=tr;p1='france'] [blk.country]

[blk.town;block=tr;p1='us'] [blk.country]

El código correspondiente en Php es:
 $TBS->MergeBlock('blk',$cnx_id,"SELECT town,country FROM t_geo WHERE (country='%p1%')")

El resultado de la combinación es:

Paris france
Toulouse france

Washington us
Boston us

Uso con sub-bloques:

Las sentencias dinámicas le permiten construir fácilmente un sistema de bloque-principal con sub-bloques. Aquí se muestra cómo lo puede hacer:
- Crear un bloque principal, y luego un sub-bloque dentro del bloque principal.
- Enlazar ambos al agregarle al sub-bloque el parámetro p1 cuyo valor es un campo del bloque principal.
- Desde el lado de Php, se combina el bloque principal primero y después el sub-bloque.

Ejemplo:

Country: [main.country;block=table]
[sub.town;block=tr;p1=[main.cntr_id]]

El código correspondiente en Php es:
 $TBS->MergeBlock('main',$cnx_id,'SELECT country,cntr_id FROM t_country')
 $TBS->MergeBlock('sub',$cnx_id,'SELECT town FROM t_town WHERE (cntr_id=%p1%)')

El resultado de la combinación es:

Country: France
Paris
Toulouse
Country: Germany
Berlin
Munich
Country: Spain
Madrid
Barcelona

Acotación:
- El parámetro htmlconv=esc le permite pasar valores de cadenas protegidos a la sentencia.
- Las sentencias dinámicas también funcionan con secciones de bloques y salidas seriales .
Mostrando una barra de navegación:
TinyButStrong es capaz de mostrar una barra de navegación usando el método MergeNavigationBar().
Es quizas similar a combinar un bloque usando MergeBlock() excepto que aquí existen páginas numeradas en lugar de datos, y se pueden usar campos específicos para mostrar información adicional, y opciones para personalizar la barra de navegación.

Bloques y campos:

Usa un bloque TBS normal para mostrar el número de páginas.
Este bloque será combinado con una fuente de datos virtual teniendo tanto registros como páginas a mostrar, y con las siguientes columnas:

Nombre Descripción
page Devuelve el número de una página común, alcanzables desde la barra de navegación.
curr Devuelve el número de la página activa.
first Devuelve el número de la primera página (1 por defecto).
prev Devuelve el número de la página anterior.
next Devuelve el número de la página siguiente.
last Devuelve el número de la última página si se conoce, de otras formas devuelve -1.

page
es el único valor que cambia su campo enlazado debe ser colocado dentro del bloque. Otras columnas tienen siempre el mismo valor y pueden ser colocadas dentro del bloque así como fuera de él.
Tales campos soportan el parámetro endpoint. Este reemplazará el valor del campo con una cadena vacía ('') cuando la página activa sea igual a la primera página o la última página. Esto permite manejar las excepciones de las salidas como por ejemplo con el parámetro magnet.

Ejemplo:
<a href="script.php?page=[nav.first;endpoint;magnet=a;mtype=m+m]">Beginning</a>
En este ejemplo, el enlace será borrado cuando la página activa sea la primera o la última.

El bloque puede contener una sección especial para mostrar la página activa de forma diferente.
Esta sección se define usando el parámetro currpage en la definición del bloque.

Ejemplo:

Plantilla:
|< < [nav.page;block=td] [nav.page;block=td;currpage] > >|

Código Php usado:
  $TBS->MergeNavigationBar('nav',10,17) ;

Resultado de la combinación:
|< < 11 12 13 14 15 16 17 18 19 20 > >|

Acotación: este ejemplo no muestra los enlaces.

Opciones

La definición del bloque puede contener parámetros que son específicos a la barra de navegación.
Tales opciones también pueden ser definidas como un parámetro del método MergeNavigationBar().

Parámetro Descripción
navsize=num Número de páginas mostradas en la barra de navegación. (por defecto = 10).
navpos=keyword Posición de la barra de navegación comparada al número de página activo. Se utilizan una de las siguientes palabras claves:
- 'step' (por defecto) para tener la barra progresando por pasos.
- 'centred' para centrar la barra en el número de página activo.
navdel=blockname Nombre del bloque TBS a borrar cuando exista sólo una página o ninguna página para mostrar.
Este bloque TBS debe contener la barra de navegación. Si existen múltiples páginas a mostrar entonces sólo serán borradas las etiquetas de definición de este bloque TBS.
pagemin=num Número de la primera página (por defecto = 1).

Campos y bloques automáticos:
Los nombres onload y onshow son reservados para campos y bloques TBS que son combinados automáticamente cuando se carga la plantilla con el método LoadTemplate() y cuando los resultados se muestran usando el método Show().

Los campos automáticos son combinados con un valor vacío. Ellos aceptan todos los parámetros de los campos TBS.
Son muy útiles para sub-plantillas y plantillas variables.
Ejemplo:
[onload;file=header.htm]

Los bloques automáticos son combinados como bloques condicionales. Solamente se aceptan los parámetros de los bloques condicionales.

Ejemplos:
[onload;block=tr;when [var.status]==1] Status 1
[onload;block=tr;when [var.status]==2] Status 2

Vea bloques condicionales para más detalles.
Incluir una sub-plantilla:
Si un campo TBS tiene el parámetro file, entonces éste campo será reemplazado por el contenido del archivo indicado durante el proceso de combinado de éste archivo. El valor del parámetro file puede ser una cadena de texto o una expresión construida con campos Var ([var.*]) y palabras claves [val] (vea la definición de los campos TBS).

TinyButStrong obtiene el contenido del archivo tal cual como está. Si éste es un script Php, entonces dicho script no será ejecutado. Para insertar el resultado de un script Php, vea 'Incluir el resultado de otro script PHP'.
Si el archivo a incluir es un archivo Html, entonces TinyButStrong mantendrá solamente el cuerpo (delimitado por el par de etiquetas <body> y </body>.
El parámetro htmlconv (opcional) permite precisar si el contenido de un archivo ha de ser convertido a Html o no. Por defecto, no es convertido a Html.

Ejemplos:
[var.page_header;file=[val]]
[var.page_footer;file=foot.htm;htmlconv=yes]

Cómo precisar cuando es incluida la sub-plantilla:

Use los campos automáticos onload y onshow para precisar cuando el archivo es combinado.
- Un campo llamado onload es automáticamente combinado cuando se llama al método LoadTemplate(), justo depués que la plantilla es cargada.
- Un campo llamado onshow es automaticamente combinado cuando es llamado el método Show().

Ejemplos:
[onload;file=[var.article]]
[onshow;file=foot.htm]
Incluir el resultado de otro script PHP:
Si un campo TBS tiene le parámetro script, entonces dicho script será ejecutado cuando sea combinado el campo. El valor del parámetro script puede ser un valor de cadena o una expresión construida con campos Var ([var.*]) y palabras claves [val] (vea la definición de los campos TBS).

Ejemplos:
[var.special_process;script=[val];getob]
[onshow;script=end.php;once]

Alcance de la variable:

El script será ejecutado como si hubiese sido escrito dentro de la función. De todas formas, las variables globales no serán reconocidas en el script excepto si son declaradas usando la instrucción Php global o si se usa $GLOBALS.

Redireccionando la declaración de la salida:

Si su script Php contiene instrucciones que envían información a la pantalla, (tales como echo), entonces ese texto será mostrado como normalmente se hace; esto es instantáneamente sin esperar por el resultado de la combinación de la plantilla. Para evitar esto comportamiento, se puede utilizar el parámetro getob el cual habilita el redireccionar este texto para reemplazar el campo TBS.

Con getob: el texto pasado a las instrucciones echo será mostrado en el lugar de los campos TBS.
Sin getob: el texto pasado a las instrucciones echo será mostrado normalmente como siempre, esto es instantáneamente después del resultado de la combinación.

Previniendo que el script sea ejecutado muchas veces:

Si el nombre del script aparece varias veces dentro de los campos TBS, se puede especificar el parámetro once a fin de limitar la ejecución del script a una sola vez.

Como saber cuando el script es ejecutado:

Se pueden usar los campos automáticos onload y onshow para determinar cuando el script es ejecutado. Para más detalles acerca de estos campos especiales, vea 'Incluir una sub-plantilla'.
Revisión de la salida condicional:
TinyButStrong proporciona distintas herramientas para la muestra condicional de campos y bloques.

Campos condicionales

Para cualquer campo TBS se puede utilizar los parámetros para la muestra en pantalla condicional , repetido más abajo.

Parámetro Descripción
. (punto) Muestra un espacio forzado (en Html es &nbsp;) si el valor del campo es vacío.
ifempty=value2 Muestra value2 si es valor del campo es vacío.
magnet=tag Borra una etiqueta o un par de etiquetas si el valor del campo es vacío.
if condition
then value1
else value2
Muestra value1 o value2 dependiendo de si la condición es verificada o no.
frm=format1|format2|format3|format4 Cambia el formato numérico o formato de fecha/hora dependiendo de si el valor es positivo, negativo, cero o vacío.

Ejemplo:
[var.error_id;if [val]=0;then 'no error';else 'error found']

Bloques condicionales

Los bloques Condicionales son definidos como los bloques normales, excepto que:
- la definición del bloque debe contener un parámetro when o un parámetro default,
- no pueden ser combinados con datos,
- no pueden tener campos enlazados.

Se puede combinar un bloque condicional usando el método MergeBlock() con la palabra clave 'cond', o más usualmente usando bloques automáticos onload y onshow (vea más detalles abajo).

Cuando se combina un bloque condicional, cada condición when de esta sección es evaluada hasta que una es verificada. Tan pronto como una condición when es verificada, se mantiene la sección y las otras secciones son borradas. Si ninguna condición when es verificada, entonces la sección default será mostrada si existe.
Por defecto las secciones de un bloque condicional son exclusivas, solamente será mostrada una sección del bloque.

Nota: la condición definida por el parámetro when puede usar campos Var.

Ejemplo:

[block1;block=tr;when [var.light]=1] Light is set to 1.
[block1;block=tr;when [var.light]=0] Light is set to 0.
[block1;block=tr;default] Light is not 1 or 0.

Este bloque condicional puede ser combinado usando el siguiente código Php:
  $TBS->MergeBlock('block1','cond');

Usando bloques automáticos:

Se pueden crear bloques condicionales llamados onload y onshow (o onload_ y onshow_ con un sufijo). Tales bloques serán automáticamente combinados cuando se carga la plantilla (onload) o cuando se muestra el resultado (onshow).
Usando el sufijo para los nombres de los bloques le permite tener múltiples bloques.

Ejemplo:

[onload_ligth;block=tr;when [var.light]=1] Light is set to 1.
[onload_ligth;block=tr;when [var.light]=0] Light is set to 0.
[onload_ligth;block=tr;default] Light is not 1 or 0.

Este bloque condicional será automáticamente combinado cuando se carge la plantilla.

Secciones No-exclusivas:

Si desea un bloque con secciones no-exclusivas, se puede usar el parámetro several en la primera sección. Con este parámetro, todas las condiciones son evaluadas y cada condición verdadera hace que esta selección sea mostrada.

Ejemplo:

[onload_err;block=tr;when [var.email]='';several] Your email is empty.
[onload_err;block=tr;when [var.name]=0] Your name is empty.
[onload_err;block=tr;default] All is ok.

Resumen:
Parámetros de los campos TBS:
Parámetro Resumen
htmlconv

Modo de conversión Html para el valor del campo.

. (punto) Si el valor es vacío, entonces muestra un espacio forzado (&nbsp;).
ifempty Si el valor es vacío, entonces muestra otro valor.
magnet Si el valor es vacío, entonces borra las etiquetas que lo contienen.
mtype Se usa con magnet.
if Si se verifica la condición, entonces cambia el valor.
then Se usa con if.
else Se usa con if.
onformat Ejecuta una función Php del usuario para modificar el campo a combinar.
max Limita el número de caracteres.
frm Aplica un formato fecha-hora o numérico.
locale Se usa con frm. Muestra los nombres del día y mes en el formato local.
protect Modo de protección para los caracteres '['.
selected Items seleccionados en una lista Html.
selbounds Se usa con selected. Cambia los límites por defecto de los ítems buscados.
comm Extiende los límites del campo hasta la etiqueta de comentario que le envuelve.
noerr Evita algunos mensajes de error TBS.
file Incluye el contenido del archivo.
script Ejecuta el script Php.
getob Se usa con script. Obtiene el texto pasado al comando echo y lo coloca en el lugar del campo.
once Se usa con script. Evita que el script sea ejecuta más de una vez.
Parámetros de los bloques TBS:
Parámetro Resumen
block Define los límites del bloque.
extend Extiende los límites del bloque hasta las siguientes etiquetas Html sucesivas.
encaps Extiende los límites del bloque hasta las siguientes etiquetas Html que lo contienen.
comm Extiende los límites del bloque hasta la etiqueta de comentario que le envuelve.
nodata Indica la sección que será mostrada cuando no existan datos desde el origen de datos.
headergrp Indica una sección de encabezado que será mostrada cuando cambie el valor de una columna.
footergrp Indica una sección de pie de página que será mostrada cuando cambie el valor de una columna.
splittergrp Indica una sección de intermedio que será mostrada cuando cambie el valor de una columna.
serial Indica una sección que contiene una serie de muchos registros.
p1 Envia un parámetro a la sentencia dinámica para el origen de la fuente de datos.
onsection Ejecuta una función Php del usuario para modificar la sección a combinar.
tplvars Se usa con campos onload solamente. Define variables de la plantilla.
when Se usa con onload o onshow. Muestra la sección cuando se verifica la condición.
default Se usa con onload o onshow. Muestra la sección cuando no se muestra otra sección.
several Se usa con when. Indica que se pueden mostrar varios bloques del grupo.
Campos y parámetros para la barra de Navegación:
Campo Resumen
nav.page Muestra el número de la página.
nav.curr Muestra el número de la página actual.
nav.first Muestra el número de la primera página (siempre 1).
nav.prev Muestra el número de la página anterior .
nav.next Muestra el número de la página siguiente .
nav.last Muestra el número de la última página (-1 si es desconocido).
   
Parámetro Resumen
currpage Indica una sección que sólo se muestra para la página actual.
endpoint Devuelve una cadena vacía si la página actual es la primera o la última.
navpos Indica cómo es posicionada la barra de navegación comparada con el número de página actual.
navsize Indica el número de página a mostrar.
pagemin Indica el número de la primera página.
Nombres de campos y bloques especiales:
Nombre Resumen
val La palabra clave [val] se puede utilizar en los parámetros de los campos para representar el valor del campo.
var.* Muestra una variable Php.
var..* Muestra información acerca del Sistema TinyButStrong.
# Nombre de la columna virtual para un bloque. Muestra el número de registros.
$ Nombre de la columna virtual para un bloque. Muestra el índice del registro si el origen de los datos es un arreglo Php.
onload Campo automático o bloque, combinado cuando es cargada la plantilla.
onshow Campo automático o bloque, combinado cuando es mostrada la plantilla.
.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.:*~*:._.: