Manual del desarrollador
Clases, propiedades y métodos mínimos
Table
Métodos de clase
init() show_table() setup() create()
Ejemplo:
Table::init();
Table::show_table('INVOICES');
Cada tabla necesita un archivo TABLE_<tablename>.php que contendrá la definición de un objeto Table y su lista de campos (objetos tipo Field) y opcionalmente, un objeto de la clase defaultTableEvents asignado a su propiedad events.
Si la tabla ya existe el archivo será creado automáticamente.
Si no hay permisos de escritura se mostrará el código en el navegador para que podamos copiarlo y guardarlo
Si la tabla no existe se creará automáticamente.
Una vez exista el archivo podemos modificarlo, añadirle campos, modificarlos, etrc, sin problema. cada vez que se cambio a la estructura se deberá actualizar ésta con el método setup() del objeto Table.
Propiedades
tablename // table name cols // Array of Field objects events // Instancia de la clase defaultTableEvents page page_num_items
Ejemplo de un archivo llamado TABLE_INVOICES.php
//ARCHIVO TABLE_INVOICES.php
$id = new Field();
$id->type = 'int';
$id->len = 5;
$id->fieldname = 'ID';
$id->label = 'Id';
$name = new Field();
$name->fieldname = 'NAME';
$name->label = 'Nombre';
$name->type = 'varchar';
$name->len = 100;
$name->editable = true;
$tabla = new TableMysql('INVOICES');
$tabla->title = 'Facturas';
$tabla->page = $page;
$tabla->addCol($id);
$tabla->addCol($name);
Ejemplo de sintaxis alternativa, usando el método addCols
//ARCHIVO TABLE_PRICES.php
$products = [ 'PROD_01' => 'Bicicleta'
, 'PROD_02' => 'Manga pastelera'
, 'PROD_03' => 'Churro multicolor' ];
$tabla = new TableMysql( 'PRICES' );
$tabla->addCols([
$tabla->field( 'ID', 'int' )->len( 5)->editable(false)->hide(true),
$tabla->field( 'FECHA', 'date' )->len(100)->required(true)->filtrable(true)->searchable(true),
$tabla->field( 'PRODUCT', 'select' )->len( 10)->required(true)->searchable(true)->values($products),
$tabla->field( 'AMOUNT', 'decimal' )->len( 10)->precission(3)->required(true)
]);
$tabla->page = $page;
$tabla->orderby = 'ID DESC';
En éste ejemplo, la variable products podría ser un array con valores leídos de una presunta tabla de productos
En los archivos TABLE_<tablename>.php no se usa directamente la clase table sino alguna de sus descendientes TableMysql, TableSQLite, TableOracle o TableSQL
Field
Propiedades
type len fieldname label editable filtrable searchable values values_all
Ejemplos con fechas
// Modificar campo tipo date con sql
$sql_add_yaer_to_fiald_date = "UPDATE TBNAME SET FDATE = DATE_ADD(FDATE, INTERVAL 1 YEAR) WHERE .....";
if($this->sql_exec($sql_add_yaer_to_fiald_date)) ...
// Modificar campo tipo date con PHP
// Añadir un mes a fecha actual
$fecha_1m = DateTime::createFromFormat('d/m/Y',date('d/m/Y'))->add(new DateInterval('P1M'));
$fecha_str_1m = $fecha_1m->format('d/m/Y');
// Añadir 15 días a fecha actual
$fecha_15d = DateTime::createFromFormat('d/m/Y',date('d/m/Y'))->add(new DateInterval('P15D'));
$fecha_str_15d = $fecha_15d->format('d/m/Y');
// Añadir un año a fecha actual
$fecha_1y = DateTime::createFromFormat('d/m/Y',date('d/m/Y'))->add(new DateInterval('P1Y'));
$fecha_str_1y = $fecha_1y->format('Y');
// 1 de enero de siguiente año
$fecha_str_31e = '31/01/'.$fecha_str_1y;
$sql = "UPDATE tbname SET fdate='{$fecha_str_?}' WHERE .....";
Campo dblookup
Campo tipo select que obtiene los valores de otra tabla.
Ejemplo:
$type = new Field();
$type->fieldname = 'TYPE_ID';
$type->label = 'Tipo';
$type->type = 'select';
$type->len = 5;
$type->values = $tabla->toarray('types', "SELECT ID, NAME FROM TB_TYPES WHERE ACTIVE=1 ORDER BY ID",true);
$type->values_all = $tabla->toarray('types_all', "SELECT ID, NAME FROM TB_TYPES ORDER BY ID",true);
La propiedad values contendrá los valores que se mostrarán en el select. La propiedad values_all contendrá todos los valores entre lo que alguna vez se haya podido elegir. Porque habrá valores que se deban mostrar pero ya no sean seleccionables, por ejemplo, por estar inactivos, desactivados, sin stock, etc.
Los campos de la otra tabla deberán llamarse ID y NAME, o en el select ponerle AS ID y/o AS NAME, por ejemplo: "SELECT user_id AS ID, user_name AS NAME WHERE ...."
Campo lookup
Como dblookup pero en lugar de otra tabla usa un array. Ejemplo:
$pri = new Field();
$pri->fieldname = 'PRIORITY';
$pri->label = 'Prioridad';
$pri->type = 'select';
$pri->len = 5;
$pri->values = [ 1=>'Baja', 2=>'Normal', 3=>'Alta' ];
Form
Clases
fieldset FORM formElement // abstract. No puede ser instanciada directamente formElementHtml formInput formInputProgress formTextarea formInputCCC // deprecated formSubmit formButton formHidden formInputColor formInputDate formInputDateTime formInputTime formSelect formSelectDb formCheckbox formRadio // work in progress formFile2 // old FormFile formFile // new input file with drang&drop, crop, etc. (work in progress)
Estas clases no necesitan ser usadas para un uso básico. La clase Table las crea dinámicamente según se necesiten.
Events
Se puede declarar una instancia de la clase defaultTableEvents y asignarla a la propiedad events de un objeto Table.
Estos son los métodos que se pueden implementar. Nótese que hay dos clases de eventos, los que permiten salida por pantalla y los que no. En los primeros se puede escribir código html, javascript, etc. y son aquellos cuyo nombre contiene Show o Print.
OnBeforeShow($owner) OnShow($owner) OnAfterShow($owner) OnDrawColTitle($owner,&$col) OnDrawRow($owner,&$row,&$class) OnAfterDrawRow($owner,&$row,&$markup) OnDrawCell($owner,&$row,&$col,&$cell) OnCalculate($owner,&$row) OnBeforeInsert($owner) OnInsert($owner,&$result,&$post) OnAfterInsert($owner,&$result,&$post) OnBeforeUpdate($owner,$id) OnUpdate($owner,&$result,&$post) OnAfterUpdate($owner,&$result,&$post) OnPostCol($owner,&$result,&$col,&$value) OnDelete($owner,&$result,$id) OnAfterDelete($owner,&$result) OnFilter($owner,&$result,&$post) OnBeforeShowForm($owner,&$form,$id) OnAfterShowForm($owner,&$form,$id) OnBeforeShowDetail($owner,&$row) // deprecated * OnBeforeSaveFile($owner,&$col,$filename,&$result ) OnSaveFile($owner,&$col,$file,$result) OnAfterSaveFile($owner,&$col, $localfilename, &$result ) OnBeforePrint($owner, $template, $id) OnPrint($owner, $template, $_item_tags, $_item_values) OnBeforePrintDetail($owner, $template) OnPrintDetail($owner, $template, &$names, &$values) OnAfterPrintDetail($owner, $template) OnAfterPrint($owner, $template); OnAfterCreate($owner);