Skip to content.
Logo tecnoteca

Portale Tecnoteca.it

Logo tecnoteca

Vai al sito aziendale Tecnoteca.com


 
You are here: tecnoteca.it » Tesi on line » Sviluppo funzionalità gis su portale ZOPE » Sviluppo » Sviluppo codice ZPT

Sviluppo codice ZPT

All'interno di ZOPE ci sono principalmente due possibilità per quanto riguarda i linguaggi di presentazione: le ZPT e il DTML.
Entrambi appartengono alla categoria di linguaggi server-side e quindi non visibili all'utente che di essi riceve solo l'output finale.
Il meccanismo è lo stesso di molti altri linguaggi server-side come PHP, ASP,JSP.
Più nel dettaglio le ZPT e il DTML sono caratterizzati dal fatto di essere più dei linguaggi di programmazione per la presentazione piuttosto che per la gestione della sezione logica.
Questo significa che dal punto di vista operazionale sono molto limitati e le funzioni che mettono a disposizione sono funzioni base per la stampa dell'output piuttosto che funzioni per la manipolazione dei dati.
La scelta di tale limitazione sulle ZPT e sui DTML è come al solito da ricercare in una politica dettata da ZOPE per creare dei compartimenti ben definiti su chi sia l'addetto alla programmazione logica (python) e chi invece alla presentazione dei risultati (ZPT e DTML).
Dovendo scegliere tra le ZPT e il DTML si è preferito utilizzare le ZPT in quanto il DTML lentamente sta diventando obsoleto, e probabilmente in futuro potrebbe non far parte integrante di ZOPE.
Tuttavia qualche piccola sezione poco rilevante ai fini del sistema  è stata sviluppata in DTML per semplicità e comodità d'utilizzo.
Il codice ZPT è molto semplice come anche le operazioni che mette a disposizione; i costrutti principali sono:
  • tal:attributes
  • tal:define
  • tal:condition
  • tal:content
  • tal:omit-tag
  • tal:on-error
  • tal:repeat
  • tal:replace
Il “template attribute language” (TAL) è un linguaggio utilizzato nelle ZPT che permette agli elementi di una normale pagina web di essere rimpiazzati, ripetuti o omessi.
Una definizione TAL ha un nome (attributes, define, condition...) ed un corpo che lo segue e che specifica quale operazione eseguire.
Ad esempio <span tal:content=”string:ciao”>qualsiasi stringa qui</span> presenterà sempre il risultato di <span>ciao</span> poiché ZOPE incontra un tal:content che indica di rimpiazzare il contenuto con il corpo del TAL che in questo caso è “string:ciao”.
Si presentano di seguito alcuni esempi di codice TAL scritto all'interno di pagine ZPT.


<span tal:replace="structure here/standard_html_header"></span>


Questo è un classico esempio di rimpiazzo di contenuto all'interno della pagina; quando ZOPE lo incontra sostituisce l'intero tag <span>...</span> con il contenuto specificato nel corpo del TAL.
In questo caso il tag <span> verrà rimpiazzato con il contenuto HTML (lo indica la parola chiave “structure”) dell'oggetto che si trova nella stessa cartella della pagina corrente chiamato “standard_html_header”.
Questo codice è stato utilizzato per inserire all'interno delle pagine ZPT lo stesso header e gli stessi contenuti css (che si trovano appunto dentro “standard_html_header”).
Un altro esempio:


<body bgcolor="#FEFEFE"
           tal:define="point python:request.get('find_info_point'); flag python:test(point,'resizeWin(740,535)',
           'resizeWin(480,535)')"
           tal:attributes="onload flag">



L'esempio riportato è un po' più complesso del precedente; in questo caso incontriamo dei TAL differenti: un tal:define ed un tal:attributes.
Il primo definisce una prima variabile “point” il cui valore viene prelevato dal request HTTP ed una seconda variabile “flag” che in base al valore di “point” assume il valore ''resizeWin(740,535)” o ''resizeWin(480,535)”.
Il secondo definisce il contenuto dell'attributo “onload” del tag <body> basandosi sulla computazione del primo TAL.
Intuitivamente quello che questo codice esegue è: in primo luogo definire il valore della variabile “flag” in base ad uno specifico valore di una variabile nella request e conseguentemente utilizzare il valore di “flag” per inserirlo dinamicamente nell'onload del tag <body>.
Questo costrutto infatti è stato utilizzato per far cambiare dinamicamente la size della finestra browser pop-up contenente la mappa.
Quando un utente non ha richiesto esplicitamente di avere le info su un determinato punto, allora il resize è quello base, ovvero (480,535) che è anche la dimensione di partenza della pop-up; quando invece l'utente richiede tale info è necessario aumentare di dimensione la pop-up al fine di trovare nuovo spazio dove stampare le informazioni richieste: ecco che con il codice scritto il tag onload richiederà un resize a (740,535).


<tr tal:repeat="row python:here.mysql_find_info_points(x_value_top=x_value_top,
                                                                                        x_value_bottom=x_value_bottom,   
                                                                                        y_value_top=y_value_top,
                                                                                        y_value_bottom=y_value_bottom)">

                    <td tal:content="repeat/row/number"></td>
                    <td tal:content="row/name"></td>
                    <td tal:content="row/description"></td>

</tr>


Ancora un esempio di codice ZPT; qui troviamo un nuovo TAL, il tal:repeat, particolarmente utile per stampare ciclicamente il contenuto di strutture dati.
Nell'esempio infatti viene prima definita una variabile row che contiene il fetch della riga corrente di una query mysql (la query viene effettuata richiamando un oggetto specifico con: python:here.mysql_find_info_points(x_value_top=x_value_top, x_value_bottom=x_value_bottom, y_value_top=y_value_top, y_value_bottom=y_value_bottom)") e poi tale variabile row viene utilizzata per stampare ciclicamente i risultati della query.
Quest'ultima operazione in verità viene eseguita dai TAL all'interno dei tag <td>, che essendo dei TAL:content sostituiscono il contenuto dei <td></td> con i valori recuperati dalla variabile row.
Quello che viene stampato quindi da questo codice potrebbe avere questa struttura:


<tr>
    <td>1</td>
    <td>nome 1</td>
    <td>descrizione 1</td>
</tr>
<tr>
    <td>2</td>
    <td>nome 2</td>
    <td>descrizione 2</td>
</tr>



Dagli esempi presentati è facile capire che con il linguaggio TAL è possibile eseguire operazioni elementari come anche operazioni complesse.
L'unico aspetto rilevante e che si sottolinea è che il linguaggio TAL non permette programmazione logica di un certo livello; quindi è bene tenere presente che tutta la parte logica in ZOPE deve essere sviluppata in codice Python.



Tesi di Laurea:
"Sviluppo funzionalità gis su portale Zope"
di Marco Celotti


- Università degli studi di Udine -
-  Facoltà di Scienze Matematiche Fisiche e Naturali  -
- Dicembre 2004 -


Slide Tesi.ppt


Video Tesi.zip  [913 KB formato AVI]