Publication structurée

Un article de OviWiki.

Sommaire

Containers OVML

OCPublication

Liste des publications

<OCPublication [node=""] [structure="" [publication=""]] [filter=""] [limit=""] [order=""] [orderby=""]>
      <OVPublicationId>
      <OVPublication...>
</OCPublication>


Paramètres

node
Id du noeud dans le plan du site. Si node n'est pas renseigné, structure devra être renseigné
structure
nom de la structure de donnés, si structure n'est pas renseigné, node devra être renseigné
publication
Id numérique de la publication ou liste d'id séparés par des virgules
path (optionnel)
requête XPath à utiliser pour récupérer la structure, la requête doit retourner un noeud de type <element name="nom de la structure">. Exemple de requête XPath pour que les publications affichées, soient les sous-publications définies sous "slide" dans la structure XSD : .//xs:element[@name='slide']. Par défaut, le container va utiliser l'élément à la racine.

L'exemple de code ci-dessous récupère la structure theme_sw_foo, le conteneur imbriqué niv2 permet de récupérer des sous éléments liés à la publication. Pratique dans le cas d'un slider (ajout de plusieurs sous publications (images) à l'aide d'une seule structure de données).


<OCPublication structure="theme_sw_foo" publication="<OVPublication>" root>
  ... code ...
  <OCPublication publication="" structure="theme_sw_foo" path=".//xs:element[@name='slide']" filter="theme_sw_foo=<OVPublicationId>" niv2>
    ...code...
  </OCPublication niv2>
  ... code ...
</OCPublication root>
filter (optionnel)
Les filtres doivent êtes séparés par des virgules, le nom du champ et la valeur doivent êtres séparés par un =. Ex. type=Courrier,deleted=0. Les noms de champ à utiliser sont ceux de la structure. Voir exemple de filtre ci-dessus.
limit (optionnel)
Permet de limiter le nombre d'éléments renvoyés par le conteneur :
l'attribut comprend 2 valeurs séparées par une virgule, la première valeur indique l'index du premier élément à renvoyer et la deuxième est le nombre maximum d'éléments renvoyés. Ex. limit="0,2" limite le conteneur : à 2 éléments à partir du 1er.
order (optionnel)
asc ou desc
orderby (optionnel)
l'ordre par défaut est l'ordre manuel des sous publication dans le cas ou path est défini, ou l'ordre des id si le champ publication contient plusieurs id séparés par des virgules.

Variables

Variable Valeur
OVPublicationId Retourne l'Id de la publication
OVPublicationSitemapNodeId Id du noeud du plan du site fourni par ovidentia (toujours présent)
OVPublicationSitemapCustomNodeId Id du premier noeud ayant pour cible cette publication dans le plan du site défini dans les options du site (peut être vide si la publication n'est pas dans sitemap_editor).
PublicationSitemapCustomNodeText Nom du premier noeud ayant pour cible cette publication dans le plan du site défini dans les options du site (peut être vide si la publication n'est pas dans sitemap_editor).
PublicationSitemapCustomNodeDescription Description du premier noeud ayant pour cible cette publication dans le plan du site défini dans les options du site (peut être vide si la publication n'est pas dans sitemap_editor).
PublicationSitemapUrl Url réécrite permettant d'accéder à la publication.
... Autant de variables que de champs dans la structure Il faut utiliser une majuscule pour le premier caractère, example: title dans le fichier xsd deviens OVPublicationTitle dans l'ovml.

Fonctions OVML

OFDownloadUrl

Créer une url de téléchargement.

<OFDownloadUrl path="localPath" permanent="1|0" saveas="">

Paramètres

path
chemin local du fichier tel qu'il est proposé par le container OCPublication par exemple.
permanent (optionnel)
0 (par défaut) : l'identifiant unique change à chaque rafraîchissement de la page, pour une sécurité plus forte
1 : L'identifiant unique reste toujours le même pour une url locale donnée, le lien peut être bookmarké ou indexé par les moteurs de recherche (préférable pour les url publiques)
saveas
Enregistrer le résultat dans une variable OVML

OFGetPublicationId

Pour obtenir l'id numérique d'une publication à partir d'un noeud du plan du site.

Ancien nom de la fonction: OFPublicationNode

Attention, la fonction OFPublicationNode n'existe plus dans les versions du module Publication supérieures à 0.2.13.

<OFGetPublicationId [node=""] [saveas=""] [all="0"]>


Paramètres

node (optionnel)
Par défault le noeud de la page en cours sera utilisé
all (optionnel)
0 (par défaut) : seulement la publication
1 : la publication associée au nœud et toutes les publications associées au nœuds en dessous.
saveas (optionnel)
Enregistrer le résultat dans une variable ovml

Types de données

Pré-requis

Les types de données utilisés par les publications doivent être déclarés dans le fichier datatypes.xsd du skin.

  • votre_skin
    • theme
      • structures
        • types
          • datatypes.xsd
        • votre_skin_structure1.xsd
        • votre_skin_structure2.xsd
        • ...
        • votre_skin_structureN.xsd

Types de données

Dans ce tableau sont recensés les types de données utilisables dans publication, le code nécessaire à ajouter dans le fichier datatypes.xsd, et le code nécessaire à ajouter dans les fichiers de structure.


Type Description Utilisation dans la structure
normalizedString Champ de texte sur une ligne

Des restrictions peuvent être utilisées :

  • minLength=1 : la saisie du champ est obligatoire
  • maxLength : le nombre de caractères maximal
  • pattern : Une expression rationnelle de validation de la saisie
<xs:element name="NomDeLaVariable">
    <xs:annotation>
        <xs:documentation>Libellé du champ</xs:documentation>
        <!-- Description optionnelle du champ -->
    </xs:annotation>
    <xs:simpleType>
        <xs:restriction base="xs:normalizedString">
            <xs:maxLength value="255" />
            <xs:minLength value="1" />
        </xs:restriction>
    </xs:simpleType>
</xs:element>
html Un éditeur WYSIWYG.

Déclaration dans datatypes.xsd :

<xsd:simpleType name="html">
    <xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xs:element name="NomDeLaVariable" type="html">
    <xs:annotation>
        <xs:documentation>Libellé du champ</xs:documentation>
        <!-- Description optionnelle du champ -->
    </xs:annotation>
</xs:element>
string Un champs de texte multilignes.
<xs:element name="NomDeLaVariable">
    <xs:annotation>
        <xs:documentation>Libellé du champ</xs:documentation>
        <!-- Description optionnelle du champ -->
    </xs:annotation>
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:minLength value="0" />
        </xs:restriction>
    </xs:simpleType>
</xs:element>
dateTime Un champs permettant la saisie d'une date et d'un horaire.

Compatible avec la variable date.

<OVPublicationNomdelavariable date="%d %j %m %Y %H %i">
<xs:element name="NomDeLaVariable" type="xs:dateTime">
    <xs:annotation>
        <xs:documentation>Libellé du champ</xs:documentation>
        <!-- Description optionnelle du champ -->
    </xs:annotation>
</xs:element>
date Un champs permettant la saisie d'une date.

Compatible avec la variable date.

<OVPublicationNomdelavariable date="%d %j %m %Y">
<xs:element name="NomDeLaVariable" type="xs:date">
    <xs:annotation>
        <xs:documentation>Libellé du champ</xs:documentation>
        <!-- Description optionnelle du champ -->
    </xs:annotation>
</xs:element>
time Un champs permettant la saisie d'un horaire.
<xs:element name="NomDeLaVariable" type="xs:time">
    <xs:annotation>
        <xs:documentation>Libellé du champ</xs:documentation>
        <!-- Description optionnelle du champ -->
    </xs:annotation>
</xs:element>
int Un champs permettant la saisie d'un nombre entier

entre -2147483648 et 2147483647.

<xs:element name="NomDeLaVariable" type="xs:int">
    <xs:annotation>
        <xs:documentation>Libellé du champ</xs:documentation>
        <!-- Description optionnelle du champ -->
    </xs:annotation>
</xs:element>
float Un champs permettant la saisie d'un nombre à virgule. La restriction fractionDigits permet de définir le nombre de chiffres après la vigule.
<xs:element name="NomDeLaVariable">
    <xs:annotation>
        <xs:documentation>Libellé du champ</xs:documentation>
        <!-- Description optionnelle du champ -->
    </xs:annotation>
    <xs:simpleType>
        <xs:restriction base="xs:float">
            <xs:fractionDigits value="2" />
        </xs:restriction>
    </xs:simpleType>
</xs:element>
anyURI Un champs permettant la saisie d'une URL.
<xs:element name="NomDeLaVariable" type="xs:anyURI">
    <xs:annotation>
        <xs:documentation>Libellé du champ</xs:documentation>
        <!-- Description optionnelle du champ -->
    </xs:annotation>
</xs:element>
babfile Un champs permettant l'import d'un fichier.

Déclaration dans datatypes.xsd :

<xsd:simpleType name="babfile">
    <xsd:restriction base="xsd:anyURI"/>
</xsd:simpleType>
<xs:element name="NomDeLaVariable" type="babfile">
    <xs:annotation>
        <xs:documentation>Libellé du champ</xs:documentation>
        <!-- Description optionnelle du champ -->
    </xs:annotation>
</xs:element>
babimage Un champs permettant l'import d'une image (.gif, .jpeg, .jpg ou .png).

Nécessite l'utilisation de la fonction OFThumbnail ou OFImg

Déclaration dans datatypes.xsd :

<xsd:simpleType name="babimage">
    <xsd:restriction base="xsd:anyURI"/>
</xsd:simpleType>
<xs:element name="NomDeLaVariable" type="babimage">
    <xs:annotation>
        <xs:documentation>Libellé du champ</xs:documentation>
        <!-- Description optionnelle du champ -->
    </xs:annotation>
</xs:element>
babsitemap Un champs de saisie pour un nœud du plan de site.

Retourne l'identifiant du nœud de plan de site. Déclaration dans datatypes.xsd :

<xsd:simpleType name="babsitemap">
    <xsd:restriction base="xsd:string"/>
</xsd:simpleType>
<xs:element name="NomDeLaVariable" type="babsitemap">
    <xs:annotation>
        <xs:documentation>Libellé du champ</xs:documentation>
        <!-- Description optionnelle du champ -->
    </xs:annotation>
</xs:element>
boolean Un champs permettant la saisie d'un booléen.

(0 ou 1)

<xs:element name="NomDeLaVariable" type="xs:boolean">
    <xs:annotation>
        <xs:documentation>Libellé du champ</xs:documentation>
        <!-- Description optionnelle du champ -->
    </xs:annotation>
</xs:element>
enumeration Un menu déroulant avec une liste d'option.

La première option définie dans la structure sera l'option par défaut. Fonctionne avec des valeurs nulles.

<xs:enumeration value=""/>

Ajouter un commentaire à la fin de la ligne d'énumération permet de définir le libellé de l'option.

<xs:element name="NomDeLaVariable">  		
    <xs:annotation>
        <xs:documentation>Libellé du champ</xs:documentation>
        <!-- Description optionnelle du champ -->
    </xs:annotation>										
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:enumeration value="Option 1"/><!-- Libellé de l'option 1 -->
            <xs:enumeration value="Option 2"/><!-- Libellé de l'option 2 -->
            ...
            <xs:enumeration value="Option n"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

Exemple d'intégration des structures

Les pré-requis

La publication structurée est fonctionnelle via le système des portlets et/ou l'éditeur de plan de site. Il est indispensable qu' Ovidentia soit à jour et que les modules le soient également. Afin de s'assurer d'être à jour, il est souhaitable d'installer le module storeclient. Ce dernier facilite le téléchargement, l'installation et la mise à jour des modules et d' Ovidentia directement depuis storeclient.

- Module Publication (à jour)

- Module Editlinks (à jour) => Attribuer les droits nécessaires (Administrateurs ou utilisateurs enregistrés)

- Module Portlets (à jour)

- Module Widgets

- Module LibOrm

Mise en place de la structure des dossiers dans le skin

Voici un exemple de dossiers et de fichiers nécessaires à la mise en place de la publication structurée. Par convention, nous nommerons de la même manière le fichier ovml et le xsd. exemple : nom_du_theme_foo.ovml et nom_du_theme_foo.xsd

- A la racine du thème, un dossier structures répertoriant les fichiers xsd nécessaires pour la structure des données.

- Dans le dossier ovml, les fichiers "ovml" nécessaires pour le rendu des données.

vignette


Version portlet

Ci-dessous un exemple de fichier Ovml permettant la mise à disposition d'une publication structurée de type Wysiwyg dans un portlet. Il s'agit ici du fichier 'theme_sw_wysiwyg.ovml' que nous avons vu plus haut.

Dans un portlet <OVStructure> saura aller chercher la structure "theme_sw_wysiwyg". Idem pour <OVPublication>.

<OFPutVar name="babSiteName">
<OFPutVar name="babSkin">
 
<OCPublication structure="<OVStructure>" publication="<OVPublication>" root>
	<span class="publication-dynamicrecord-<OVPublicationStructure>-<OVPublicationId>"></span>
 
	<div class="row">
		<div class="col-md-12 col-sm-12">
			<div class="title-block clearfix">
 
<h3 class="h3-body-title"><OVPublicationTitre></h3>
			    <OCIfNotEqual expr1="<OVPublicationBorderwysiwyg>" expr2="Sans bordure">
			    	<div class="title-seperator"></div>
			    </OCIfNotEqual>
			</div>                
			<OVPublicationContenu>
		</div>
	</div>
</OCPublication root>

Ci-dessous le fichier 'theme_sw_wysiwyg.xsd' intégrant la structure XSD de la publication de type Wysiwyg.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:include schemaLocation="types/datatypes.xsd" />
    <xs:annotation>
        <xs:documentation type="create">Ajouter un contenu</xs:documentation>
        <xs:documentation type="edit">Modifier le contenu</xs:documentation>
        <xs:appinfo>Ovidentia</xs:appinfo>
    </xs:annotation>
    <xs:element name="theme_sw_wysiwyg">
        <xs:annotation>
            <xs:documentation>WYSIWYG</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="titre">
                    <xs:annotation>
                        <xs:documentation>Titre</xs:documentation>
                    </xs:annotation>
                    <xs:simpleType>
                        <xs:restriction base="xs:normalizedString">
                            <xs:maxLength value="255"/>
                            <xs:minLength value="0"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>   
 
                <xs:element name="borderwysiwyg">  		
					<xs:annotation>
						<xs:documentation>Bordures</xs:documentation>
					</xs:annotation>										
				    <xs:simpleType>
				      <xs:restriction base="xs:string">
				        <xs:enumeration value="Avec bordure"/>
				        <xs:enumeration value="Sans bordure"/>
				      </xs:restriction>
				    </xs:simpleType>
				</xs:element>                             
 
                <xs:element name="contenu" type="html" minOccurs="0">
                    <xs:annotation>
                        <xs:documentation>Contenu</xs:documentation>
                    </xs:annotation>
                </xs:element>
 
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>


Lorsque nous ajouterons un portlet Publication, un fenêtre nous proposera l'ajout de la structure Wysiwyg

vignette

Version éditeur de plan de site

En passant par l’éditeur, nous observons quelques différences pour le conteneur publication. Le nom de la structure devra être renseignée et afin de cibler la publication, nous pouvons utiliser la fonction <OFGetPublicationId>. le ciblage se fera à l'aide l'attribut node. L'option all="1" récupère toutes les publications à partir de celle-ci, l'option all="0" récupère uniquement la publication.

<OFPutVar name="babSiteName">
<OFPutVar name="babSkin">
<OFGetPublicationId node="smed_5788d957d3665" saveas="PublicationIds" all="1">
<!-- all="0" (par défaut) affichera seulement la publication  -->
<!-- all="1" affichera la publication et toutes les publications enfants  -->
 
<OCPublication structure="theme_sw_wysiwyg" publication="<OVPublicationIds>" root>
	<span class="publication-dynamicrecord-<OVPublicationStructure>-<OVPublicationId>"></span>
 
	<div class="row">
		<div class="col-md-12 col-sm-12">
			<div class="title-block clearfix">
			    <h3 class="h3-body-title"><OVPublicationTitre></h3>
			    <OCIfNotEqual expr1="<OVPublicationBorderwysiwyg>" expr2="Sans bordure">
			    	<div class="title-seperator"></div>
			    </OCIfNotEqual>
			</div>                
			<OVPublicationContenu>
		</div>
	</div>
</OCPublication root>


Dans l'éditeur de plan de site, il est important de gérer les droits sur la publication, il ne sera pas possible sinon d'ajouter un sous noeud de type "Wysiwyg". En effet,

vignette