Les Input Data

Les Input Data sont des données dynamiques apportées selon l'environnement de la page et de l'utilisateur. Elles permettent de construire les parties communes à toutes les pages qui ne contiennent pas les mêmes données selon l'environnement.

Plan du site : sitemap

Cette partie contient l'ensemble des données décrivant le plan du site jusqu'à une profondeur de 3 pages.

S'y trouve notamment les étiquettes de page, le chemin de la page actuelle (grâce à l'attribut sitemap:in-path) et toutes les données pour faire un lien vers une autre page du plan du site dans la limite d'une profondeur de 3 niveaux.

<inputData>
	<sitemap sitemap:site="www" sitemap:lang="fr">
		<page sitemap:id="page://..." sitemap:name="index" sitemap:title="Accueil" sitemap:long-title="Accueil" sitemap:path="index" sitemap:type="CONTAINER" sitemap:container="true" sitemap:in-path="true" sitemap:current="true" site="www" sitemap="fr"/>
		<page sitemap:id="page://..." sitemap:name="rubrique-1" sitemap:title="Rubrique 1" sitemap:long-title="Rubrique 1" sitemap:path="rubrique-1" sitemap:type="CONTAINER" sitemap:container="true" site="www" sitemap="fr" PLUGIN_TAGS_SECTION="empty">
			<page sitemap:id="page://..." sitemap:name="sous-rubrique-1" sitemap:title="Sous rubrique 1" sitemap:long-title="Sous rubrique 1" sitemap:path="rubrique-1/sous-rubrique-1" sitemap:type="CONTAINER" sitemap:container="true" site="www" sitemap="fr" PLUGIN_TAGS_SUBSECTION="empty">
				<page sitemap:id="page://..." sitemap:name="sous-sous-rubrique-1" sitemap:title="Sous sous rubrique 1" sitemap:long-title="Sous sous rubrique 1" sitemap:path="rubrique-1/sous-rubrique-1/sous-sous-rubrique-1" sitemap:type="CONTAINER" sitemap:container="true" site="www" sitemap="fr"/>
				<page sitemap:id="page://..." sitemap:name="sous-sous-rubrique-2" sitemap:title="Sous sous rubrique 2" sitemap:long-title="Sous sous rubrique 2" sitemap:path="rubrique-1/sous-rubrique-1/sous-sous-rubrique-2" sitemap:type="CONTAINER" sitemap:container="true" site="www" sitemap="fr"/>
			</page>
			<page sitemap:id="page://..." sitemap:name="sous-rubrique-2" sitemap:title="Sous rubrique 2" sitemap:long-title="Sous rubrique 2" sitemap:path="rubrique-1/sous-rubrique-2" sitemap:type="CONTAINER" sitemap:container="true" site="www" sitemap="fr" PLUGIN_TAGS_SUBSECTION="empty"/>
		</page>
	</sitemap>
</inputData>

Sur chaque élément <page> on retrouve les attributs XML suivants :

sitemap:idIdentifiant de la page
sitemap:nameNom de la page
sitemap:titleTitre de la page
sitemap:long-titleTitre long de la page
sitemap:pathUrl de la page dans le plan du site
sitemap:type

Type de la page:

  • CONTAINER (page avec zones de contenus et/ou services)
  • LINK (page de redirection)
  • NODE (page vide)
sitemap:in-pathPrésent et égal à "true" est une page parente de la page courante ou la page courante
sitemap:currentPrésent et égal à "true" si la page est la page courante (actuellement affichée)
sitemap:containerPrésent et égal à "true" si la page est une page de type CONTAINER
sitemap:linkUrl de la page de redirection.
Présent uniquement si la page est de type LINK
sitemap:link-type

Type de redirection:

  • WEB: redirection vers une page web externe
  • PAGE: redirection vers une page du CMS

Présent uniquement si la page est de type LINK

sitemap:restrictedPrésent et égal à "true" si la page est une page à accès limité
sitemap:invisiblePrésent et égal à  "true" si la page est invisible dans les éléments de navigation.
(A partir de la version v3.8.1 seulement)

Exemple d'utilisation
Le fil d'Ariane est construit à partir de ces données.
 

XML

<inputData>
	<sitemap xmlns:sitemap="http://www.ametys.org/inputdata/3.0" sitemap:site="www" sitemap:lang="fr">
		<page sitemap:id="page://..." sitemap:name="index" sitemap:title="Accueil" sitemap:long-title="Accueil" sitemap:path="index" sitemap:type="CONTAINER" sitemap:container="true" site="www" sitemap="fr"/>
		<page sitemap:id="page://..." sitemap:name="fonctionnalites-avancees" sitemap:title="Fonctionnalités clés" sitemap:long-title="Fonctionnalités clés" sitemap:path="fonctionnalites-avancees" sitemap:type="CONTAINER" sitemap:container="true" sitemap:in-path="true" sitemap:current="true" site="www" sitemap="fr"/>
		...
		</page>
	...
	</sitemap>
</inputData>

XSL

<xsl:template name="bread-crumb">
	<ul>
		<xsl:if test="/cms/inputData/sitemap/page[@sitemap:name = 'index']">
			<li class="first">
				<a href="{$site-uri-prefix}/{$lang}/index.html">
					<xsl:value-of select="/cms/inputData/sitemap/page[@sitemap:name " 'index']/@sitemap:title" />
				</a>
			</li>
		</xsl:if>
		<xsl:for-each select="/cms/inputData/sitemap//page[not(@sitemap:path = 'index') and @sitemap:in-path = 'true']">
			<li>
				<xsl:text> > </xsl:text>
				<a href="{$site-uri-prefix}/{$lang}/{@sitemap:path}.html"><xsl:value-of select="@sitemap:title" /></a>
			</li>
		</xsl:for-each>
	</ul>
</xsl:template>

Filtres : Model et PageModel

Des filtres définis dans le fichier cms/skins/[skinName]/templates/[templateName]/filters/default.xml permettent également de récupérer des données dynamiques.

Voici un exemple :

<?xml version="1.0" encoding="UTF-8"?>
<filters>
    <filter id="focus" target="content">
        <content-types>
            <type id="org.ametys.web.default.Content.article"/>
        </content-types>
        <tags>
            <tag key="FOCUS"/>
        </tags>
        <view>abstract</view>
        <context type="current-site"/>
        <max-result>5</max-result>
    </filter>
</filters>

Si l'attribut target est égal à content, alors le filtre renvoie les contenus correspondants dans la balise Model. S'il est égal à page, alors le filtre renvoie les pages correspondantes dans la balise PageModel.

L'id du filtre est utilisé pour créer la balise racine de celui-ci dans le XML généré.

La définition d'un filtre dans default.xml est proche de celle définie dans plugin.xml (voir Définir un filtre statique).

L'inputdata org.ametys.web.tags.inputdata.FilteredContentsInputData lis ce fichier pour générer du XML de la forme suivante :

<inputData>
     <Model>
         <focus>
            <content name="" id="defaultContent://">
                 <html>
                     <head><!-- Here head of the content --></head>
                     <body>
                          <!-- Here HTML view of the content -->
                     </body>
                 </html>
            </content>
 
 
            <content name="" id="defaultContent://">
                 <html>
                     <head><!-- Here head of the content --> </head>
                     <body>
                          <!-- Here HTML view of the content -->
                     </body>
                 </html>
            </content>
         </focus>
     </Model>
</inputData>

Exemple d'utilisation
Cela est utile pour afficher une liste de liens vers les pages étiquetées "Accès direct" :

XML

<?xml version="1.0" encoding="UTF-8"?>
<filters>
	<filter id="acces-directs" target="page">
		<context type="current-site" lang="current" />
		<tags>
			<tag key="DIRECTACCESS" />
		</tags>
		<max-result>10</max-result>
	</filter>
</filters>

XSL

<ul>
	<xsl:for-each select="/cms/inputData/PageModel/acces-directs/page">
		<li>
			<a href="{$site-uri-prefix}/{$lang}/{@path}.html>
				<xsl:value-of select="@title" />
			</a>
		</li>
	</xsl:for-each>
</ul>

Input data personnalisés

Il est possible d'ajouter des Input Data personnalisés. Par exemple, les Input Data peuvent servir à remonter des informations sur les préférences utilisateur.