Per struttura dinamica di una pagina si intende la possibilità di modificare secondo le proprie esigenze il contenuto di una pagina, in particolare le azioni potrebbero essere quella di voler creare nuovi oggetti, modificare attributi, manipolare i dati. Esistono diverse tecniche messe a disposizione dal framework per raggiungere questo scopo.
1) Metodo diretto: chiamato così in quanto si agisce direttamente sugli oggetti istanziati. All'interno della pagina sorgente php viene istanziata la classe ClsXML la quale permette l'accesso diretto all'insieme degli oggetti che compongono la struttura DOM della pagina.
Se volessimo settare una proprietà di un oggetto
<?php
function html_load()
{
global $xml;
$label1 = $xml->getObjById("label1");
$label1->setProperty("value", "Etichetta");
}
?>
Fanno eccezione i datasource nei quali il settaggio degli attributi deve avvenire durante il caricamento dei dati(evento function data_select_before)
<?php
function data_select_before($ds)
{
if ($ds->getPropertyName("id")=="ds1") $ds->setProperty("dswhere", "`id` = 5");
}
?>
Nel caso in cui il valore dell'attributo da modificare derivi da un parametro postato(metodo GET o POST) bisogna gestire la richiesta
.Questa tecnica da anche la possibilità di aggiungere nuovi oggetti all'interno della pagina:
<?php
function html_load()
{
global $xml;
$text1 = $xml->pageObj->addChild("text1", "text");
}
?>
Il nuovo oggetto può anche essere "figlio" in un'altro oggetto già presente nella pagina:
<?php
function html_load()
{
global $xml;
// Recupera oggetto padre
$parent = $xml->getObjById("div1");
// Crea una text chiamata text1 e lo aggiunge in coda all'oggetto div1
$parent->addChild("text1", "text");
// Crea una text chiamata text2 e lo aggiunge prima dell'oggetto text1
$parent->insertBefore("text2", "text", "text1");
// Crea una text chiamata text3 e lo aggiunge dopo l'oggetto text2
$parent->insertAfter("text3", "text", "text2");
// Rimuove l'oggetto text2
$parent->removeChild("text2");
}
?>
2) Metodo indiretto: Il metodo consiste nell'inserire all'interno del sorgente XML una variabile $$NOMEVARIABILE$$, in questo caso si dovrà utilizzare il metodo html_before_load() perchè precedente al settaggio degli attributi. Nel codice del sorgente XML si inserirà:
il valore verrà poi assegnato in fase di caricamento della pagina:
<?php
function html_before_load()
{
$_POST['$$VALUE$$'] = "Etichetta2";
}
?>
Il metodo indiretto può essere applicato ad oggetti di tipo ds solo se l'output è di tipo pdf
3) Metodo a posteriori: La modifica viene effettuata lato client tramite funzioni javascript, un piccolo esempio:
<?php
function html_load()
{
global $event;
$event->setCodeJs("$('text1').value='text';");
}
?>