Publication structurée
Containers OVML
OCPublication
Liste des publications
<source lang="ovml"> <OCPublication [node=""] [structure="" [publication=""]] [filter=""] [limit=""] [order=""] [orderby=""]>
<OVPublicationId>
<OVPublication...>
</OCPublication> </source>
Paramètres
- node
- Id du noeud dans le plan du site. Si
noden'est pas renseigné,structuredevra être renseigné
- structure
- nom de la structure de donnés, si
structuren'est pas renseigné,nodedevra ê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 à l'aide d'une seule structure de données).
- Publication Caroussel
-image 1 -image 2
<source lang="xml"> <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> </source>
- 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 OVTitle dans l'ovml.
|
Fonctions OVML
OFDownloadUrl
Créer une url de téléchargement.
<source lang="ovml"> <OFDownloadUrl path="localPath" permanent="1|0" saveas=""> </source>
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
<source lang="ovml"> <OFGetPublicationId [node=""] [saveas=""] [all="0"]> </source>
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
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 Porlets (à 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.
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>.
<source lang= "xml"> <OFPutVar name="babSiteName"> <OFPutVar name="babSkin">
<OCPublication structure="<OVStructure>" publication="<OVPublication>" root> <span class="publication-dynamicrecord-<OVPublicationStructure>-<OVPublicationId>"></span>
<OVPublicationTitre>
<OCIfNotEqual expr1="<OVPublicationBorderwysiwyg>" expr2="Sans bordure">
</OCIfNotEqual>
<OVPublicationContenu>
</OCPublication root>
</source>
Ci-dessous le fichier 'theme_sw_wysiwyg.xsd' intégrant la structure XSD de la publication de type Wysiwyg.
<source lang="xml"> <?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>
</source>
Lorsque nous ajouterons un portlet Publication, un fenêtre nous proposera l'ajout de la structure Wysiwyg
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.
<source lang="xml">
<OFPutVar name="babSiteName"> <OFPutVar name="babSkin"> <OFGetPublicationId node="smed_5788d957d3665" saveas="PublicationIds" all="1">
<OCPublication structure="theme_sw_wysiwyg" publication="<OVPublicationIds>" root> <span class="publication-dynamicrecord-<OVPublicationStructure>-<OVPublicationId>"></span>
<OVPublicationTitre>
<OCIfNotEqual expr1="<OVPublicationBorderwysiwyg>" expr2="Sans bordure">
</OCIfNotEqual>
<OVPublicationContenu>
</OCPublication root>
</source>
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,