Written by xinyiman Marzo 02, 2012, 01:54:00 pm19318 ViewsRating: 0 (0 Rates)Print
Prerequisiti: aver letto la serie di articoli dedicata alla programmazione WEB con Lazarus + Free Spider ed averne studiato gli esempi.
Alcune lezioni fa abbiamo parlato dell'oggetto TSpiderPage (alla pagina http://www.lazaruspascal.it/index.php?page=93 ) in cui accennavamo alla possibilità di separare l'operatività della pagina dal layout della pagina, ed il TSpiderPage lavorava bene a tal proposito se tutti gli elementi di layout erano all'interno della pagina presa in ingresso dal TSpiderPage, ma se già tale pagina html faceva riferimento a dei fogli di stile esterni (file .css) o ad immagini queste non vengono prese in considerazione (o almeno io non ho capito come fare). Per risolvere questo problema ci viene in soccorso l'oggetto THtmlTemplate che trovate nella libreria "JQuery UI" (alla pagina http://www.lazaruspascal.it/index.php?page=101 ). Vediamo come si usa, per prima cosa copiamo i file che compongono la libreria "JQuery UI" nella cartella dove risiede il nostro progetto CGI. Successivamente aggiungiamo la seguente unit "htmltemplate" al nostro progetto.
Successivamente andiamo a inserire il seguente codice nell'evento OnRequest dell'oggetto SpiderCGI1
procedure TDataModule1.SpiderCGI1Request(Sender: TObject; Request: TSpiderRequest; var Response: TSpiderResponse); var Template: THtmlTemplate; begin Template:= THtmlTemplate.Create('blackwhite/index.html'); // Assigning the tags to be replace Template.Tags.Add('', ExePath + 'blackwhite/'); Template.Tags.Add('', 'Qui scrivo quello che voglio. Posso anche andare ad inserirci altri oggetti jquery, form, tabelle e quant''altro.'); Template.Tags.Add('', 'mio titolo'); Template.Load; Response.Add(Template.Content); Template.Free; end;
A questo punto il nostro codice dovrebbe diventare così:
TDataModule1 = class(TDataModule) SpiderCGI1: TSpiderCGI; procedure DataModuleCreate(Sender: TObject); procedure SpiderCGI1Request(Sender: TObject; Request: TSpiderRequest; var Response: TSpiderResponse); private { private declarations } public { public declarations } end; const ExePath='/bin-cgi/'; {il path di dove risiede la nostra cartella CGI per intenderci dove dobbiamo copiare il nostro eseguibile per farlo lavorare correttamente - sostituire bin-cgi con il nome della nostra cartella preposta all'esecuzione dei file cgi} var DataModule1: TDataModule1;
implementation
{$R *.lfm}
{ TDataModule1 }
procedure TDataModule1.DataModuleCreate(Sender: TObject); begin SpiderCGI1.Execute; end;
procedure TDataModule1.SpiderCGI1Request(Sender: TObject; Request: TSpiderRequest; var Response: TSpiderResponse); var Template: THtmlTemplate; {l'oggetto che ci permette di inglobare un template nel nostro progetto} begin Template:= THtmlTemplate.Create('blackwhite/index.html'); {creo l'oggetto in memoria e lo riempio del contenuto del file passato come parametro - ovvero il nostro template} Template.Tags.Add('', ExePath + 'blackwhite/'); {all'interno del nostro template vado a sostituire le stringhe con il percorso della cartella dove si trova il nostro file style.css } Template.Tags.Add('', 'Qui scrivo quello che voglio. Posso anche andare ad inserirci altri oggetti jquery, form, tabelle e quant''altro.'); {idem come la riga sopra solo che qui immetto del testo per far capire come rendere le pagine interattive mantenendo una sottostruttura stabile che adibiamo a template} Template.Tags.Add('', 'mio titolo'); {idem come la riga sopra ma serve solo per rendere variabile il contenuto del titolo} Template.Load; {carico in memoria i miei dati} Response.Add(Template.Content); {stampo sul browser dell'utente il contenuto dell'oggetto template come lo abbiamo preparato} Template.Free; {libero l'area di memoria adibita a contenere il template} end;
end.
Questo è tutto, si tratta di un oggetto semplice ma estremamente utile per mantenere le vostre pagine sempre accattivanti (cambiando solo il file che contiene la grafica della pagina) senza dover toccare una riga di codice del vostro programma. L'esempio appena descritto è disponibile qui, corredato anche della cartella "blackwhite" e del suo contenuto: www.lazaruspascal.it/esempi/Esempio_Template.zip
About the author
xinyiman registered at Italian community of Lazarus and Free Pascal on Ottobre 14, 2011, 10:56:28 pm and has posted 3263 posts in the boards since then. Last visit was Oggi alle 09:12:20 am.
Questo blog non rappresenta una testata giornalistica poiché viene
aggiornato senza alcuna periodicità. Non può pertanto considerarsi un
prodotto editoriale ai sensi della legge n. 62/2001.
Questo sito utilizza cookie, anche di terze parti, per offriti servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all’uso dei cookie.