Do It The jAPS Way
Copyright © 2011 Tzente s.r.l.
Legal Notice
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the Appendix entitled "GNU Free Documentation License".
2011-03-03
| Revision History | ||
|---|---|---|
| Revision 0.3 | 2011-03-03 | MEM |
|
Revisione per il rilascio di jAPS 2.2.0 | ||
| Revision 0.2 | 2010-03-18 | MEM |
Revisione per rilascio japs 2.0.10 | ||
| Revision 0.1 | 2009-05-05 | AD |
Prima versione pubblicata | ||
Abstract
Questo documento vuole illustrare brevemente il concetto di Modello di Contenuto.
Table of Contents
List of Examples
Table of Contents
Questo documento illustrerà cosa sono i Modelli di Contenuto in jAPS 2.0 entando e come utilizzarli.
Questo documento è rivolto agli sviluppatori che intendono creare od ampliare un portale fatto con jAPS 2.0 entando.
Gli esempi ed i concetti riportati in questo manuale saranno utili agli sviluppatori come riferimento per la creazione di semplici Modelli di Contenuto
Per poter utilizzare efficacemente le informazioni presenti in questo documento è necessario avere conoscenze di:
- jAPS 2.0 entando e la sua architettura
- i “Tipi di Contenuto” di jAPS 2.0 entando
- html e css
- Apache Velocity Template Language
Ulteriori informazioni possono essere reperite tramite
- Apache Velocity VTL Reference
<japs-platform@googlegroups.com>, "japs-platform" Google Group, the jAPS 2.0 entando official Mailing List
È inoltre possibile consultare la documentazione presente in:
Lo scopo dei Modelli di Contenuto è quello di rappresentare in maniera opportuna le informazioni, che sono racchiuse nei contenuti, all'interno delle pagine di jAPS.
Per ogni Tipo di Contenuto è necessario creare almeno un modello per lista e un modello di default, questo perchè verranno utilizzati da jAPS come modelli di rifermento (vengono specificati nella configurazione dei Tipi di Contenuto)
I modelli possono essere creati direttamente utilizzando il backend, dal menu di sinistra andare su C.M.S. - Contenuti - Modelli di Contenuto.
Versioni Precenti alla 2.0.8
Nelle versioni precenti i Modelli di Contenuto sono reperibili andando su Varie - Personalizza - Modelli di Contenuto.
Qui si accederà alla lista dei modelli, dove è possibile modificare quelli presenti o crearne dei nuovi.
Per ogni modello si specifica:
Id, è un campo obbligario, e rappresenta un numero identificativo univoco che verrà preso come rifermento dal sistemaTipo, campo obbligatorio, rappresenta il tipo di contenuto a cui fa riferimentoDescrizione, obbligatoria, piccola descrizione sul modelloModello, campo obbligatorio, il modello scritto in VelocityFoglio di stile, non obbligatorio, eventualmente indicare un foglio di stile che verrà incluso ogni volta si userà il modello
Nota: Database
Le informazioni relative ai Modelli di Contenuto
verranno salvate nel database Port nella tabella contentmodels.
Il modello verrà interpretato da Velocity quindi si hanno a disposizione le funzionalità del template engine quali variabili, istruzioni ed espressioni.
Il risultato del modello vuole essere una struttura coerente con la struttura delle pagine del portale.
Se le pagine del portale sono fatte in xhtml il risultato del che si dovrà ottenere dal modello è xhtml.
Nei modelli che andremo a scrivere troveremo un mix di due linguaggi: il linguaggio di markup utilizzato nelle pagine e linguaggio Velocity.
jAPS mette a disposizione i seguenti oggetti nel contesto Velocity per accedere alle informazioni del contenuto:
$content$i18n
$content rappresenta l'oggetto Contenuto, è possibile richiamare ogni suo attributo secondo la notazione standard:
$content.NOMEATTIBUTO
Ogni Tipo di Attributo ha delle proprietà che si utilizzano per raggiungere l'informazione voluta. Fare riferimento al JavaDoc di jAPS.
Inoltre jAPS mette a disposizione le seguenti proprietà:
$content.categories$content.contentLink$content.contentOnPageLink
$content.categories è una mappa (Map) contenente la lista delle categorie associate al contenuto.
$content.contentLink restituisce una stringa con il link della pagina dove il contenuto è pubblicato esplicitamente.
$content.contentOnPageLink è un metodo accetta come parametro il codice di una pagina del portale e restituisce un URL simbolico che punta al contenuto stesso sulla pagina specficata
Nota: Esempi
Vedere gli esempi nei capitoli successivi
Per la creazione dei Modelli di Contenuto si utilizza un certo critero per l'attribuzione degli Id, delle Descrizioni e dei Fogli di Stile.
Il valore degli Id parte da 1.
Ogni Tipo di Contenuto deve avere come minimo due modelli: modello predefinito e modello per liste (defaultmodel e listmodel).
Per convezione si procede assegnando gli Id prima ai modelli predefiniti, poi ai modelli per liste e successivamente agli altri.
Per quanto riguarda i modelli completi si assegna un Id con valore che cresce di una unità di volta in volta.
Dopodichè si assegna ai modelli per lista lo stesso numero del corrispettivo modello predefinito accostando un 1.
Example 2.1. Assegnare l'Id ai modelli Generico Predefinito, News Predefinito
Assegnerò:
- Id Generico Predefinito: 1
- Id News Predefinito: 2
Nel caso in cui ci fossero anche altri Tipi di Contenuto si procede incrementando di una unità per ciascuno dei Modelli Predefiniti.
Example 2.2. Assegnare l'Id ai modelli Generico per liste, News per liste
Assegnerò:
- Id Generico per Liste: 11
- Id News per Liste: 21
Nel caso in cui ci fossero anche altri Tipi di Contenuto si procede incrementando la seconda cifra di una unità per ciascuno dei Modelli per Lista.
Più di 10 predefiniti
Se ci fossero 10 modelli predefiniti, al decimo modello per lista assegnerei l'Id 101
- Id Nono Modello per Liste: 91
- Id Decimo Modello per Liste: 101
Come per gli Id dei modelli per lista si associa agli altri modelli dello stesso Tipo di Contenuto un Id che inizia con l'Id del modello predefinito e si affianca una cifra che cresce di volta in volta
Example 2.3. Assegnare un Id ai modelli per i Tipi di Contenuto Generico e News
Id modello predefinito Contenuto Generico: 1
Id modello per liste Contenuto Generico: 11
Id modello alternativo Contenuto Generico: 12
Id modello predefinito News: 2
Id modello per liste News: 21
Id modello alternativo News: 22
Al decimo Modello Completo...
Id modello predefinito XXXXXXX: 10
Id modello per liste XXXXXXX: 101
Id modello alternativo XXXXXXX: 102
Non ci sono particolari nomi convenzionali la Descrizione nei Modelli di Contenuto.
L'unico accorgimento è indicare quali infomazioni compariranno.
Fare riferimento al prossimo esempio.
Example 2.4. Descrizioni di esempio
Prendiamo come riferimento un tipo di contenuto chiamato Contenuto Generico che ha questi gli attributi:
- Titolo
- Abstract
- CorpoTesto
- Link Correlati
- Allegati
- Foto1
- Foto2
- Foto3
La Descrizione per un modello che visualizza il titolo, il corpo testo, i link, gli allegati la foto numero 1 sarà così:
Completo (Titolo, Corpo, Link ,Alleg ,Foto1)
Mentre per un modello che visualizza solo il titolo e la foto si adotterà una Descrizione tipo la seguente
Per Liste (Titolo e Foto1)
Oltre ad indicare quali informazioni verranno visualzzate dal modello è bene indicare quale funzione o particolarità propongono
Example 2.5. Descrizione per un modello particolare per una lista rossa
Per Liste - Rossa (Titolo, Foto1)
Per seguire la linea di sviluppo di jAPS e mantenere un certo ordine è bene separare i fogli di stile dei Modelli di Contenuto ponendoli in una directory apposita chiamata contentmodels.
Per convezione il nome del file del foglio di stile viene deciso utilizzando il codice del tipo di contenuto e una descrizione senza spazi: codice_tipo_contenuto_descrizione_senza_spazi.css
Alcuni esempi come valore del campo Foglio di Stile:
contentmodels/CNG_completo.css
contentmodels/CNG_box_verde.css
contentmodels/NEW_liste_rosse.css
Table of Contents
In questo capitolo verranno illustrati degli esempi su come realizzare ed utilizzare i Modelli di Contenuto per diversi Tipi di Contenuto.
Facciamo degli esempi di Modelli di Contenuto riferendoci al seguente di Tipo di Contenuto
<contenttype
typecode="CNG"
typedescr="Contenuto generico"
viewpage="contentview"
listmodel="11"
defaultmodel="1">
<attributes>
<attribute name="Titolo" attributetype="Text" required="true" />
<attribute name="Abstract" attributetype="Longtext" />
<attribute name="CorpoTesto" attributetype="Hypertext" />
<attribute name="Immagine_1" attributetype="Image" />
<attribute name="Immagine_2" attributetype="Image" />
<list name="Riferimenti" attributetype="Monolist" nestedtype="Link" />
<list name="Allegati" attributetype="Monolist" nestedtype="Attach" />
</attributes>
</contenttype>
Se volessimo visualizzare tutti gli attributi (eccetto Abstract che verrà utilizzato solo per le liste) compileremo il form di creazione nuovo modello così:
- Id:
1 - Tipo:
Contenuto Generico - Descrizione:
Completo (titolo, testo, foto1-2, riferim, alleg) Modello:
$content.Titolo.text $content.CorpoTesto.text $content.Immagine_1.text: $content.Immagine_1.imagePath("1") - $content.Immagine_2.text: $content.Immagine_2.imagePath("1") #foreach ($link in $content.Riferimenti) $link.text: $link.destination - #end #foreach ($attach in $content.Allegati) $attach.text: $attach.attachPath - #end- Foglio di Stile:
contentmodels/CNG_completo.css
Guardando il modello e immaginando l'output di questo genere
Contenuto di prova <p>Questo è un contenuto di prova con immagini, link e allegati.</p> Il mio logo: /myPortal/resources/cms/images/myImage_d1.jpg Immagine dell'azienda: /myPortal/resources/cms/images/anotherImage_d1.png Homepage di jAPS - http://www.japsportal.org Sito sviluppatori jAPS - http://dev.japsportal.org Articolo sull'architettura - /myPortal/resources/cms/documents/articolo1.pdf Vantaggi jAPS - /myPortal/resources/cms/documents/vantaggi.pdf
Il passaggio all'html è quasi automatico
<div class="generico">
<h3>$content.Titolo.text</h3>
$content.CorpoTesto.text
<img src="$content.Immagine_1.imagePath("1") alt="$content.Immagine_1.text" /><br />
<img src="$content.Immagine_2.imagePath("1")" alt="$content.Immagine_2.text" />
<h4>Riferimenti</h4>
<ul>
#foreach ($link in $content.Riferimenti)
<li>
<a href="$link.destination">$link.text</a>
</li>
#end
</ul>
<h4>Documenti Allegati</h4>
<ul>
#foreach ($attach in $content.Allegati)
<li>
<a href="$attach.attachPath">$attach.text</a>
</li>
#end
</ul>
</div>Nella configurazione del Tipo di Contenuto appena descritto non è stata dichiarata l'obbligatorietà di alcuni attributi.
Controlliamo gli attributi non obbligatori utilizzano gli strumenti che Velocity ci mette a disposizione
<div class="generico">
<h3>$content.Titolo.text</h3>
#if ($content.CorpoTesto.text != "")
$content.CorpoTesto.text
#end
#if ($content.Immagine_1.imagePath("1") != "")
<img src="$content.Immagine_1.imagePath("1") alt="$content.Immagine_1.text" /><br />
#end
#if ($content.Immagine_1.imagePath("2") != "")
<img src="$content.Immagine_2.imagePath("1")" alt="$content.Immagine_2.text" />
#end
#if ($content.Riferimenti && $content.Riferimenti.size() > 0)
<h4>Riferimenti</h4>
<ul>
#foreach ($link in $content.Riferimenti)
<li>
<a href="$link.destination">$link.text</a>
</li>
#end
</ul>
#end
#if ($content.Allegati && $content.Allegati.size() > 0)
<h4>Documenti Allegati</h4>
<ul>
#foreach ($attach in $content.Allegati)
<li>
<a href="$attach.attachPath">$attach.text</a>
</li>
#end
</ul>
#end
</div>Prendiamo come riferimento il seguente Tipo di Contenuto
<contenttype
typecode="NEW"
typedescr="Notizia"
viewpage="newsview"
listmodel="21"
defaultmodel="2">
<attributes>
<attribute name="Titolo" attributetype="Text" required="true" />
<attribute name="Data" attributetype="Date" required="true"/>
<attribute name="Abstract" attributetype="Longtext" />
<attribute name="CorpoTesto" attributetype="Hypertext" required="true" />
</attributes>
</contenttype>
Definiamo il modello completo con queste caratteristiche
- Id:
2 - Tipo:
Notizia - Descrizione:
Completo (titolo, data inizio, data fine, testo)
e il relativo modello
<div class="completo"> <h3>$content.Titolo.text</h3> <p class="data">$content.Data.longDate</p> $content.CorpoTesto.text </div>
