Publication structurée : Différence entre versions
(→Mise en place de la structure des dossiers dans le skin) |
(→Types de données) |
||
| (84 révisions intermédiaires par 3 utilisateurs non affichées) | |||
| Ligne 25 : | Ligne 25 : | ||
; path ''(optionnel)'' | ; path ''(optionnel)'' | ||
| − | : requête XPath à utiliser pour récupérer la structure, la requête doit retourner un noeud de type <code><element name="nom de la structure"></code>. Exemple de requête pour que les publications affichées soient les sous-publications définies sous "slide" dans la structure : <code>.//xs:element[@name='slide']</code>. Par défaut, le container va utiliser l'élément à la racine. | + | : requête XPath à utiliser pour récupérer la structure, la requête doit retourner un noeud de type <code><element name="nom de la structure"></code>. Exemple de requête XPath pour que les publications affichées, soient les sous-publications définies sous "slide" dans la structure XSD : <code>.//xs:element[@name='slide']</code>. 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). | ||
| + | |||
| + | |||
| + | <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)'' | ; 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. <code>type=Courrier,deleted=0</code>. Les noms de champ à utiliser sont ceux de la structure. | + | : 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. <code>type=Courrier,deleted=0</code>. Les noms de champ à utiliser sont ceux de la structure. Voir exemple de filtre ci-dessus. |
; limit ''(optionnel)'' | ; 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)'' | ; order ''(optionnel)'' | ||
| Ligne 44 : | Ligne 58 : | ||
! Variable | ! Variable | ||
! Valeur | ! Valeur | ||
| + | |- | ||
| + | | OVPublicationId | ||
| + | | Retourne l'Id de la publication | ||
| + | |- | ||
|- | |- | ||
| OVPublicationSitemapNodeId | | OVPublicationSitemapNodeId | ||
| Ligne 61 : | Ligne 79 : | ||
|- | |- | ||
| ... Autant de variables que de champs dans la structure | | ... Autant de variables que de champs dans la structure | ||
| − | | Il faut utiliser une majuscule pour le premier caractère, example: <code>title</code> dans le fichier xsd deviens <code> | + | | Il faut utiliser une majuscule pour le premier caractère, example: <code>title</code> dans le fichier xsd deviens <code>OVPublicationTitle</code> dans l'ovml. |
|} | |} | ||
| Ligne 92 : | Ligne 110 : | ||
Ancien nom de la fonction: <code>OFPublicationNode</code> | Ancien nom de la fonction: <code>OFPublicationNode</code> | ||
| + | |||
| + | Attention, la fonction <code>OFPublicationNode</code> n'existe plus dans les versions du module Publication supérieures à 0.2.13. | ||
<source lang="ovml"> | <source lang="ovml"> | ||
| Ligne 110 : | Ligne 130 : | ||
: Enregistrer le résultat dans une variable ovml | : 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. | ||
| + | |||
| + | |||
| + | {| class="prettytable" | ||
| + | ! 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 | ||
| + | | <source lang="xml"> | ||
| + | <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> | ||
| + | </source> | ||
| + | |- | ||
| + | | html | ||
| + | | Un éditeur WYSIWYG. | ||
| + | Déclaration dans datatypes.xsd : | ||
| + | <source lang="xml"> | ||
| + | <xsd:simpleType name="html"> | ||
| + | <xsd:restriction base="xsd:string"/> | ||
| + | </xsd:simpleType> | ||
| + | </source> | ||
| + | | <source lang="xml"> | ||
| + | <xs:element name="NomDeLaVariable" type="html"> | ||
| + | <xs:annotation> | ||
| + | <xs:documentation>Libellé du champ</xs:documentation> | ||
| + | <!-- Description optionnelle du champ --> | ||
| + | </xs:annotation> | ||
| + | </xs:element> | ||
| + | </source> | ||
| + | |- | ||
| + | | string | ||
| + | | Un champs de texte multilignes. | ||
| + | | <source lang="xml"> | ||
| + | <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> | ||
| + | </source> | ||
| + | |- | ||
| + | | dateTime | ||
| + | | Un champs permettant la saisie d'une date et d'un horaire. | ||
| + | Compatible avec la variable [http://wiki.ovidentia.org/index.php/R%C3%A9f%C3%A9rence_OvML#date date]. | ||
| + | <source lang="ovml"> | ||
| + | <OVPublicationNomdelavariable date="%d %j %m %Y %H %i"> | ||
| + | </source> | ||
| + | | <source lang="xml"> | ||
| + | <xs:element name="NomDeLaVariable" type="xs:dateTime"> | ||
| + | <xs:annotation> | ||
| + | <xs:documentation>Libellé du champ</xs:documentation> | ||
| + | <!-- Description optionnelle du champ --> | ||
| + | </xs:annotation> | ||
| + | </xs:element> | ||
| + | </source> | ||
| + | |- | ||
| + | | date | ||
| + | | Un champs permettant la saisie d'une date. | ||
| + | Compatible avec la variable [http://wiki.ovidentia.org/index.php/R%C3%A9f%C3%A9rence_OvML#date date]. | ||
| + | <source lang="ovml"> | ||
| + | <OVPublicationNomdelavariable date="%d %j %m %Y"> | ||
| + | </source> | ||
| + | | <source lang="xml"> | ||
| + | <xs:element name="NomDeLaVariable" type="xs:date"> | ||
| + | <xs:annotation> | ||
| + | <xs:documentation>Libellé du champ</xs:documentation> | ||
| + | <!-- Description optionnelle du champ --> | ||
| + | </xs:annotation> | ||
| + | </xs:element> | ||
| + | </source> | ||
| + | |- | ||
| + | | time | ||
| + | | Un champs permettant la saisie d'un horaire. | ||
| + | | <source lang="xml"> | ||
| + | <xs:element name="NomDeLaVariable" type="xs:time"> | ||
| + | <xs:annotation> | ||
| + | <xs:documentation>Libellé du champ</xs:documentation> | ||
| + | <!-- Description optionnelle du champ --> | ||
| + | </xs:annotation> | ||
| + | </xs:element> | ||
| + | </source> | ||
| + | |- | ||
| + | | int | ||
| + | | Un champs permettant la saisie d'un nombre entier | ||
| + | entre -2147483648 et 2147483647. | ||
| + | | <source lang="xml"> | ||
| + | <xs:element name="NomDeLaVariable" type="xs:int"> | ||
| + | <xs:annotation> | ||
| + | <xs:documentation>Libellé du champ</xs:documentation> | ||
| + | <!-- Description optionnelle du champ --> | ||
| + | </xs:annotation> | ||
| + | </xs:element> | ||
| + | </source> | ||
| + | |- | ||
| + | | float | ||
| + | | Un champs permettant la saisie d'un nombre à virgule. La restriction <code>fractionDigits</code> permet de définir le nombre de chiffres après la vigule. | ||
| + | | <source lang="xml"> | ||
| + | <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> | ||
| + | </source> | ||
| + | |- | ||
| + | | anyURI | ||
| + | | Un champs permettant la saisie d'une URL. | ||
| + | | <source lang="xml"> | ||
| + | <xs:element name="NomDeLaVariable" type="xs:anyURI"> | ||
| + | <xs:annotation> | ||
| + | <xs:documentation>Libellé du champ</xs:documentation> | ||
| + | <!-- Description optionnelle du champ --> | ||
| + | </xs:annotation> | ||
| + | </xs:element> | ||
| + | </source> | ||
| + | |- | ||
| + | | babfile | ||
| + | | Un champs permettant l'import d'un fichier. | ||
| + | Déclaration dans datatypes.xsd : | ||
| + | <source lang="xml"> | ||
| + | <xsd:simpleType name="babfile"> | ||
| + | <xsd:restriction base="xsd:anyURI"/> | ||
| + | </xsd:simpleType> | ||
| + | </source> | ||
| + | | <source lang="xml"> | ||
| + | <xs:element name="NomDeLaVariable" type="babfile"> | ||
| + | <xs:annotation> | ||
| + | <xs:documentation>Libellé du champ</xs:documentation> | ||
| + | <!-- Description optionnelle du champ --> | ||
| + | </xs:annotation> | ||
| + | </xs:element> | ||
| + | </source> | ||
| + | |- | ||
| + | | babimage | ||
| + | | Un champs permettant l'import d'une image (.gif, .jpeg, .jpg ou .png). | ||
| + | Nécessite l'utilisation de la fonction | ||
| + | [http://wiki.ovidentia.org/index.php/R%C3%A9f%C3%A9rence_OvML#OFThumbnail OFThumbnail] ou [http://wiki.ovidentia.org/index.php/R%C3%A9f%C3%A9rence_OvML#OFImg OFImg] | ||
| + | |||
| + | Déclaration dans datatypes.xsd : | ||
| + | <source lang="xml"> | ||
| + | <xsd:simpleType name="babimage"> | ||
| + | <xsd:restriction base="xsd:anyURI"/> | ||
| + | </xsd:simpleType> | ||
| + | </source> | ||
| + | | <source lang="xml"> | ||
| + | <xs:element name="NomDeLaVariable" type="babimage"> | ||
| + | <xs:annotation> | ||
| + | <xs:documentation>Libellé du champ</xs:documentation> | ||
| + | <!-- Description optionnelle du champ --> | ||
| + | </xs:annotation> | ||
| + | </xs:element> | ||
| + | </source> | ||
| + | |- | ||
| + | | 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 : | ||
| + | <source lang="xml"> | ||
| + | <xsd:simpleType name="babsitemap"> | ||
| + | <xsd:restriction base="xsd:string"/> | ||
| + | </xsd:simpleType> | ||
| + | </source> | ||
| + | | <source lang="xml"> | ||
| + | <xs:element name="NomDeLaVariable" type="babsitemap"> | ||
| + | <xs:annotation> | ||
| + | <xs:documentation>Libellé du champ</xs:documentation> | ||
| + | <!-- Description optionnelle du champ --> | ||
| + | </xs:annotation> | ||
| + | </xs:element> | ||
| + | </source> | ||
| + | |- | ||
| + | | boolean | ||
| + | | Un champs permettant la saisie d'un booléen. | ||
| + | (0 ou 1) | ||
| + | | <source lang="xml"> | ||
| + | <xs:element name="NomDeLaVariable" type="xs:boolean"> | ||
| + | <xs:annotation> | ||
| + | <xs:documentation>Libellé du champ</xs:documentation> | ||
| + | <!-- Description optionnelle du champ --> | ||
| + | </xs:annotation> | ||
| + | </xs:element> | ||
| + | </source> | ||
| + | |- | ||
| + | | 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. | ||
| + | <source lang="xml"> | ||
| + | <xs:enumeration value=""/> | ||
| + | </source> | ||
| + | Ajouter un commentaire à la fin de la ligne d'énumération | ||
| + | permet de définir le libellé de l'option. | ||
| + | | <source lang="xml"> | ||
| + | <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> | ||
| + | </source> | ||
| + | |} | ||
== Exemple d'intégration des structures == | == Exemple d'intégration des structures == | ||
| Ligne 116 : | Ligne 388 : | ||
=== Les pré-requis === | === 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 l'installation | + | 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 Publication (à jour) | ||
| + | |||
- Module Editlinks (à jour) => Attribuer les droits nécessaires (Administrateurs ou utilisateurs enregistrés) | - Module Editlinks (à jour) => Attribuer les droits nécessaires (Administrateurs ou utilisateurs enregistrés) | ||
| − | - Module | + | |
| + | - Module Portlets (à jour) | ||
| + | |||
- Module Widgets | - Module Widgets | ||
| + | |||
- Module LibOrm | - Module LibOrm | ||
=== Mise en place de la structure des dossiers dans le skin === | === 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 | + | 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. | ||
| + | |||
| + | [[Image:Capture.png|vignette|400px]] | ||
| + | |||
| + | |||
| + | ==== 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> | ||
| + | |||
| + | <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> | ||
| + | |||
| + | </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 | ||
| + | |||
| + | [[Image:Portlet-pub-2.png |vignette|400px]] | ||
| + | |||
| + | ==== 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"> | ||
| + | <!-- 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> | ||
| + | |||
| + | </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, | |
| − | + | [[Image:Captureplande-site-niv1.jpg |vignette|400px]] | |
| − | + | ||
Version actuelle en date du 23 août 2016 à 16:43
Sommaire
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 (images) à l'aide d'une seule structure de données).
<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 OVPublicationTitle 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
Attention, la fonction OFPublicationNode n'existe plus dans les versions du module Publication supérieures à 0.2.13.
<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
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
- structures
- theme
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 :
|
<source lang="xml">
<xs:element name="NomDeLaVariable"> <xs:annotation>
<xs:documentation>Libellé du champ</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:normalizedString">
<xs:maxLength value="255" />
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
</xs:element> </source> |
| html | Un éditeur WYSIWYG.
Déclaration dans datatypes.xsd : <source lang="xml"> <xsd:simpleType name="html"> <xsd:restriction base="xsd:string"/> </xsd:simpleType> </source> |
<source lang="xml">
<xs:element name="NomDeLaVariable" type="html"> <xs:annotation>
<xs:documentation>Libellé du champ</xs:documentation>
</xs:annotation>
</xs:element> </source> |
| string | Un champs de texte multilignes. | <source lang="xml">
<xs:element name="NomDeLaVariable"> <xs:annotation>
<xs:documentation>Libellé du champ</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="0" />
</xs:restriction>
</xs:simpleType>
</xs:element> </source> |
| dateTime | Un champs permettant la saisie d'une date et d'un horaire.
Compatible avec la variable date. <source lang="ovml"> <OVPublicationNomdelavariable date="%d %j %m %Y %H %i"> </source> |
<source lang="xml">
<xs:element name="NomDeLaVariable" type="xs:dateTime"> <xs:annotation>
<xs:documentation>Libellé du champ</xs:documentation>
</xs:annotation>
</xs:element> </source> |
| date | Un champs permettant la saisie d'une date.
Compatible avec la variable date. <source lang="ovml"> <OVPublicationNomdelavariable date="%d %j %m %Y"> </source> |
<source lang="xml">
<xs:element name="NomDeLaVariable" type="xs:date"> <xs:annotation>
<xs:documentation>Libellé du champ</xs:documentation>
</xs:annotation>
</xs:element> </source> |
| time | Un champs permettant la saisie d'un horaire. | <source lang="xml">
<xs:element name="NomDeLaVariable" type="xs:time"> <xs:annotation>
<xs:documentation>Libellé du champ</xs:documentation>
</xs:annotation>
</xs:element> </source> |
| int | Un champs permettant la saisie d'un nombre entier
entre -2147483648 et 2147483647. |
<source lang="xml">
<xs:element name="NomDeLaVariable" type="xs:int"> <xs:annotation>
<xs:documentation>Libellé du champ</xs:documentation>
</xs:annotation>
</xs:element> </source> |
| 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.
|
<source lang="xml">
<xs:element name="NomDeLaVariable"> <xs:annotation>
<xs:documentation>Libellé du champ</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:float">
<xs:fractionDigits value="2" />
</xs:restriction>
</xs:simpleType>
</xs:element> </source> |
| anyURI | Un champs permettant la saisie d'une URL. | <source lang="xml">
<xs:element name="NomDeLaVariable" type="xs:anyURI"> <xs:annotation>
<xs:documentation>Libellé du champ</xs:documentation>
</xs:annotation>
</xs:element> </source> |
| babfile | Un champs permettant l'import d'un fichier.
Déclaration dans datatypes.xsd : <source lang="xml"> <xsd:simpleType name="babfile"> <xsd:restriction base="xsd:anyURI"/> </xsd:simpleType> </source> |
<source lang="xml">
<xs:element name="NomDeLaVariable" type="babfile"> <xs:annotation>
<xs:documentation>Libellé du champ</xs:documentation>
</xs:annotation>
</xs:element> </source> |
| 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 : <source lang="xml"> <xsd:simpleType name="babimage"> <xsd:restriction base="xsd:anyURI"/> </xsd:simpleType> </source> |
<source lang="xml">
<xs:element name="NomDeLaVariable" type="babimage"> <xs:annotation>
<xs:documentation>Libellé du champ</xs:documentation>
</xs:annotation>
</xs:element> </source> |
| 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 : <source lang="xml"> <xsd:simpleType name="babsitemap"> <xsd:restriction base="xsd:string"/> </xsd:simpleType> </source> |
<source lang="xml">
<xs:element name="NomDeLaVariable" type="babsitemap"> <xs:annotation>
<xs:documentation>Libellé du champ</xs:documentation>
</xs:annotation>
</xs:element> </source> |
| boolean | Un champs permettant la saisie d'un booléen.
(0 ou 1) |
<source lang="xml">
<xs:element name="NomDeLaVariable" type="xs:boolean"> <xs:annotation>
<xs:documentation>Libellé du champ</xs:documentation>
</xs:annotation>
</xs:element> </source> |
| 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. <source lang="xml"> <xs:enumeration value=""/> </source> Ajouter un commentaire à la fin de la ligne d'énumération permet de définir le libellé de l'option. |
<source lang="xml">
<xs:element name="NomDeLaVariable"> <xs:annotation>
<xs:documentation>Libellé du champ</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Option 1"/>
<xs:enumeration value="Option 2"/>
...
<xs:enumeration value="Option n"/>
</xs:restriction>
</xs:simpleType>
</xs:element> </source> |
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.
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,