Créer son skin : Différence entre versions

De OviWiki
Aller à : navigation, rechercher
(Nouvelle page : = Présentation = == Description == [[Image:]] Un skin est le terme utilisé dans OVIDENTIA pour désigner un thème graphique. On dit d'un skin qu'il est l'habillage d'un site (sk...)
 
(Rendre son skin compatible avec la réécriture d'URL)
 
(18 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
= Présentation =
+
[[Catégorie:Développement de skins]]
== Description ==
+
Les skins sont des thèmes graphiques pouvant être appliqués aux sites créés avec Ovidentia. Ils sont personnalisables afin de pouvoir correspondre au mieux à vos attentes pour l'apparence de vos pages et de leurs structures.
[[Image:]]
+
  
 +
Un skin est principalement constitué de fichiers HTML, OvML, JavaScript et d'images.
  
Un skin est le terme utilisé dans OVIDENTIA pour désigner un thème graphique. On dit d'un skin qu'il est l'habillage d'un site (skin = peau en anglais), c'est à dire une couche graphique qui n'influe pas sur le traitement des données. Il rassemble tous les éléments graphiques et les règles d'affichage : images, mises en forme (fichiers CSS), templates, modèles d’affichage...
+
= Gestion =
  
 +
Il est possible pour un site de posséder plusieurs skins administrables via l'interface d'Ovidentia.
  
Dans OVIDENTIA, un skin correspond à un répertoire présent sur le serveur Web dans le répertoire skins à la racine du site :
+
== Administrateur ==
  
<center>[[Image:]]</center>
+
=== Installer un skin ===
  
<center>racine d'OVIDENTIA</center>
+
Pour installer un skin, rendez-vous dans le menu ''Administration > Ajouter/Supprimer des programmes > Skins'' puis cliquez sur ''Charger un nouveau skin''.
 +
Sélectionnez le fichier au format '''.zip''' contenant le skin puis cliquez sur ''Déposer''.
  
 +
Si l'opération s'est bien déroulée, le skin est désormais utilisable sur le site web.
  
OVIDENTIA propose généralement 2 skins dans son installation : un skin nommé 'ovidentia' et un skin nommé 'ovidentia_sw'. Il est conseillé de prendre pour base le skin 'ovidentia_sw' pour une personnalisation.
+
=== Liste des skins installés ===
  
== Structure d'un skin ==
+
Pour accéder à la liste des skins installés, rendez-vous dans le menu ''Administration > Ajouter/Supprimer des programmes > Skins''.
Afin d'être reconnu comme un skin dans l'administration du site et afin de personnaliser les templates, les pages d'accueil et les styles, un skin doit contenir les répertoires suivants :
+
  
 +
=== Skin appliqué au site ===
  
* images : par convention, ce répertoire rassemble toutes les images (bandeau, puces...)
+
==== Skin non modularisé ====
  
* ovml : rassemble tous les fichiers du langage OVML (private.html, public.html...)
+
Afin de modifier le skin appliqué au site web, rendez-vous dans le menu ''Administration > Sites'', choisissez le site dont vous souhaitez modifier le skin dans la liste de vos sites puis cliquez sur ''Configuration du site''.
* styles : contient les fichiers css styles (ovidentia.css)
+
Vous pourrez alors, à la ligne '''Skin''', sélectionner celui qui doit être appliqué au site pour les utilisateurs non connectés ou les utilisateurs connectés n'ayant pas modifié le style appliqué au site.
* templates : contient les fichiers templates personnalisés (page.html, sectiontemplate.html...)
+
  
Remarque : seuls les répertoires ovml, styles et templates sont nécessaires au fonctionnement d'un skin, d'autres répertoires peuvent être ajoutés pour séparer les applications flash des librairies javascript, etc...
+
La première liste contient les noms des différents skins disponibles sur le site. La seconde permet de choisir quel fichier CSS doit être utilisé comme feuille de style principale.
  
 +
[[Image:Skin_appliqué_au_site.png|center|Modification du skin appliqué au site]]
  
= Administration des skins dans OVIDENTIA =
+
==== Skin modularisé ====
== Administration ==
+
L'administrateur définit dans la configuration du site (Section Administration/Sites/nom du site/Configuration du site) le skin qui sera utilisé par les utilisateurs anonymes.
+
  
[[Image:]]
+
Si votre skin est un module, il est possible de le sélectionner depuis la liste des modules. Rendez-vous dans le menu ''Administration > Ajouter / Supprimer des programmes > Skins'' puis cliquez sur le lien [[Image:Star_x_orange.gif|top|Etoile]] <strong style="text-decoration:underline">Utiliser ce thème</strong> de la ligne correspondant au skin que vous souhaitez appliquer.
  
<center>Configuration du site</center>
+
[[Image:Skin_avec_icone.png|center|Skin modularisé]]
  
 +
'''Attention''', ce lien n'apparaît pas si l'utilisateur sur lequel vous êtes connecté utilise le skin de la ligne concernée. Il vous faut alors changer le [[#Utilisateur|skin de l'utilisateur]], sachant qu'il est préférable de conserver le '''skin du site'''.
  
Les skins présents sur le serveur apparaissent dans la liste déroulante ainsi qu'une liste des styles css associés à chaque skin. En effet, un skin peut proposer plusieurs feuilles css afin de gérer des modifications minimes de couleurs, des tailles de polices différentes...
+
=== Droit de modification de skin aux utilisateurs ===
  
 +
Afin d'autoriser ou d'interdire aux utilisateurs connectés de choisir le skin qu'ils souhaitent appliquer au site web, rendez-vous dans le menu ''Administration > Sites'', choisissez le site dont vous souhaitez modifier le skin dans la liste de vos sites puis cliquez sur ''Options de l'utilisateur''.
 +
Vous pourrez alors, à la ligne '''L'utilisateur peut choisir son skin''', choisir d'autoriser ou non l'utilisateur à choisir le skin qu'il souhaite voir appliqué au site web lorsqu'il est connecté.
  
Remarque :
+
La modification du skin effectuée par un utilisateur n'est visible que par celui-ci quand il est connecté.
  
Cette configuration n'a d'effet que sur les pages en mode anonyme. En mode authentifié, chaque utilisateur a la possibilité de choisir son skin depuis ces options personnelles (voir ci-dessous). Pour supprimer cette option et ainsi empêcher le choix du skin par les utilisateurs, l'administrateur peut désactiver l'option 'L'utilisateur peut modifier son skin' dans la configuration du site (Section Administration/sites/nom du site/Options de l'utilisateur).
+
[[Image:Droit_de_modification_de_skin_aux_utilisateurs.png|center]]
  
== Options de l'utilisateur ==
+
== Utilisateur ==
En section Utilisateur, lien Options, l'utilisateur a la possibilité de définir le skin qui sera utilisé pendant sa navigation sur le site en mode authentifié. Cette possibilité est rendue active par l'administrateur.
+
  
= Créer son skin =
+
La modification du style pour un utilisateur n'est possible que si l'administrateur l'a permis.
Pour créer son propre skin, il est conseillé de prendre comme base le skin fourni dans l'installation d'OVIDENTIA 'ovidentia_sw'. Partant de cette base, il suffit dans un premier temps de le renommer et de le placer au même niveau qu'ovidentia_sw sur le serveur Web pour qu'il soit reconnu dans l'administration d'OVIDENTIA.
+
  
== Conseils ==
+
Afin de modifier le skin appliqué au site web lorsque vous êtes connecté, rendez-vous dans le menu ''Utilisateur > Options''. Vous pourrez alors, à la section '''Mise à jour du skin''', sélectionner celui qui doit être appliqué au site lorsque vous êtes connecté. Cliquez sur ''Mise à jour du skin'' afin de valider la modification.
* OVIDENTIA utilise la norme XHTML et le doctype 'XHTML 1.0 Transitional' pour toutes ces pages Web. Veuillez à respecter cette norme ; des outils peuvent valider vos pages (ex. : http://validator.w3.org).
+
  
* Veuillez à ne mettre aucune référence en absolue dans vos pages Web : le nom de votre skin ou l'adresse Web de votre site ne doit pas figurer dans votre code. Dans le cas contraire, la modification future du nom de domaine de votre site ou du nom du skin causerait des problèmes.Exemple avec une image :<nowiki>Syntaxe correcte : <img src="skins/{ babSkin }/images/bandeau.jpg" alt="" title=""></nowiki><nowiki>Syntaxe incorrecte : <img src="skins/monskin/images/bandeau.jpg" alt="" title=""></nowiki>Ici, la variable globale babSkin est utilisée pour remonter le nom du skin courant dans un fichier template.
+
La modification du skin effectuée n'est visible que par vous quand vous êtes connecté.
* Afin de rester compatible avec les dernières évolutions d'OVIDENTIA, les fichiers templates dits 'non modifiables' ne doivent pas être modifiés. Voir la liste des fichiers templates en annexe pour plus de détails.
+
  
== Fonctionnement dans le noyau ==
+
[[Image:Utilisateur.png|center|Modification du skin pour l'utilisateur connecté]]
Le noyau d'OVIDENTIA contient un skin de base. Ce skin se nomme 'ovidentia' et rassemble la feuille de styles principale et les fichiers templates gérant toutes les interfaces.
+
  
 +
= Créer un skin =
  
<center>[[Image:]]skin de base dans le noyau</center>
+
== Structure ==
  
 +
Les skins disponibles sur votre site internet sont stockés dans le dossier '''skins''', enfant direct du dossier contenant votre site créé avec Ovidentia.
  
Pour que les skins personnalisés ne soient pas supprimés après chaque mise à jour du noyau OVIDENTIA, ces skins sont placés à la racine du site.
+
'''Attention''' à ne pas confondre le dossier '''skins''' à la racine de votre site avec le dossier '''ovidentia > skins'''. Ce dernier contient le skin de base d'Ovidentia. Vos skins personnalisés sont placés à la racine du site pour ne pas être supprimés à chaque mise à jour du noyau.
  
Remarque : faites attention à ne pas confondre les répertoires 'skins' à la racine du site et dans le noyau.
+
Les skins sont composés de trois sous-dossiers '''obligatoires''' :
 +
*'''ovml''' : ce dossier contient les fichiers OvML (Ovidentia Markup Language) permettant la génération dynamique de contenu. Il contient également parfois les styles spécifiques des "modules" OvML afin de pouvoir être exportés plus facilement. Ces styles peuvent également être indiqués directement dans le fichier OvML.
 +
*'''styles''' : ce dossier contient les feuilles de style de votre site web.
 +
*'''templates''' : ce dossier contient les templates personnalisés.
  
== Le moteur de templates ==
+
D'autres sous-dossiers '''facultatifs''' peuvent également apparaître dans le skin comme les dossiers :
OVIDENTIA utilise un moteur de templates pour gérer toutes ses interfaces. Son principal avantage est de séparer le traitement des données (codes PHP, requêtes SQL...) de leurs visualisations (balises html, styles css...). Ainsi un écran d'OVIDENTIA correspond généralement à un fichier template. Un mini-langage de programmation permet de faire la liaison entre les fichiers PHP et les fichiers HTML.
+
*'''images''' : ce dossier contient les images nécessaires à la personnalisation du skin (et non pas les images de contenu).
 +
*'''scripts''' : ce dossier contient les fichiers JavaScript.
  
== Le langage OVML ==
+
L'arborescence de votre skin ressemblera donc généralement à la suivante :
Le langage OVML est propre à OVIDENTIA. Il est rarement utilisé dans le noyau car il est destiné au webmaster afin de lui permettre de dynamiser ses pages. Le noyau fournit une librairie complète sur le contenu d'OVIDENTIA (articles, faqs, forums, fichiers...). Ainsi les pages d'accueil peuvent être dynamiques en affichant par OVML la liste des 10 derniers articles publiés.
+
  
== Méthode de personnalisation d'un skin ==
+
[[Image:Arborescence.png|center|Arborescence d'un skin]]
Le webmaster a la possibilité de modifier les styles css et les fichiers templates (interfaces). Sans personnalisations, OVIDENTIA utilise le skin de base contenu dans son noyau.
+
  
Personnaliser une interface d'OVIDENTIA revient donc à modifier le fichier template concerné. Afin qu'aucune modification ne soit perdue après mise à jour du noyau, le fichier template du noyau doit être copié dans le skin présent à la racine du site. Avant chaque affichage, OVIDENTIA vérifie donc si le fichier template concerné existe dans le skin choisi par l'utilisateur dans quel cas ce fichier sera utilisé comme affichage. Dans le cas contraire, OVIDENTIA utilisera le fichier template présent dans le noyau.
+
== Personnalisation ==
  
* Modifier la feuille de styles :
+
Partir d'un thème existant semble être un bon moyen de débuter la création d'un nouveau skin. Cela permet de poser une structure proche de celle que l'on souhaite en minimisant le nombre de modifications à effectuer.
  
Il est conseillé de prendre comme base la feuille de styles 'ovidentia.css' du skin 'ovidentia_sw' car elle contient les styles les plus couramment utilisés.
+
=== Templates ===
  
La feuille de styles CSS doit être placée dans le répertoire 'styles' de votre skin.
+
Les fichiers contenus dans le dossier template sont des gabarits pour les différentes pages du site. Ils permettent de créer la structure des pages de votre site internet.
  
Remarque :
+
Leur intérêt réside dans la séparation qu'ils permettent entre le traitement des données effectué par PHP et leur affichage.
  
- Vous pouvez imbriquer des feuilles de styles. Cependant, évitez de placer tous les fichiers css dans le répertoire 'styles' de votre skin car dans les interfaces d'administration, OVIDENTIA liste et propose tous les fichiers css de ce répertoire.
+
Un mini-langage de programmation a été créé pour ces templates permettant de dynamiser votre site.
  
- Évitez d'appliquer des styles trop généraux sur les éléments HTML afin de ne pas perturber l'affichage des interfaces.
+
==== Patrons d'affichage ====
  
* Modifier un fichier template :
+
Les patrons d'affichage permettent de créer plusieurs apparences pour une même page.
  
Pour des raisons logiques d'évolution du portail, il n'est pas possible de modifier toutes les interfaces d'OVIDENTIA (fichiers templates). Ainsi, seuls quelques fichiers templates sont modifiables par le webmaster (voir la liste en annexe). La structure de ces fichiers ne change pas au fur et à mesure des versions d'OVIDENTIA ce qui garantit au webmaster que son skin restera compatible avec les futures versions d'OVIDENTIA.
+
Les patrons d'affichage se font sous forme de commentaires HTML.
  
Pour exemple, le fichier template sectiontemplate.html gère l'affichage des sections. Si vous désirez modifier l'apparence des sections, vous pouvez simplement modifier la feuille de styles du skin. Si vous avez besoin de modifier le balisage HTML des sections, procédez aux opérations suivantes :
+
La création d'un patron d'affichage se fait de la manière suivante :
  
* copier le fichier sectiontemplate.html du noyau (racine d'Ovidentia/noyau/skins/ovidentia/templates/) dans votre skin (racine d'Ovidentia/skins/votreskin/templates)
+
<source lang="html4strict">
* modifiez le fichier sectiontemplate.html de votre skin
+
<!--#begin nom_de_mon_patron_d_affichage -->
 +
    Votre code
 +
<!--#end nom_de_mon_patron_d_affichage -->
 +
</source>
  
= Le moteur de templates en détails =
+
'''Attention''', il ne faut pas oublier de ne pas mettre d'espace avant le dièse (#) et d'en mettre un après le nom de la variable.
== Syntaxe ==
+
Afin de faire l'interface entre le code PHP et l'interface d'une page OVIDENTIA, un mini-language de programmation existe dans le moteur de templates. Ainsi, il est possible dans un fichier template d'effectuer des tests de comparaisons ou d'égalité.
+
  
Exemple :
+
Certains templates nécessitent deux patrons d'affichage car ils gèrent deux écrans différents. Par exemple, le template ''topicsdisplay.html'' contient deux patrons par défaut : un pour lister les différents articles du thème et un pour afficher un article en particulier.
  
<nowiki><!--#if BAB_SESS_LOGGED --></nowiki>Vous êtes authentifié<nowiki><!--#else BAB_SESS_LOGGED --></nowiki>Vous n'êtes pas authentifié<nowiki><!--#endif BAB_SESS_LOGGED --></nowiki>
+
<source lang="html4strict">
 +
<!--#begin head_nom_de_mon_patron_d_affichage -->
 +
    Votre code
 +
<!--#end head_nom_de_mon_patron_d_affichage -->
  
Le code précédent permet de tester si l'utilisateur courant est authentifié ou anonyme.
+
<!--#begin body_nom_de_mon_patron_d_affichage -->
 +
    Votre code
 +
<!--#end body_nom_de_mon_patron_d_affichage -->
 +
</source>
  
Voici les syntaxes courantes :
+
[[Liste des templates possédant des patrons d'affichage]]
  
* Affichage d'une variable rendue disponible par PHP : { XXX }Exemple : dans le template topicsdisplay.html, la variable { artid } permet d'afficher l'identifiant d'un article
+
==== Mini-langage de templates ====
* <nowiki>Conditions et comparaisons : <!--#if XX "YY ZZZ" --> où XX est la valeur testée, YY est l'opérateur et ZZZ la valeur de comparaison</nowiki>Exemples :<nowiki><!--#if tg "== login" --></nowiki>Vous êtes sur les pages d'authentification<nowiki><!--#endif tg --></nowiki><nowiki><!--#if nbsections ">= 1" --></nowiki>Vous avez au moins 1 section affichée sur votre page<nowiki><!--#endif nbsections --></nowiki><br/>
+
  
* <nowiki>Lancement d'une fonction : <!--#in mafonction --></nowiki>Cette syntaxe permet d'exécuter une fonction définie en PHP, elle est généralement utilisée pour la génération de listes (tableaux, listes déroulantes...).Exemple :<nowiki><!--#in listevaleurs --></nowiki>{ valeur }<nowiki><!--#endin listevaleurs --></nowiki>
+
Le mini-langage de templates permet de dynamiser le contenu de la page grâce à l'utilisation de variables.
  
Pour plus de détails sur la syntaxe du moteur de templates, veuillez voir la documentation dédiée à la création des modules dans OVIDENTIA (AddonsTutorials).
+
===== Affichage d'une variable =====
  
== Les patrons d'affichage ==
+
Les variables qu'il est possible d'afficher dépendent de la classe qui appelle le template.
Pour modifier l'apparence et la structure des éléments d'OVIDENTIA, il faut modifier le fichier template correspondant. Ainsi, la modification du fichier 'sectiontemplate.html' changera l'apparence de toutes les sections du portail. Si vous désirez proposer plusieurs apparences pour vos éléments, vous pouvez utiliser les patrons d'affichages.
+
  
Les patrons d'affichages existent pour les écrans suivants :
+
Néanmoins, il existe des [[Liste des variables accessibles depuis tous les templates|variables accessibles depuis tous les templates]] :
  
* affichage des sections personnalisées
+
L'affichage d'une variable dans un template se fait de la manière suivante :
* affichage des catégories d'articles
+
* affichage des thèmes d'articles (introductions des articles)
+
* affichage des articles (corps des articles)
+
  
<center>[[Image:]]sélection du patron d'affichage dans une section personnalisée</center>
+
{ variable }
  
Fonctionnement :
+
'''Exemple :'''
  
Pour créer des patrons d'affichage et ainsi présenter un choix d'interfaces à l'administrateur lors de la création de thèmes d'articles, de sections, ..., il est nécessaire d'ajouter ces patrons dans les fichiers templates correspondants. Voir la liste des fichiers templates modifiables en annexe pour connaître le fichier qui accueille les patrons que vous désirez ajouter.
+
{ babSlogan }
  
 +
===== Condition =====
  
Pour exemple, voici l'ajout d'un patron d'affichage pour les sections personnalisées :
+
Les conditions se font sous forme de commentaires HTML.
  
* Le fichier template qui gère l'affichage des sections et qui accueille les patrons d'affichages est 'sectiontemplate.html'. Copiez ce fichier du noyau d'OVIDENTIA (racine d'Ovidentia/ noyau/skins/ovidentia/templates/) dans votre skin (racine d'Ovidentia/skins/votreskin/templates/).
+
La vérification de l'existence d'une variable ou du fait qu'elle soit vide se fait de la manière suivante :
  
* Vous trouverez dans le fichier original l'affichage nommé 'default' compris entre les balises begin et end :
+
<source lang="ovml">
 +
<!--#if variable -->
 +
    Votre code
 +
<!--#endif variable -->
 +
</source>
  
<nowiki><!--#begin default --></nowiki><nowiki>[...]</nowiki><nowiki><!--#end default --></nowiki>
+
'''Attention''', il ne faut pas oublier de ne pas mettre d'espace avant le dièse (#) et d'en mettre un après le nom de la variable.
  
* Dupliquez l'affichage default en prenant soin de le renommer par votre patron d'affichage :
+
Il est également possible de comparer la valeur d'une variable avec une autre variable :
  
<nowiki><!--#begin default --></nowiki><nowiki>[...]</nowiki><nowiki><!--#end default --></nowiki>
+
<source lang="ovml">
 +
<!--#if variable "== variable2" -->
 +
    Votre code
 +
<!--#endif variable -->
 +
</source>
  
<nowiki><!--#begin monpatron --></nowiki><nowiki>[...]</nowiki><nowiki><!--#end monpatron --></nowiki>
+
Les différents opérateurs de comparaison existant sont les suivants :
  
* Effectuez les modifications de structures ou de styles désirées dans le patron. Vous pouvez modifier la structure afin d'afficher systématiquement un logo, supprimer le titre des sections...
+
{|class="prettytable"
* Créer une nouvelle section en tant qu'administrateur sur le portail (lien Sections en section d'Administration) puis sélectionnez le nouveau patron
+
|+ Liste des opérateurs utilisables dans le mini-langage de templates
 +
|-
 +
!Symbole
 +
!Signification
 +
|-
 +
|==||Egal à
 +
|-
 +
|!=||Différent de
 +
|-
 +
|>||Supérieur à
 +
|-
 +
|<||Inférieur à
 +
|-
 +
|>=||Supérieur ou égal à
 +
|-
 +
|<=||Inférieur ou égal à
 +
|}
  
Remarque :
+
De la même manière, il est possible de comparer la valeur d'une variable avec une chaîne de caractères ou un nombre :
  
Pour les patrons d'affichage des thèmes d'articles, il est nécessaire de créer 2 affichages car le fichier template topicsdisplay.html gère 2 écrans (thème d'articles et corps d'un article). Ainsi le fichier contiendra ces codes :
+
<source lang="ovml">
 +
<!--#if variable "== valeur" -->
 +
    Votre code
 +
<!--#endif -->
 +
</source>
  
<nowiki><!--#begin head_default --></nowiki><nowiki><!--#end head_default --></nowiki>
+
Vous pouvez également tester si une variable est vide :
  
<nowiki><!--#begin body_default --></nowiki><nowiki><!--#end body_default --></nowiki>
+
<source lang="ovml">
 +
<!--#if variable "== " -->
 +
    Votre code
 +
<!--#endif variable -->
 +
</source>
  
<nowiki><!--#begin head_monpatron --></nowiki><nowiki><!--#end head_monpatron --></nowiki>
+
Enfin, il est possible de gérer l'inverse d'une condition grâce au mot-clé ''else'' :
 +
<source lang="ovml">
 +
<!--#if condition -->
 +
    Votre code si la condition est validée
 +
<!--#else condition -->
 +
    Votre code si la condition n'est pas validée
 +
<!--#endif condition -->
 +
</source>
  
<nowiki><!--#begin body_monpatron --></nowiki><nowiki><!--#end body_monpatron --></nowiki>
+
'''Exemples :'''
  
 +
<source lang="ovml">
 +
<!--#if BAB_SESS_LOGGED -->
 +
    Bienvenue { BAB_SESS_USER }.
 +
<!--#else BAB_SESS_LOGGED -->
 +
    Bienvenue Invité.
 +
<!--#endif BAB_SESS_LOGGED -->
 +
</source>
  
= Le langage OVML en détails =
+
<source lang="ovml">
== Syntaxe ==
+
<!--#if tg "== " -->
Le langage OVML permet de dynamiser les pages du portail en permettant au webmaster un accès au contenu du portail. Ainsi le webmaster pourra accéder à la liste complète des informations publiées et les restituer afin de donner des points d'entrée à son site.Exemples : affichage de la liste des catégories d'articles dans une section, affichage des derniers articles publiés en pages d'accueil...
+
    Vous êtes sur la page d'accueil.
 +
<!--#endif tg -->
 +
</source>
  
Le langage a une syntaxe proche de l'HTML et du XML par ses balises. Le code doit être placé dans un fichier situé dans le répertoire ovml de votre skin (racine d'Ovidentia/skins/votreskin/ovml/).
+
<source lang="ovml">
 +
<!--#if menuitems "&gt; 0" -->
 +
    Menu :
 +
    <!-- Génération du menu -->
 +
<!--#endif menuitems -->
 +
</source>
  
Il existe plusieurs syntaxes d'appels selon le contexte :
+
===== Boucle =====
  
* Afficher le contenu interprété d'un fichier OVML dans le corps d'OVIDENTIA :index.php?tg=oml&file=monfichier.ovmlindex.php?tg=oml&file=agendas/monfichier.ovml si le fichier est situé dans un sous-répertoire 'agendas' du répertoire ovml de votre skin
+
Les boucles se font sous forme de commentaires HTML.
  
* Afficher le contenu interprété d'un fichier OVML en pleine page : index.php?tg=oml&file=monfichier.ovml&echo=1
+
Dans certains templates, il est possible d'utiliser des boucles, mais pas dans tous.
* Afficher le contenu interprété d'un fichier OVML par l'éditeur wysiwyg (par exemple, dans une section ou dans un article) :$OVML(monfichier.ovml)$OVML(agendas/monfichier.ovml) si le fichier est situé dans un sous-répertoire 'agendas' du répertoire ovml de votre skin
+
* Afficher le contenu interprété d'un fichier OVML depuis un fichier template (par exemple dans page.html) :{ $OVML(monfichier.ovml) }{ $OVML(agendas/monfichier.ovml) } si le fichier est situé dans un sous-répertoire 'agendas' du répertoire ovml de votre skin
+
  
Voici les syntaxes courantes :
+
Les boucles correspondent à des fonctions appelées jusqu'à ce que celles-ci ne renvoient plus rien. Il n'est actuellement pas possible de connaître la liste des fonctions utilisables dans chaque template via une documentation, mais il est possible de voir les fonctions utilisées dans les templates déjà existants.
  
* <nowiki>Création d'une variable : <OFPutVar name="compteur" value="0"></nowiki><nowiki>Après la déclaration de la variable 'compteur', sa valeur peut s'afficher avec la syntaxe <Ovcompteur></nowiki>
+
====== Utilisation ======
* <nowiki>Tests de comparaisons : <OCIfEqual>, <OCIfNotEqual>, <OCIfGreaterThan>...</nowiki>Exemples :<nowiki><OCIfEqual expr1="<OVBAB_SESS_USERID>" expr2="6"></nowiki> Vous êtes l'utilisateur ayant l'identifiant 6<nowiki></OCIfEqual></nowiki>
+
* <nowiki>Affichage d'une variable globale : <OFPutVar> permet de définir la variable afin de récupérer sa valeur</nowiki>Exemple :<nowiki><OFPutVar name="babSkin"></nowiki><nowiki><img src="skins/<OVbabSkin>/images/bandeau.jpg" alt="Bandeau" title=""></nowiki>
+
  
Pour plus de détails sur la syntaxe et les possibilités du langage, veuillez voir les 2 documentations existantes (ovi-ovml et ovi-ovml utilisation).
+
L'utilisation d'une boucle se fait de la manière suivante :
  
== Pages d'accueil ==
+
<source lang="html4strict">
Les pages d'accueil publique et privée d'OVIDENTIA peuvent être personnalisées par le webmaster grâce au langage OVML. Il existe 2 fonctionnements utilisables pour la gestion des pages d'accueil :
+
<!--#in fonction -->
 +
    Votre code
 +
<!--#endin fonction -->
 +
</source>
  
1) Si vous supprimez les fichiers private.html et public.html de votre skin (racine d'Ovidentia/skins/votreskin/ovml/), OVIDENTIA utilisera le template 'entry.html' qui affichera les articles proposés en pages d'accueil (voir les options des thèmes d'articles pour plus de détails).
+
'''Attention''', il ne faut pas oublier de ne pas mettre d'espace avant le dièse (#) et d'en mettre un après le nom de la fonction.
  
2) Si vous voulez personnaliser les pages d'accueil, vous pouvez utilisez les fichiers 'public.html' (gestion de la page d'accueil publique) et 'private.html' (gestion de la page d'accueil privée) présents dans votre skin (racine d'Ovidentia skins/votreskin/ovml/).
+
Chaque boucle permet l'utilisation de variables particulières.
  
Les 2 fichiers 'private.html' et 'public.html' peuvent contenir des codes html classiques (html, javascript, css...) et ont aussi l'avantage d'y ajouter l'interprétation de codes OVML.
+
'''Exemple :'''
  
Exemple :
+
Dans le template ''adminsection.html'' :
  
Ce code affichera les 5 derniers articles publiés (introduction et corps) en tenant compte des droits d'accès :
+
<source lang="html4strict">
 +
<!-- Listage des liens d'administration fournis par le noyau d'Ovidentia -->
  
<nowiki><OCRecentArticles last="5"></nowiki><nowiki>&nbsp;&nbsp;&nbsp; <p></nowiki><nowiki>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <h2><OVArticleTitle></h2></nowiki><nowiki>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <OVArticleHead></nowiki><nowiki>&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; <OVArticleBody></nowiki><nowiki>&nbsp;&nbsp;&nbsp; </p></nowiki><nowiki></OCRecentArticles></nowiki>
+
<ul>
 +
    <!--#in addUrl -->
 +
    <li>
 +
        <a href="{ val }">{ key }</a>
 +
    </li>
 +
    <!--#endin addUrl -->
 +
</ul>
 +
</source>
  
 +
====== Dépendance ======
  
= Annexes =
+
Certaines boucles sont dépendantes d'une autre boucle et ne peuvent être appelées qu'à l'intérieur de ces boucles dont elles dépendent.
== Les variables globales ==
+
Les variables globales sont des informations disponibles dans tous les fichiers templates et OVML.
+
  
* Utilisation dans un fichier template :
+
Il suffit pour cela d'imbriquer les deux boucles concernées.
  
Les variables globales sont automatiquement disponibles dans un fichier template. Utilisez la syntaxe courante des variables : { XXX } où XXX est le nom de la variable globale.
+
'''Exemple :'''
  
Remarque :Toutes les variables globales de type booléennes s'utilisent dans des tests de conditions ou comparaisons, les variables ne s'affichent pas avec la syntaxe { XXX }.
+
Dans le template ''topicsdisplay.html'' :
  
 +
<source lang="html4strict">
 +
<!-- Listage des tags / mots-clés d'un article -->
  
Exemple :Bienvenue { BAB_SESS_USER } affichera le nom et le prénom de l'utilisateur courant
+
<!--#in getnext -->
 +
    Tags :
 +
    <ul>
 +
    <!--#in getnexttag -->
 +
        <li>
 +
            <a href="{ searchurl }">{ tagname }</a>
 +
        </li>
 +
    <!--#endin getnexttag -->
 +
    </ul>
 +
<!--#endin getnext -->
 +
</source>
  
* Utilisation dans un fichier OVML :
+
Une [[Liste des boucles utilisables dans les templates|liste des boucles et de leurs variables utilisables dans les templates]] est disponible afin de vous renseigner sur les boucles existantes selon le template.
  
<nowiki>Pour utiliser une variable globale dans un fichier OVML, il faut dans un premier temps que la variable désirée soit placée dans le contexte OVML. Pour cela, l'utilisation de la syntaxe <OFPutVar> est nécessaire.</nowiki>
+
==== Templates modifiables ====
  
Remarque :Les variables globales de type booléennes ayant la valeur 'true' afficheront la valeur '1' en OVML. La valeur 'false' ne ramène généralement aucune valeur en OVML. Il est préférable dans des tests d'égalité/inégalité de tester sur la valeur '1'.
+
La liste des templates modifiables ainsi que leurs fonctions respectives est disponible dans la [[Liste des fichiers templates modifiables dans les skins|liste des fichiers templates modifiables dans les skins]].
  
Exemple :<nowiki><OFPutVar name="babSkin"></nowiki>
+
Pour récupérer les templates originaux, rendez-vous à la racine de votre site. Vous avez normalement un ou plusieurs dossiers nommés ''ovidentia-'''numero-de-version''''', ouvrez celui avec le dernier numéro de version. Rendez-vous ensuite dans ''skins / ovidentia / templates''. De là, vous pourrez récupérer les templates que vous souhaitez modifier.
  
<nowiki><img src="skins/<OVbabSkin>/images/paysage.gif" alt="Paysage" title=""></nowiki>
+
Les variables utilisables sont généralement indiquées dans des commentaires HTML situés en haut de ces fichiers de template modifiables.
  
--> La première ligne déclare la variable globale babSkin afin d'en récupérer sa valeur. La deuxième ligne utilise babSkin (nom du skin courant) pour afficher une image.
+
'''Attention''', en réalité, tous les templates sont modifiables, mais il est conseillé de ne modifier que les templates de la liste donnée ci-dessus afin de permettre les améliorations des templates lors des mises à jour d'Ovidentia. Les templates de la liste ci-dessus peuvent en revanche être modifiés sans crainte.
  
 +
==== page.html ====
  
Attention : veuillez respecter chaque caractère en tenant compte de la casse (majuscule/minuscule).
+
===== Rendre son skin compatible avec la réécriture d'URL =====
  
 +
Afin de rendre son skin compatible avec la réécriture d'URL, il est nécessaire de modifier la balise ''head'' de votre fichier ''page.html'' en ajoutant un élément de type '''base'''.
  
'''BAB_SESS_LOGGED''' : si la variable est à ‘true’, l’utilisateur courant est un utilisateur authentifié sur le site. Sinon, l’utilisateur courant est non authentifié (anonyme).
+
<source lang="html4strict">
 +
<head>
 +
    <!-- Meta d'encodage -->
  
'''BAB_SESS_USER''' : nom et prénom de l’utilisateur authentifié. Si vide, l’utilisateur courant est non authentifié (anonyme).
+
    <base href="{ babUrlScript }" />
  
'''BAB_SESS_NICKNAME''' : identifiant de l’utilisateur authentifié. Si vide, l’utilisateur courant est non authentifié (anonyme).
+
    <!-- Insertion des fichiers JavaScript et CSS -->
 +
</head>
 +
</source>
  
'''BAB_SESS_USERID''' : identifiant (entier) dans la base de données de l’utilisateur courant. Si vide, l’utilisateur courant est non authentifié (anonyme).
+
Cela permet de convertir toutes les chemins relatifs en chemins absolus afin d'éviter les requêtes vers des fichiers inexistants.
  
'''BAB_SESS_EMAIL''' : adresse e-mail de l’utilisateur courant. Si vide, l’utilisateur courant est non authentifié (anonyme).
 
  
'''babInstallPath''' : chemin du noyau d’OVIDENTIA.
+
Un exemple de <head> complet :
  
'''babSkin''' : nom du skin courant utilisé.
+
<pre>
 +
<head>
 +
    <!-- Définition de l'encodage de la page -->
 +
    <meta http-equiv="Content-type" content="{ sContent }"/>
  
'''babSkinPath''' : chemin du skin courant utilisé.
+
    <base href="{ babUrlScript }" />
  
'''babCssPath''' : chemin du fichier css choisi par l’utilisateur courant.
+
    <title>{ babSiteName }<!--#if pageTitle --> - { pageTitle }<!--#endif pageTitle --></title>
  
'''babScriptPath''' : chemin du dossier script dans le noyau OVIDENTIA.
+
    <!--#if pageKeywords -->
 +
    <meta name="keywords" content="{ pageKeywords }" />
 +
    <!--#endif pageKeywords -->
  
'''babLanguage''' : abrégé de la langue d’interface utilisée par l’utilisateur courant (en, fr, nl, nl-be, ...).
+
    <!--#if pageDescription -->
 +
    <meta name="description" content="{ pageDescription }" />
 +
    <!--#endif pageDescription -->
  
'''babStyle''' : nom du fichier CSS courant.
+
    <meta name="generator" content="Ovidentia" />
 +
   
 +
    <!--#if canonicalUrl -->
 +
    <link rel="canonical" href="{ canonicalUrl }" />
 +
    <!--#endif canonicalUrl -->
  
'''babSiteName''' : nom du site courant.
+
    <!--#if imageUrl -->
 +
    <link rel="image_src" href="{ imageUrl }" />
 +
    <!--#endif imageUrl -->
  
'''babUrl''' : url d’accès au site (comme écrit dans config.php et index.php).
+
    <script type="text/javascript" src="{ babOvidentiaJs }"></script>
 +
    <!--#if script -->
 +
    <script type="text/javascript"><!-- { script } --></script>
 +
    <!--#endif script -->
 +
 +
    <link rel="stylesheet" type="text/css" href="{ babCssPath }" media="screen" title="Default" />
  
'''babDB''' : nom de la base de données MySQL.
+
    { babHeadStyleSheets }
  
'''babCurrentDate''' : variable uniquement disponible dans les fichiers OVML, elle permet de récupérer la date courante. Contrairement aux autres variables globales, elle ne doit pas être déclarée par la fonction OFPutVar afin de l'utiliser. babCurrentDate renvoit une date au format timestamp (Voir la documentation OVML pour un formatage différent).
+
</head>
 +
</pre>
  
 +
=== OvML ===
  
== Les fichiers templates modifiables ==
+
Les fichiers contenus dans le dossier OvML sont des morceaux de pages plus ou moins conséquents qui pourront être intégrés sur différentes pages de votre site. Il permet également de générer du contenu de manière dynamique.
Pour des raisons logiques d'évolution du portail, il n'est pas possible de modifier toutes les interfaces d'OVIDENTIA (fichiers templates). Ainsi seuls quelques fichiers templates sont modifiables par le webmaster. La structure de ces fichiers ne change pas au fur et à mesure des versions d'OVIDENTIA ce qui garantit au webmaster que son skin restera compatible avec les futures versions d'OVIDENTIA.
+
  
Voici une liste des fichiers templates modifiables et leurs natures :
+
==== Le langage OvML ====
  
'''adminsection.html''' : section administrateur
+
L'OvML est, à l'instar du (x)HTML et du XML, un langage à balises. La différence réside dans le fait que c'est un langage compilé par PHP qui permettra par la suite de générer du contenu.
  
'''articlestemplate.html''' : modèle d'articles pour les thèmes d'articles
+
===== Conventions de nommage =====
  
'''config.html''' : balises méta
+
Il existe trois types de composants en OvML : les variables, les fonctions et les containers. Par convention, les composants d'un même type commenceront tous par les même lettres :
 +
* '''les variables''' : OV
 +
* '''les fonctions''' : OF
 +
* '''les containers''' : OC
  
'''forumssection.html''' : section qui liste les forums
+
===== Variables =====
  
'''mailtemplate.html''' : mails de notification
+
====== Déclaration ======
  
'''mailinfo.html''' : personnalisation des informations de notification
+
Pour déclarer une variable ou pour affecter une nouvelle valeur à une variable existante, on utilise la fonction '''PutVar'''.
  
'''montha.html''' : section calendrier
+
<source lang="ovml">
 +
<OFPutVar name="nom_de_la_variable" value="valeur">
 +
</source>
  
'''page.html''' : page principale lançant les sections et le corps d'OVIDENTIA
+
Vous remarquerez que bien qu'il s'agit d'un élément auto-fermant (il n'a pas besoin de balise de fermeture comme pour ''<nowiki><br /></nowiki>'', ''<nowiki><img src="" alt="" /></nowiki>'', etc.), on ne met pas le slash (/) de fermeture.
  
'''sectiontemplate.html''' : sections, patrons d'affichages des sections
+
Les variables peuvent contenir des nombres ou bien des chaînes de caractères.
  
'''topcatsection.html''' : section de catégories de thèmes
+
'''Exemple :'''
  
'''topicsdisplay.html''' : liste des articles (introduction + lien "lire la suite"), corps des articles, patrons d'affichage des thèmes d'articles
+
<source lang="ovml">
 +
<OFPutVar name="Compteur" value="0">
 +
</source>
  
'''topicssection.html''' : section de catégories de thèmes si thèmes existants, patrons d'affichages de section pour les catégories
+
====== Affichage ======
  
'''usersection.html''' : section utilisateur
+
Pour afficher une variable, il suffit de l'appeler dans une balise avec le préfixe des variables '''OV'''.
  
'''warning.html ''': n'est plus utilisé dans OVIDENTIA (gérait les 2 variables Titre et Message d'erreur)
+
<source lang="ovml">
 +
<OVnom_de_la_variable>
 +
</source>
  
'''topcatdisplay.html''' : liste des thèmes dans une catégorie, patrons d'affichage pour les catégories
+
Comme pour la fonction de déclaration, l'affichage d'une variable est un élément auto-fermant ne nécessitant pas de slash (/) de fermeture.
  
'''entry.html''' : affichage des articles en page d'accueil lorsque les fichiers private.html ou public.html sont absents du skin
+
'''Exemple :'''
  
 +
<source lang="ovml">
 +
<OVCompteur>
 +
</source>
  
== Les variables utilisables dans mailinfo.html ==
+
Quelques opérations de traitement peuvent être utilisées sur les variables, par exemple l'attribut ''strcase'' permet de modifier la casse d'une variable.
Dans le fichier de mailinfo.html, pour personnaliser les objets des emails, ajouter pour chaque email un&nbsp;template&nbsp;xxxxx_subject. Par exemple pour personnaliser l'objet de l'email du&nbsp;forum, ajouter:
+
  
On peut mettre le fichier mailinfo.html dans le répertoire de skin et le personnaliser. On n'est pas obligé de mettre tout le contenu du fichier mailinfo.html.On ne met que la partie personnalisée.
+
<source lang="ovml">
 +
<OFPutVar name="Nom" value="Dupont">
 +
<OVNom strcase="upper">
 +
</source>
  
=== Pour personnaliser l'objet de l'email des notifications de nouveaux articles ===
+
Ce code affichera la chaîne de caractère suivante :
<nowiki><!--#begin&nbsp;notifyarticle_new_ subject&nbsp;--></nowiki>&nbsp;ma personnalisation<nowiki><!--#end&nbsp;notifyarticle_new_ subject&nbsp;--></nowiki>
+
  
Les variables disponibles :
+
DUPONT
  
- babtpl_topicname&nbsp;
+
Pour une liste complète des attributs utilisables sur les variables, consultez la [[#Documentation|documentation OvML]].
  
- babtpl_authorname
+
===== Fonctions =====
  
- babtpl_articledatetime- babtpl_articledate- babtpl_articletime - babtpl_articletitle - babtpl_articleid- babtpl_articletopicid
+
Les fonctions permettent de réaliser diverses opérations autonomes ou liées aux variables. Bien qu'étant auto-fermantes, elles ne nécessitent pas de slash (/) lors de leur utilisation.
  
- babtpl_articlehead : Introduction de l'article- babtpl_articlebody : Corps de l'article
+
Elles peuvent prendre divers attributs obligatoires ou optionnels selon la fonction appelée.
  
 +
Par exemple, la fonction IfNotIsSet permet d'affecter une valeur à une variable si celle-ci n'est pas déclarée. Toutes les fonctions sont précédées du préfixe '''OF''' et contenues dans une balise lors de leur appel.
  
=== Pour personnaliser l'objet de l'email des notifications de mise à jour des articles ===
+
<source lang="ovml">
<nowiki><!--#begin&nbsp;notifyarticle_ update_subject&nbsp;--></nowiki>&nbsp;ma personnalisation<nowiki><!--#end&nbsp;notifyarticle_update_ subject&nbsp;--></nowiki>
+
<OFIfNotIsSet name="nom_de_la_variable" value="valeur">
 +
</source>
  
Les variables disponibles :
+
Pour une liste complète des fonctions, consultez la [[#Documentation|documentation OvML]].
  
- babtpl_topicname&nbsp;
+
====== Opérations arithmétiques ======
  
- babtpl_authorname
+
Un type de fonctions couramment utilisé concerne les opérations arithmétiques sur les variables. Ces fonctions possèdent toutes le préfixe '''AO''' (pour Arithmetic Operator).
  
- babtpl_articledatetime
+
'''Exemple :'''
  
- babtpl_articledate
+
<source lang="ovml">
 +
<OFAOAddition expr1="valeur" expr2="valeur" saveas="nom_de_la_variable">
 +
</source>
  
- babtpl_articletime
+
Pour effectuer des opérations sur des nombres décimaux, la virgule doit être remplacée par un point.
  
- babtpl_articletitle
+
<source lang="ovml">
 +
<OFAOAddition expr1="1" expr2="1.5" saveas="Variable">
 +
<OVVariable>
 +
</source>
  
 +
2.5
  
=== Pour personnaliser l'objet de l'email des notifications des approbateurs d'un article ===
+
Si l'une des valeurs envoyée au paramètre ''expr1'' ou ''expr2'' est une chaîne de caractères ne démarrant pas par un nombre, alors sa valeur sera substituée par 0.
<nowiki><!--#begin&nbsp;articlewait_ subject&nbsp;--></nowiki>&nbsp;ma personnalisation<nowiki><!--#end&nbsp;articlewait_subject&nbsp;- -></nowiki>
+
  
Les variables disponibles :
+
'''Exemple :'''
  
- babtpl_topicname&nbsp;
+
<source lang="ovml">
 +
<OFAOAddition expr1="Dupont" expr2="1" saveas="Variable">
 +
<OVVariable>
 +
</source>
  
- babtpl_authorname
+
1
  
- babtpl_articledatetime
+
"Dupont" n'étant pas une chaîne de caractères débutant par un nombre, il a été remplacé par la valeur 0, ''Variable'' valait donc 0 + 1 = 1.
  
- babtpl_articledate
+
Si la chaîne de caractères envoyée débute par un nombre, alors ce nombre substituera la chaîne de caractères.
  
- babtpl_articletime
+
'''Exemple :'''
  
- babtpl_articletitle
+
<source lang="ovml">
 +
<OFAOAddition expr1="5Dupont" expr2="1" saveas="Variable">
 +
<OVVariable>
 +
</source>
  
 +
6
  
=== Pour personnaliser l'objet de l'email des notifications pour les commentaires ===
+
"5Dupont" débutant étant une chaîne de caractères débutant par un nombre, elle a été remplacée par la valeur 0, ''Variable'' valait donc 5 + 1 = 6.
<nowiki><!--#begin&nbsp;commentwait_ subject&nbsp;--></nowiki>&nbsp;ma personnalisation<nowiki><!--#end&nbsp;commentwait_subject&nbsp;- -></nowiki>
+
  
Les variables disponibles :
+
Une opération impossible renverra un résultat vide. Cela peut arriver lors d'une division par 0 ou lors du calcul d'un nombre modulo un nombre décimal.
  
- babtpl_topicname&nbsp;
+
'''Exemple :'''
  
- babtpl_authorname
+
<source lang="ovml">
 +
<OFAOAddition expr1="10" expr2="0" saveas="Variable">
 +
<OVVariable>
 +
</source>
  
- babtpl_articledatetime
+
Ce code n'affichera rien car l'opération n'est pas valide.
  
- babtpl_articledate
+
===== Containers =====
  
- babtpl_articletime
+
Les containers sont des éléments à balises ouvrantes et fermantes. Ils sont précédés par le préfixe '''OC''' lors de leur appel.
  
- babtpl_articletitle
+
Les containers possèdent deux fonctions principales : ils permettent de gérer les conditions dans un code et de lister des éléments issus de la base de données.
  
- babtpl_commentsubject
+
Pour une liste complète des containers, consultez la [[#Documentation|documentation OvML]].
  
 +
====== Condition ======
  
=== Pour personnaliser l'objet de l'email des notifications de d'acceptation/refus d'un article ===
+
Les conditions permettent de générer du code si une condition est réalisée. Ils sont tous précédés du préfixe '''If'''. Par exemple, le container IfEqual permet de vérifier l'égalité entre deux valeurs.
<nowiki><!--#begin&nbsp;confirmarticle_ accepted_subject&nbsp;--></nowiki>&nbsp;ma personnalisation<nowiki><!--#end&nbsp;confirmarticle_ accepted_subject&nbsp;--></nowiki>
+
  
ou&nbsp;
+
'''Exemple :'''
  
 +
<source lang="ovml">
 +
<OCIfEqual expr1="0" expr2="1">
 +
    Ce code sera affiché si 0 et 1 sont égaux, c'est à dire jamais.
 +
</OCIfEqual>
 +
</source>
  
<nowiki><!--#begin&nbsp;confirmarticle_ refused_subject&nbsp;--></nowiki>&nbsp;ma personnalisation<nowiki><!--#end&nbsp;confirmarticle_ refused_subject&nbsp;--></nowiki>
+
Il existe ainsi neuf containers permettant d'effectuer des tests. Voici la liste de ceux-ci.
  
Les variables disponibles :
+
{| class="prettytable"
 +
|+ Liste des containers de test
 +
! colspan="3" | Tests de comparaison
 +
|-
 +
! Container !! Condition !! Utilisation
 +
|-
 +
| OCIfEqual || Vrai si expr1 est égal à expr2
 +
| <source lang="ovml">
 +
<OCIfEqual expr1="1" expr2="1">Vrai</OCIfEqual>
 +
<OCIfEqual expr1="0" expr2="1">Faux</OCIfEqual>
 +
</source>
 +
|-
 +
| OCIfNotEqual || Vrai si expr1 est différent expr2
 +
| <source lang="ovml">
 +
<OCIfNotEqual expr1="0" expr2="1">Vrai</OCIfNotEqual>
 +
<OCIfNotEqual expr1="1" expr2="1">Faux</OCIfNotEqual>
 +
</source>
 +
|-
 +
| OCIfLessThan || Vrai si expr1 plus petit strictement que expr2
 +
| <source lang="ovml">
 +
<OCIfLessThan expr1="0" expr2="1">Vrai</OCIfLessThan>
 +
<OCIfLessThan expr1="1" expr2="1">Faux</OCIfLessThan>
 +
<OCIfLessThan expr1="2" expr2="1">Faux</OCIfLessThan>
 +
</source>
 +
|-
 +
| OCIfLessThanOrEqual || Vrai si expr1 plus petit ou égal que expr2
 +
| <source lang="ovml">
 +
<OCIfLessThanOrEqual expr1="0" expr2="1">Vrai</OCIfLessThanOrEqual>
 +
<OCIfLessThanOrEqual expr1="1" expr2="1">Vrai</OCIfLessThanOrEqual>
 +
<OCIfLessThanOrEqual expr1="2" expr2="1">Faux</OCIfLessThanOrEqual>
 +
</source>
 +
|-
 +
| OCIfGreaterThan || Vrai si expr1 plus grande strictement que expr2
 +
| <source lang="ovml">
 +
<OCIfGreaterThan expr1="2" expr2="1">Vrai</OCIfGreaterThan>
 +
<OCIfGreaterThan expr1="1" expr2="1">Faux</OCIfGreaterThan>
 +
<OCIfGreaterThan expr1="0" expr2="1">Faux</OCIfGreaterThan>
 +
</source>
 +
|-
 +
| OCIfGreaterThanOrEqual || Vrai si expr1 plus grande ou égal que expr2
 +
| <source lang="ovml">
 +
<OCIfGreaterThanOrEqual expr1="2" expr2="1">Vrai</OCIfGreaterThanOrEqual>
 +
<OCIfGreaterThanOrEqual expr1="1" expr2="1">Vrai</OCIfGreaterThanOrEqual>
 +
<OCIfGreaterThanOrEqual expr1="0" expr2="1">Faux</OCIfGreaterThanOrEqual>
 +
</source>
 +
|-
 +
! colspan="3" | Tests d'existence
 +
|-
 +
! Container !! Condition !! Utilisation
 +
|-
 +
| OCIfIsSet || Vrai si la variable est déclarée
 +
| <source lang="ovml">
 +
<OFPutVar name="Nom" value="Dupont">
  
- babtpl_topicname&nbsp;
+
<OCIfIsSet name="Nom">Vrai</OCIfIsSet>
 +
<OCIfIsSet name="Prénom">Faux</OCIfIsSet>
 +
</source>
 +
|-
 +
| OCIfNotIsSet || Vrai si la variable n'est pas déclarée
 +
| <source lang="ovml">
 +
<OFPutVar name="Nom" value="Dupont">
  
- babtpl_authorname- babtpl_articledatetime- babtpl_articledate- babtpl_articletime- babtpl_articletitle
+
<OCIfNotIsSet name="Prénom">Vrai</OCIfNotIsSet>
 +
<OCIfNotIsSet name="Nom">Faux</OCIfNotIsSet>
 +
</source>
 +
|-
 +
! colspan="3" | Test d'appartenance à un groupe
 +
|-
 +
! Container !! Condition !! Utilisation
 +
|-
 +
| OCIfUserMemberOfGroups || Vrai si la personne fait parti du groupe indiqué
 +
| <source lang="ovml">
 +
<OCIfLessThan groupid="1">Vrai</OCIfLessThan>
 +
</source>
 +
|}
  
=== Pour personnaliser l'objet de l'email des notifications des nouvelles contributions de forum ===
+
====== Listage d'éléments ======
<nowiki><!--#begin newpost_subject --></nowiki>&nbsp;ma personnalisation<nowiki><!--#end newpost_subject --></nowiki>
+
  
Les variables disponibles :- babtpl_forum (Le nom du forum)- babtpl_thread (Le titre du sujet)- babtpl_author (l'auteur)
+
Les containers permettant de lister des éléments sont beaucoup plus nombreux. Ce sont eux qui vont permettre de récupérer du contenu dans la base de données.
 +
 
 +
Généralement, on distingue ceux qui récupèrent plusieurs éléments de ceux qui n'en récupèrent qu'un seul grâce à leur nom. Les containers récupérant plusieurs éléments sont souvent au pluriel et ceux ne récupérant qu'un seul élément sont souvent au singulier.
 +
 
 +
Comme pour les fonctions, des paramètres peuvent être nécessaires aux containers pour pouvoir fonctionner comme vous le souhaiter. Ces paramètres sont indiqués dans la [[#Documentation|documentation OvML]].
 +
 
 +
Chaque container permet d'accéder à des variables selon l'élément courant. Ces variables sont définies dans la [[#Documentation|documentation OvML]] et dépendent du container utilisé.
 +
 
 +
'''Exemple :'''
 +
 
 +
<source lang="ovml">
 +
<!-- Ce code permet de récupérer les articles d'un thème d'articles donné. -->
 +
<ul>
 +
    <OCArticles topicid="1" rows="5">
 +
        <!--
 +
            ‹OVArticleTitle› est une variable accessible depuis le container ‹OCArticles›.
 +
            Elle récupère le titre de l'article couramment parcouru.
 +
        -->
 +
        <li><OVArticleTitle></li>
 +
    </OCArticles>
 +
</ul>
 +
</source>
 +
 
 +
<source lang="ovml">
 +
<!-- Ce code permet de récupérer un article précis. -->
 +
<ul>
 +
    <OCArticle articleid="1">
 +
        <!-- ‹OVArticleTitle› est une variable accessible depuis le container ‹OCArticle›. -->
 +
        <li><OVArticleTitle></li>
 +
    </OCArticle>
 +
</ul>
 +
</source>
 +
 
 +
Voici une liste des "familles" de containers ainsi que de courtes descriptions sur leurs fonctions.
 +
 
 +
{| class="prettytable sortable"
 +
|+ Liste des familles de containers
 +
! Famille !! Sujet
 +
|-
 +
| OCArticle* || Articles, les thèmes d'articles et les catégories
 +
|-
 +
| OCDbDirectory* || Annuaires stockés en base de données
 +
|-
 +
| OCDelegation* || Délégations des utilisateurs
 +
|-
 +
| OCCalendar* || Agendas
 +
|-
 +
| OCFaq* || Faqs
 +
|-
 +
| OCFolder*, OCFile* || Fichiers uploadés
 +
|-
 +
| OCForum*, OCThread, OCPost* || Posts, sujets et forums
 +
|-
 +
| OCRecent* || Dernières modifications sur le site internet
 +
|-
 +
| OCSitemap* || Arborescence du site
 +
|-
 +
| OCWaiting* || Éléments en attendant d'approbation
 +
|}
 +
 
 +
====== Emboîtement de containers ======
 +
 
 +
Il peut arriver d'avoir besoin d'emboîter deux containers du même type. Dans ce cas, il est nécessaire de bien identifier chaque container à l'aide d'un paramètre qui servira d'identifiant, sans quoi, des problèmes peuvent survenir.
 +
 
 +
Le problème apparu va être montré à l'aide d'un exemple. Je souhaite afficher un message en fonction du nom et du prénom de quelqu'un. Je fais un test pour comparer son nom puis un autre dedans pour comparer son prénom (dans la pratique, ce cas de figure n'apparaîtra sûrement jamais, mais c'est à vous de voir ce que vous souhaitez faire !).
 +
 
 +
Avec le code ci-dessous, je m'attends à voir s'afficher ''Ah ! Vous êtes de la famille !'' étant donné que le nom est bien ''Dupont'' mais que le prénom n'est pas ''Michel''.
 +
 
 +
<source lang="ovml">
 +
<OCIfEqual expr1="Dupont" expr2="Dupont">
 +
    <OCIfEqual expr1="Jean" expr2="Michel">
 +
        Bonjour Michel ! Comment vas-tu ?<br />
 +
    </OCIfEqual>
 +
    <OCIfNotEqual expr1="Jean" expr2="Michel">
 +
        Ah ! Vous êtes de la famille !<br />
 +
    </OCIfNotEqual>
 +
</OCIfEqual>
 +
<OCIfNotEqual expr1="Dupont" expr2="Dupont">
 +
    Mais qui êtes-vous ?<br />
 +
</OCIfNotEqual>
 +
</source>
 +
 
 +
Bonjour Michel ! Comment vas-tu ?
 +
Ah ! Vous êtes de la famille !
 +
 
 +
Comme vous le voyez, le premier message s'est affiché, malgré le fait que le prénom ne soit pas ''Michel''. Pour résoudre ce problème, il suffit, comme dit précédemment, d'ajouter un attribut aux containers emboîtés pour permettre de les distinguer.
 +
 
 +
<source lang="ovml">
 +
<OCIfEqual expr1="Dupont" expr2="Dupont" i10>
 +
    <OCIfEqual expr1="Jean" expr2="Michel" i20>
 +
        Bonjour Michel ! Comment vas-tu ?<br />
 +
    </OCIfEqual i20>
 +
    <OCIfNotEqual expr1="Jean" expr2="Michel" i20>
 +
        Ah ! Vous êtes de la famille !<br />
 +
    </OCIfNotEqual i20>
 +
</OCIfEqual i10>
 +
<OCIfNotEqual expr1="Dupont" expr2="Dupont" i10>
 +
    Mais qui êtes-vous ?<br />
 +
</OCIfNotEqual i10>
 +
</source>
 +
 
 +
Ah ! Vous êtes de la famille !
 +
 
 +
Grâce à l'ajout de ces attributs, seul le message attendu apparaît. Par sécurité, il est conseillé de toujours rajouter un attribut d'identification à un container.
 +
 
 +
'''Note de l'auteur :''' Pour ma part, les containers de tests (OCIf*) ont un identifiant commençant par ''i'' et les autres commencent par ''c''. Ensuite, j'incrémente de 10 unités à chaque nouveau sous-container. Cela me permet de différencier rapidement les tests des données et d'introduire facilement un nouveau container entre deux si besoin.
 +
 
 +
===== Utilisation des variables dans les fonctions et containers =====
 +
 
 +
Il est possible d'utiliser la valeur d'une variable comme paramètre pour une fonction ou un container. Il suffit pour cela de mettre le code permettant d'afficher la variable à la place de la valeur du paramètre.
 +
 
 +
'''Exemple :'''
 +
 
 +
<source lang="ovml">
 +
<OFPutVar name="Age" value="20">
 +
 
 +
<OCIfLessThan expr1="&lt;OVAge&gt;" expr2="18" i10>
 +
    Vous êtes mineur.
 +
</OCIfLessThan i10>
 +
<OCIfGreaterThanOrEqual expr1="&lt;OVAge&gt;" expr2="18" i10>
 +
    Vous êtes majeur.
 +
</OCIfGreaterThanOrEqual i10>
 +
</source>
 +
 
 +
Vous êtes majeur.
 +
 
 +
Vous pouvez également utiliser des attributs sur ces variables.
 +
 
 +
'''Exemple :'''
 +
 
 +
<source lang="ovml">
 +
<OFPutVar name="Nom" value="Dupont">
 +
 
 +
<OCIfEqual expr1="&lt;OVNom strcase="upper"&gt;" expr2="DUPONT" i10>
 +
    Bienvenue cher ami !
 +
</OCIfEqual i10>
 +
<OCIfNotEqual expr1="&lt;OVNom strcase="upper"&gt;" expr2="DUPONT" i10>
 +
    Imposteur !
 +
</OCIfNotEqual i10>
 +
</source>
 +
 
 +
Bienvenue cher ami !
 +
 
 +
===== Documentation =====
 +
 
 +
Une documentation sur les variables, fonctions et containers est disponible sur la page de [[Référence OvML|documentation sur l'OvML]].
 +
 
 +
==== Fichiers OvML ====
 +
 
 +
===== Pages d'accueil =====
 +
 
 +
Il existe deux fichiers OvML importants. Il s'agit des pages d'accueil. Ovidentia possède deux pages d'accueil, une publique accessible aux utilisateurs non connectés et une privée accessible aux utilisateurs connectés.
 +
 
 +
Ces deux pages sont personnalisables et sont générées grâce à l'OvML, elles sont donc logiquement situées dans le dossier ''ovml'' du skin, il s'agit des fichiers ''private.html'' et ''public.html'', respectivement associées à la page d'accueil privée et à la page d'accueil publique.
 +
 
 +
Si vous supprimez ces deux fichiers, alors ce sera le template entry.html qui sera utilisé.
 +
 
 +
===== Insertion dans une page =====
 +
 
 +
Pour pouvoir être utilisé, un fichier OvML doit être situé dans le dossier ''ovml'' de votre skin, sans quoi il ne sera pas possible de l'utiliser.
 +
 
 +
Bien que l'insertion d'un fichier OvML depuis un article à l'aide de l'interface graphique filtre les fichiers selon leur extension, un fichier OvML peut toutefois posséder n'importe quelle extension (ou aucune) sans altérer son interprétation.
 +
 
 +
====== Mini langage de templates ======
 +
 
 +
L'insertion d'un fichier OvML dans un template se fait de la manière suivante :
 +
 
 +
{ $OVML(chemin/vers/mon/fichier.ovml) }
 +
 
 +
Le chemin est relatif au dossier '''ovml''' de votre skin (et non pas au template qui l'appelle). Le fichier appelé ci-dessus sera donc situé dans le dossier ''ovml/chemin/vers/mon/fichier.ovml'' de votre skin.
 +
 
 +
'''Exemple :'''
 +
 
 +
{ $OVML(carrousel.ovml) }
 +
 
 +
====== Article ======
 +
 
 +
L'insertion d'un fichier OvML dans un article peut se faire de deux façons différentes.
 +
 
 +
Soit en insérant le code suivant dans l'article :
 +
 
 +
$OVML(chemin/vers/mon/fichier.ovml)
 +
 
 +
Le chemin est relatif au dossier '''ovml''' de votre skin.
 +
 
 +
Soit en cliquant sur le bouton '''[[Image:Ovidentia-icone.png|Bouton "Ovidentia" de l'éditeur de texte WYSIWYG]]''' sur l'éditeur WYSIWIG. Une pop-up s'ouvre permettant d'effectuer plusieurs actions, cliquez sur '''[[Image:Insertion_de_fichier_OvML.gif|Bouton d'insertion d'un fichier OvML dans un article]] Insérer un fichier OvML'''. L'arborescence du dossier '''ovml''' de votre skin apparait alors listant ses dossiers et la liste des fichiers ''.ovml'', ''.oml'', ''.html'' et ''.htm''. Il suffit alors de cliquer sur le fichier souhaité.
 +
 
 +
====== Fichier OvML ======
 +
 
 +
L'insertion d'un fichier OvML dans un second fichier OvML se fait à l'aide de la fonction '''Include''' du langage OvML.
 +
 
 +
<source lang="ovml">
 +
<OFInclude file="chemin/vers/mon/fichier.ovml">
 +
</source>
 +
 
 +
Le chemin est relatif au dossier '''ovml''' de votre skin (et non pas au fichier OvML qui l'appelle).
 +
 
 +
====== Appel direct ======
 +
 
 +
Il est également possible d'appeler un fichier OvML directement grâce à une URL particulière.
 +
 
 +
L'URL suivante permet d'afficher un fichier OvML inclu dans le template ''page.html''.
 +
 
 +
<span class="source-ovml">http<span>:</span>//votre-nom-de-domaine.com/<span class="sc2">index.php?''<span class="kw3">tg</span>''='''<span class="st0">oml</span>'''&''<span class="kw3">file</span>''='''<span class="st0">chemin/vers/mon/fichier.ovml</span>'''</span></span>
 +
 
 +
Pour n'afficher que le contenu du fichier OvML sans template, il faut rajouter un paramètre à l'URL.
 +
 
 +
<span class="source-ovml">http<span>:</span>//votre-nom-de-domaine.com/<span class="sc2">index.php?''<span class="kw3">tg</span>''='''<span class="st0">oml</span>'''&''<span class="kw3">file</span>''='''<span class="st0">chemin/vers/mon/fichier.ovml</span>'''&''<span class="kw3">echo</span>''='''<span class="st0">1</span>'''</span></span>
 +
 
 +
=== Feuilles de style ===
 +
 
 +
Les feuilles de style doivent être situées dans le dossier '''styles''' de votre skin. Pour des raisons de performance, il est préférable de regrouper toutes les règles dans une seule feuille de style.
 +
 
 +
'''Attention''', toutes les feuilles de style situées dans à la racine du sous-dossier '''style''' de votre skin seront listées lors de la modification du skin par l'administrateur ou un utilisateur. Il est donc préférable de créer une seule feuille de style à la racine puis de les mettre dans un sous-dossier du dossier '''style''' (à moins que vous ne souhaitiez proposer plusieurs variantes de votre skin, comme plusieurs largeurs différentes).
 +
 
 +
==== Différents médias ====
 +
 
 +
Il est important pour certains sites de gérer plusieurs types de médias. Pour ce faire, l'utilisation de [http://www.w3.org/TR/css3-mediaqueries/ media queries] devient indispensable.
 +
 
 +
Certains sites auront besoin d'être ''responsive'' et d'autres devront pouvoir être imprimés correctement. Il vous revient donc le choix de regrouper toutes les feuilles de style en une seule prenant en compte tous les médias ou de les diviser en plusieurs feuilles de style. Dans le second cas, il est conseillé de créer un sous-répertoire ''medias'' dans le dossier ''styles'' de votre skin afin de ne pas proposer aux utilisateurs du site internet dans les options les feuilles de styles liées à d'autre médias.
 +
 
 +
=== Encodage du skin ===
 +
 
 +
Cette fonctionnalité est disponible à partir de la version 7 d'Ovidentia.
 +
 
 +
Dans le fichier ''templates / page.html'' de votre skin, situez la balise meta définissant le type de contenu.
 +
 
 +
<source lang="html4strict">
 +
<meta http-equiv="Content-type" content="{ sContent }" />
 +
</source>
 +
 
 +
Modifiez sa valeur pour qu'elle corresponde à l'encodage utilisé.
 +
 
 +
<source lang="html4strict">
 +
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-15" />
 +
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
 +
</source>
 +
 
 +
Si vous utilisez HTML5, la définition de la balise meta pour préciser l'encodage est désormais raccourcie.
 +
 
 +
<source lang="html4strict">
 +
<meta charset="iso-8859-15">
 +
<meta charset="utf-8">
 +
</source>
 +
 
 +
Pour qu'un skin soit compatible avec plusieurs encodages, il est nécessaire que celui-ci ne contienne que des caractères ASCII.
 +
 
 +
''Exemple :''
 +
Déposé par Cantico
 +
doit être remplacé par
 +
D&amp;eacute;pos&amp;eacute; par Cantico
 +
 
 +
== Créer un module depuis son skin ==
 +
 
 +
Depuis la version 6.7.92 d'Ovidentia, un skin doit être converti en module afin d'être compatible avec les futures versions.
 +
 
 +
=== Terminologie ===
 +
 
 +
Dans Ovidentia, les modules sont constitués de plusieurs répertoires situés à divers endroits de l'arborescence. Le répertoire du skin est l'un d'entre eux.
 +
 
 +
Les différents répertoires composant un module sont listés dans l'article sur la [[Structure des répertoires d'un module|structure des répertoires d'un module]].
 +
 
 +
Le nom du skin devient le nom du module. Par convention, les modules contenant un skin ont un nom préfixé par ''theme_''. Le noyau est maintenant distribué avec le module '''theme_default''' en cas de nouvelle installation.
 +
 
 +
Le nom donné au répertoire du skin sera le nom du module.
 +
 
 +
=== Créer le module ===
 +
 
 +
Pour créer le module, rendez-vous à la racine de votre site. Vous avez normalement un ou plusieurs dossiers nommés ''ovidentia-'''numero-de-version''''', ouvrez celui avec le dernier numéro de version. Rendez-vous ensuite dans ''addons'' et créez un dossier ayant le même nom que votre skin.
 +
 
 +
[[Image:Arborescence_skin_module.png|center|Arborescence d'un skin/module]]
 +
 
 +
Dans ce répertoire, deux fichiers sont obligatoires, il s'agit de '''addonini.php''' et '''init.php'''.
 +
 
 +
==== addonini.php ====
 +
 
 +
Le fichier addonini.php permet de donner des informations sur votre skin qui pourront être exploitées par Ovidentia, telles que son nom, sa version, son auteur, ses dépendances, etc.
 +
 
 +
N'hésitez pas à aller voir la liste des [[Variables du fichier addonini|variables du fichier addonini.php]] ainsi que ses [[Fichiers spécifiques des modules#addonini.php|différentes parties]].
 +
 
 +
'''Exemple :'''
 +
 
 +
<source lang="ini">
 +
[general]
 +
name                            = "ovidentia_sw"
 +
version                        = "1.0"
 +
description                    = "Ovidentia skin base"
 +
description.fr                  = "Base de skin Ovidentia"
 +
icon                            = "icon.png"
 +
image                          = "thumbnail.png"
 +
delete                          = "1"
 +
addon_access_control            = "0"
 +
ov_version                      = "7.0"
 +
author                          = "Cantico"
 +
encoding                        = "UTF-8"
 +
mysql_character_set_database    = "latin1,utf8"
 +
php_version                    = "5.1.0"
 +
</source>
 +
 
 +
==== ini.php ====
 +
 
 +
Si aucun traitement PHP ne doit être effectué par le module, alors le fichier init.php peut rester vide.
 +
 
 +
==== Aperçu du skin ====
 +
 
 +
Il est possible de créer un aperçu de votre skin dans la liste des modules en l'illustrant par une icône ainsi qu'un aperçu miniature.
 +
 
 +
===== Icône =====
 +
 
 +
L'icône ajoutée à votre skin sera affichée dans la liste des skins accessibles depuis ''Administration > Ajouter / Supprimer des programmes > Skins''.
 +
 
 +
Cela permet notamment de retrouver votre skin plus rapidement parmi une longue liste de skins.
 +
 
 +
[[Image:Skin_avec_icone.png|center|Skin icône]]
 +
 
 +
Pour ce faire, modifiez le fichier [[#addonini.php|addonini.php]] de votre skin en déclarant la variable <code>icon</code> dans la section '''general''', la valeur de cette variable devra correspondre au nom de l'image représentant votre skin :
 +
 
 +
<source lang="ini">
 +
[general]
 +
...
 +
icon = "icon.png"
 +
</source>
 +
 
 +
Rendez-vous ensuite à la racine de votre site. Vous avez normalement un ou plusieurs dossiers nommés ovidentia-'''numero-de-version''', ouvrez celui avec le dernier numéro de version. Rendez-vous ensuite dans ''skins / ovidentia / images / addons'' et créez un dossier ayant le même nom que votre skin.
 +
 
 +
[[Image:Arborescence_images_skin.png|center|Arborescence des images représentant un skin]]
 +
 
 +
Il vous suffit ensuite d'enregistrer votre image dans le dossier que vous venez de créer en la nommant avec la valeur affectée à la variable <code>icon</code> dans le fichier addonini.php.
 +
 
 +
Dans un souci d'ergonomie, nous vous conseillons de ne pas dépasser une taille de 50*50 pixels pour votre icône.
 +
 
 +
===== Aperçu miniature =====
 +
 
 +
L'aperçu miniature ajouté à votre skin sera affiché dans les détails de votre skin accessibles depuis ''Administration > Ajouter / Supprimer des programmes > Skins'' puis en cliquant sur le nom de votre skin.
 +
 
 +
Cela permet à l'utilisateur d'avoir un aperçu du skin.
 +
 
 +
[[Image:Miniature.png|center|Miniature d'un skin]]
 +
 
 +
La procédure à suivre est la même que pour l'ajout d'une [[#Ic.C3.B4ne|icône]] à votre skin, mais le nom de la variable à déclarer dans le fichier addonini.php sera <code>image</code> à la place de <code>icon</code>.
 +
 
 +
Dans un souci d'ergonomie, nous vous conseillons de ne pas dépasser une taille de 200*150 pixels pour votre miniature.
 +
 
 +
==== Configuration du skin ====
 +
 
 +
Il est possible lorsque votre skin est un module d'ajouter une page de configuration pour celui-ci qui sera accessible depuis ''Administration > Ajouter / Supprimer des programmes > Skins'' sur la ligne de votre skin.
 +
 
 +
[[Image:Skin_avec_icone_configurable.png|center|Skin configurable]]
 +
 
 +
Pour ce faire, modifiez le fichier [[#addonini.php|addonini.php]] de votre skin en déclarant la variable <code>configuration_page</code> dans la section <b>general</b>, la valeur de cette variable devra correspondre au nom de la page :
 +
 
 +
<source lang="ini">
 +
[general]
 +
...
 +
configuration_page = "configuration"
 +
</source>
 +
 
 +
Ici, <code>configuration_page</code> valant "configuration", la page appelée sera ''configuration.php''. Vous pouvez y mettre le code PHP que vous souhaitez.
 +
 
 +
Consultez la [[Accueil|page d'accueil du wiki d'Ovidentia]] pour accéder aux documentations des différentes API disponibles.
 +
 
 +
==== Arborescence complète ====
 +
 
 +
Voici un aperçu récapitulant l'arborescence complète d'un skin modularisé.
 +
 
 +
[[Image:Arborescence_complète.png|center|Arborescence complète d'un skin modularisé]]

Version actuelle en date du 15 février 2019 à 17:19

Les skins sont des thèmes graphiques pouvant être appliqués aux sites créés avec Ovidentia. Ils sont personnalisables afin de pouvoir correspondre au mieux à vos attentes pour l'apparence de vos pages et de leurs structures.

Un skin est principalement constitué de fichiers HTML, OvML, JavaScript et d'images.

Sommaire

Gestion

Il est possible pour un site de posséder plusieurs skins administrables via l'interface d'Ovidentia.

Administrateur

Installer un skin

Pour installer un skin, rendez-vous dans le menu Administration > Ajouter/Supprimer des programmes > Skins puis cliquez sur Charger un nouveau skin. Sélectionnez le fichier au format .zip contenant le skin puis cliquez sur Déposer.

Si l'opération s'est bien déroulée, le skin est désormais utilisable sur le site web.

Liste des skins installés

Pour accéder à la liste des skins installés, rendez-vous dans le menu Administration > Ajouter/Supprimer des programmes > Skins.

Skin appliqué au site

Skin non modularisé

Afin de modifier le skin appliqué au site web, rendez-vous dans le menu Administration > Sites, choisissez le site dont vous souhaitez modifier le skin dans la liste de vos sites puis cliquez sur Configuration du site. Vous pourrez alors, à la ligne Skin, sélectionner celui qui doit être appliqué au site pour les utilisateurs non connectés ou les utilisateurs connectés n'ayant pas modifié le style appliqué au site.

La première liste contient les noms des différents skins disponibles sur le site. La seconde permet de choisir quel fichier CSS doit être utilisé comme feuille de style principale.

Modification du skin appliqué au site

Skin modularisé

Si votre skin est un module, il est possible de le sélectionner depuis la liste des modules. Rendez-vous dans le menu Administration > Ajouter / Supprimer des programmes > Skins puis cliquez sur le lien Etoile Utiliser ce thème de la ligne correspondant au skin que vous souhaitez appliquer.

Skin modularisé

Attention, ce lien n'apparaît pas si l'utilisateur sur lequel vous êtes connecté utilise le skin de la ligne concernée. Il vous faut alors changer le skin de l'utilisateur, sachant qu'il est préférable de conserver le skin du site.

Droit de modification de skin aux utilisateurs

Afin d'autoriser ou d'interdire aux utilisateurs connectés de choisir le skin qu'ils souhaitent appliquer au site web, rendez-vous dans le menu Administration > Sites, choisissez le site dont vous souhaitez modifier le skin dans la liste de vos sites puis cliquez sur Options de l'utilisateur. Vous pourrez alors, à la ligne L'utilisateur peut choisir son skin, choisir d'autoriser ou non l'utilisateur à choisir le skin qu'il souhaite voir appliqué au site web lorsqu'il est connecté.

La modification du skin effectuée par un utilisateur n'est visible que par celui-ci quand il est connecté.

Droit de modification de skin aux utilisateurs.png

Utilisateur

La modification du style pour un utilisateur n'est possible que si l'administrateur l'a permis.

Afin de modifier le skin appliqué au site web lorsque vous êtes connecté, rendez-vous dans le menu Utilisateur > Options. Vous pourrez alors, à la section Mise à jour du skin, sélectionner celui qui doit être appliqué au site lorsque vous êtes connecté. Cliquez sur Mise à jour du skin afin de valider la modification.

La modification du skin effectuée n'est visible que par vous quand vous êtes connecté.

Modification du skin pour l'utilisateur connecté

Créer un skin

Structure

Les skins disponibles sur votre site internet sont stockés dans le dossier skins, enfant direct du dossier contenant votre site créé avec Ovidentia.

Attention à ne pas confondre le dossier skins à la racine de votre site avec le dossier ovidentia > skins. Ce dernier contient le skin de base d'Ovidentia. Vos skins personnalisés sont placés à la racine du site pour ne pas être supprimés à chaque mise à jour du noyau.

Les skins sont composés de trois sous-dossiers obligatoires :

  • ovml : ce dossier contient les fichiers OvML (Ovidentia Markup Language) permettant la génération dynamique de contenu. Il contient également parfois les styles spécifiques des "modules" OvML afin de pouvoir être exportés plus facilement. Ces styles peuvent également être indiqués directement dans le fichier OvML.
  • styles : ce dossier contient les feuilles de style de votre site web.
  • templates : ce dossier contient les templates personnalisés.

D'autres sous-dossiers facultatifs peuvent également apparaître dans le skin comme les dossiers :

  • images : ce dossier contient les images nécessaires à la personnalisation du skin (et non pas les images de contenu).
  • scripts : ce dossier contient les fichiers JavaScript.

L'arborescence de votre skin ressemblera donc généralement à la suivante :

Arborescence d'un skin

Personnalisation

Partir d'un thème existant semble être un bon moyen de débuter la création d'un nouveau skin. Cela permet de poser une structure proche de celle que l'on souhaite en minimisant le nombre de modifications à effectuer.

Templates

Les fichiers contenus dans le dossier template sont des gabarits pour les différentes pages du site. Ils permettent de créer la structure des pages de votre site internet.

Leur intérêt réside dans la séparation qu'ils permettent entre le traitement des données effectué par PHP et leur affichage.

Un mini-langage de programmation a été créé pour ces templates permettant de dynamiser votre site.

Patrons d'affichage

Les patrons d'affichage permettent de créer plusieurs apparences pour une même page.

Les patrons d'affichage se font sous forme de commentaires HTML.

La création d'un patron d'affichage se fait de la manière suivante :

<source lang="html4strict">

   Votre code

</source>

Attention, il ne faut pas oublier de ne pas mettre d'espace avant le dièse (#) et d'en mettre un après le nom de la variable.

Certains templates nécessitent deux patrons d'affichage car ils gèrent deux écrans différents. Par exemple, le template topicsdisplay.html contient deux patrons par défaut : un pour lister les différents articles du thème et un pour afficher un article en particulier.

<source lang="html4strict">

   Votre code
   Votre code

</source>

Liste des templates possédant des patrons d'affichage

Mini-langage de templates

Le mini-langage de templates permet de dynamiser le contenu de la page grâce à l'utilisation de variables.

Affichage d'une variable

Les variables qu'il est possible d'afficher dépendent de la classe qui appelle le template.

Néanmoins, il existe des variables accessibles depuis tous les templates :

L'affichage d'une variable dans un template se fait de la manière suivante :

{ variable }

Exemple :

{ babSlogan }
Condition

Les conditions se font sous forme de commentaires HTML.

La vérification de l'existence d'une variable ou du fait qu'elle soit vide se fait de la manière suivante :

<source lang="ovml">

   Votre code

</source>

Attention, il ne faut pas oublier de ne pas mettre d'espace avant le dièse (#) et d'en mettre un après le nom de la variable.

Il est également possible de comparer la valeur d'une variable avec une autre variable :

<source lang="ovml">

   Votre code

</source>

Les différents opérateurs de comparaison existant sont les suivants :

Liste des opérateurs utilisables dans le mini-langage de templates
Symbole Signification
== Egal à
!= Différent de
> Supérieur à
< Inférieur à
>= Supérieur ou égal à
<= Inférieur ou égal à

De la même manière, il est possible de comparer la valeur d'une variable avec une chaîne de caractères ou un nombre :

<source lang="ovml">

   Votre code

</source>

Vous pouvez également tester si une variable est vide :

<source lang="ovml">

   Votre code

</source>

Enfin, il est possible de gérer l'inverse d'une condition grâce au mot-clé else : <source lang="ovml">

   Votre code si la condition est validée
   Votre code si la condition n'est pas validée

</source>

Exemples :

<source lang="ovml">

   Bienvenue { BAB_SESS_USER }.
   Bienvenue Invité.

</source>

<source lang="ovml">

   Vous êtes sur la page d'accueil.

</source>

<source lang="ovml">

   Menu :

</source>

Boucle

Les boucles se font sous forme de commentaires HTML.

Dans certains templates, il est possible d'utiliser des boucles, mais pas dans tous.

Les boucles correspondent à des fonctions appelées jusqu'à ce que celles-ci ne renvoient plus rien. Il n'est actuellement pas possible de connaître la liste des fonctions utilisables dans chaque template via une documentation, mais il est possible de voir les fonctions utilisées dans les templates déjà existants.

Utilisation

L'utilisation d'une boucle se fait de la manière suivante :

<source lang="html4strict">

   Votre code

</source>

Attention, il ne faut pas oublier de ne pas mettre d'espace avant le dièse (#) et d'en mettre un après le nom de la fonction.

Chaque boucle permet l'utilisation de variables particulières.

Exemple :

Dans le template adminsection.html :

<source lang="html4strict">

  • <a href="{ val }">{ key }</a>

</source>

Dépendance

Certaines boucles sont dépendantes d'une autre boucle et ne peuvent être appelées qu'à l'intérieur de ces boucles dont elles dépendent.

Il suffit pour cela d'imbriquer les deux boucles concernées.

Exemple :

Dans le template topicsdisplay.html :

<source lang="html4strict">

   Tags :
  • <a href="{ searchurl }">{ tagname }</a>

</source>

Une liste des boucles et de leurs variables utilisables dans les templates est disponible afin de vous renseigner sur les boucles existantes selon le template.

Templates modifiables

La liste des templates modifiables ainsi que leurs fonctions respectives est disponible dans la liste des fichiers templates modifiables dans les skins.

Pour récupérer les templates originaux, rendez-vous à la racine de votre site. Vous avez normalement un ou plusieurs dossiers nommés ovidentia-numero-de-version, ouvrez celui avec le dernier numéro de version. Rendez-vous ensuite dans skins / ovidentia / templates. De là, vous pourrez récupérer les templates que vous souhaitez modifier.

Les variables utilisables sont généralement indiquées dans des commentaires HTML situés en haut de ces fichiers de template modifiables.

Attention, en réalité, tous les templates sont modifiables, mais il est conseillé de ne modifier que les templates de la liste donnée ci-dessus afin de permettre les améliorations des templates lors des mises à jour d'Ovidentia. Les templates de la liste ci-dessus peuvent en revanche être modifiés sans crainte.

page.html

Rendre son skin compatible avec la réécriture d'URL

Afin de rendre son skin compatible avec la réécriture d'URL, il est nécessaire de modifier la balise head de votre fichier page.html en ajoutant un élément de type base.

<source lang="html4strict"> <head>

   <base href="{ babUrlScript }" />

</head> </source>

Cela permet de convertir toutes les chemins relatifs en chemins absolus afin d'éviter les requêtes vers des fichiers inexistants.


Un exemple de <head> complet :

<head>
    <!-- Définition de l'encodage de la page -->
    <meta http-equiv="Content-type" content="{ sContent }"/>

    <base href="{ babUrlScript }" />

    <title>{ babSiteName }<!--#if pageTitle --> - { pageTitle }<!--#endif pageTitle --></title>

    <!--#if pageKeywords -->
    <meta name="keywords" content="{ pageKeywords }" />
    <!--#endif pageKeywords -->

    <!--#if pageDescription -->
    <meta name="description" content="{ pageDescription }" />
    <!--#endif pageDescription -->

    <meta name="generator" content="Ovidentia" />
    
    <!--#if canonicalUrl -->
    <link rel="canonical" href="{ canonicalUrl }" />
    <!--#endif canonicalUrl -->

    <!--#if imageUrl -->
    <link rel="image_src" href="{ imageUrl }" />
    <!--#endif imageUrl -->

    <script type="text/javascript" src="{ babOvidentiaJs }"></script>
    <!--#if script -->
    <script type="text/javascript"><!-- { script } --></script>
    <!--#endif script -->
	
    <link rel="stylesheet" type="text/css" href="{ babCssPath }" media="screen" title="Default" />

    { babHeadStyleSheets }

</head>

OvML

Les fichiers contenus dans le dossier OvML sont des morceaux de pages plus ou moins conséquents qui pourront être intégrés sur différentes pages de votre site. Il permet également de générer du contenu de manière dynamique.

Le langage OvML

L'OvML est, à l'instar du (x)HTML et du XML, un langage à balises. La différence réside dans le fait que c'est un langage compilé par PHP qui permettra par la suite de générer du contenu.

Conventions de nommage

Il existe trois types de composants en OvML : les variables, les fonctions et les containers. Par convention, les composants d'un même type commenceront tous par les même lettres :

  • les variables : OV
  • les fonctions : OF
  • les containers : OC
Variables
Déclaration

Pour déclarer une variable ou pour affecter une nouvelle valeur à une variable existante, on utilise la fonction PutVar.

<source lang="ovml"> <OFPutVar name="nom_de_la_variable" value="valeur"> </source>

Vous remarquerez que bien qu'il s'agit d'un élément auto-fermant (il n'a pas besoin de balise de fermeture comme pour <br />, <img src="" alt="" />, etc.), on ne met pas le slash (/) de fermeture.

Les variables peuvent contenir des nombres ou bien des chaînes de caractères.

Exemple :

<source lang="ovml"> <OFPutVar name="Compteur" value="0"> </source>

Affichage

Pour afficher une variable, il suffit de l'appeler dans une balise avec le préfixe des variables OV.

<source lang="ovml"> <OVnom_de_la_variable> </source>

Comme pour la fonction de déclaration, l'affichage d'une variable est un élément auto-fermant ne nécessitant pas de slash (/) de fermeture.

Exemple :

<source lang="ovml"> <OVCompteur> </source>

Quelques opérations de traitement peuvent être utilisées sur les variables, par exemple l'attribut strcase permet de modifier la casse d'une variable.

<source lang="ovml"> <OFPutVar name="Nom" value="Dupont"> <OVNom strcase="upper"> </source>

Ce code affichera la chaîne de caractère suivante :

DUPONT

Pour une liste complète des attributs utilisables sur les variables, consultez la documentation OvML.

Fonctions

Les fonctions permettent de réaliser diverses opérations autonomes ou liées aux variables. Bien qu'étant auto-fermantes, elles ne nécessitent pas de slash (/) lors de leur utilisation.

Elles peuvent prendre divers attributs obligatoires ou optionnels selon la fonction appelée.

Par exemple, la fonction IfNotIsSet permet d'affecter une valeur à une variable si celle-ci n'est pas déclarée. Toutes les fonctions sont précédées du préfixe OF et contenues dans une balise lors de leur appel.

<source lang="ovml"> <OFIfNotIsSet name="nom_de_la_variable" value="valeur"> </source>

Pour une liste complète des fonctions, consultez la documentation OvML.

Opérations arithmétiques

Un type de fonctions couramment utilisé concerne les opérations arithmétiques sur les variables. Ces fonctions possèdent toutes le préfixe AO (pour Arithmetic Operator).

Exemple :

<source lang="ovml"> <OFAOAddition expr1="valeur" expr2="valeur" saveas="nom_de_la_variable"> </source>

Pour effectuer des opérations sur des nombres décimaux, la virgule doit être remplacée par un point.

<source lang="ovml"> <OFAOAddition expr1="1" expr2="1.5" saveas="Variable"> <OVVariable> </source>

2.5

Si l'une des valeurs envoyée au paramètre expr1 ou expr2 est une chaîne de caractères ne démarrant pas par un nombre, alors sa valeur sera substituée par 0.

Exemple :

<source lang="ovml"> <OFAOAddition expr1="Dupont" expr2="1" saveas="Variable"> <OVVariable> </source>

1

"Dupont" n'étant pas une chaîne de caractères débutant par un nombre, il a été remplacé par la valeur 0, Variable valait donc 0 + 1 = 1.

Si la chaîne de caractères envoyée débute par un nombre, alors ce nombre substituera la chaîne de caractères.

Exemple :

<source lang="ovml"> <OFAOAddition expr1="5Dupont" expr2="1" saveas="Variable"> <OVVariable> </source>

6

"5Dupont" débutant étant une chaîne de caractères débutant par un nombre, elle a été remplacée par la valeur 0, Variable valait donc 5 + 1 = 6.

Une opération impossible renverra un résultat vide. Cela peut arriver lors d'une division par 0 ou lors du calcul d'un nombre modulo un nombre décimal.

Exemple :

<source lang="ovml"> <OFAOAddition expr1="10" expr2="0" saveas="Variable"> <OVVariable> </source>

Ce code n'affichera rien car l'opération n'est pas valide.

Containers

Les containers sont des éléments à balises ouvrantes et fermantes. Ils sont précédés par le préfixe OC lors de leur appel.

Les containers possèdent deux fonctions principales : ils permettent de gérer les conditions dans un code et de lister des éléments issus de la base de données.

Pour une liste complète des containers, consultez la documentation OvML.

Condition

Les conditions permettent de générer du code si une condition est réalisée. Ils sont tous précédés du préfixe If. Par exemple, le container IfEqual permet de vérifier l'égalité entre deux valeurs.

Exemple :

<source lang="ovml"> <OCIfEqual expr1="0" expr2="1">

   Ce code sera affiché si 0 et 1 sont égaux, c'est à dire jamais.

</OCIfEqual> </source>

Il existe ainsi neuf containers permettant d'effectuer des tests. Voici la liste de ceux-ci.

Liste des containers de test
Tests de comparaison
Container Condition Utilisation
OCIfEqual Vrai si expr1 est égal à expr2 <source lang="ovml">

<OCIfEqual expr1="1" expr2="1">Vrai</OCIfEqual> <OCIfEqual expr1="0" expr2="1">Faux</OCIfEqual> </source>

OCIfNotEqual Vrai si expr1 est différent expr2 <source lang="ovml">

<OCIfNotEqual expr1="0" expr2="1">Vrai</OCIfNotEqual> <OCIfNotEqual expr1="1" expr2="1">Faux</OCIfNotEqual> </source>

OCIfLessThan Vrai si expr1 plus petit strictement que expr2 <source lang="ovml">

<OCIfLessThan expr1="0" expr2="1">Vrai</OCIfLessThan> <OCIfLessThan expr1="1" expr2="1">Faux</OCIfLessThan> <OCIfLessThan expr1="2" expr2="1">Faux</OCIfLessThan> </source>

OCIfLessThanOrEqual Vrai si expr1 plus petit ou égal que expr2 <source lang="ovml">

<OCIfLessThanOrEqual expr1="0" expr2="1">Vrai</OCIfLessThanOrEqual> <OCIfLessThanOrEqual expr1="1" expr2="1">Vrai</OCIfLessThanOrEqual> <OCIfLessThanOrEqual expr1="2" expr2="1">Faux</OCIfLessThanOrEqual> </source>

OCIfGreaterThan Vrai si expr1 plus grande strictement que expr2 <source lang="ovml">

<OCIfGreaterThan expr1="2" expr2="1">Vrai</OCIfGreaterThan> <OCIfGreaterThan expr1="1" expr2="1">Faux</OCIfGreaterThan> <OCIfGreaterThan expr1="0" expr2="1">Faux</OCIfGreaterThan> </source>

OCIfGreaterThanOrEqual Vrai si expr1 plus grande ou égal que expr2 <source lang="ovml">

<OCIfGreaterThanOrEqual expr1="2" expr2="1">Vrai</OCIfGreaterThanOrEqual> <OCIfGreaterThanOrEqual expr1="1" expr2="1">Vrai</OCIfGreaterThanOrEqual> <OCIfGreaterThanOrEqual expr1="0" expr2="1">Faux</OCIfGreaterThanOrEqual> </source>

Tests d'existence
Container Condition Utilisation
OCIfIsSet Vrai si la variable est déclarée <source lang="ovml">

<OFPutVar name="Nom" value="Dupont">

<OCIfIsSet name="Nom">Vrai</OCIfIsSet> <OCIfIsSet name="Prénom">Faux</OCIfIsSet> </source>

OCIfNotIsSet Vrai si la variable n'est pas déclarée <source lang="ovml">

<OFPutVar name="Nom" value="Dupont">

<OCIfNotIsSet name="Prénom">Vrai</OCIfNotIsSet> <OCIfNotIsSet name="Nom">Faux</OCIfNotIsSet> </source>

Test d'appartenance à un groupe
Container Condition Utilisation
OCIfUserMemberOfGroups Vrai si la personne fait parti du groupe indiqué <source lang="ovml">

<OCIfLessThan groupid="1">Vrai</OCIfLessThan> </source>

Listage d'éléments

Les containers permettant de lister des éléments sont beaucoup plus nombreux. Ce sont eux qui vont permettre de récupérer du contenu dans la base de données.

Généralement, on distingue ceux qui récupèrent plusieurs éléments de ceux qui n'en récupèrent qu'un seul grâce à leur nom. Les containers récupérant plusieurs éléments sont souvent au pluriel et ceux ne récupérant qu'un seul élément sont souvent au singulier.

Comme pour les fonctions, des paramètres peuvent être nécessaires aux containers pour pouvoir fonctionner comme vous le souhaiter. Ces paramètres sont indiqués dans la documentation OvML.

Chaque container permet d'accéder à des variables selon l'élément courant. Ces variables sont définies dans la documentation OvML et dépendent du container utilisé.

Exemple :

<source lang="ovml">

    <OCArticles topicid="1" rows="5">
  • <OVArticleTitle>
  •    </OCArticles>
    

</source>

<source lang="ovml">

    <OCArticle articleid="1">
  • <OVArticleTitle>
  •    </OCArticle>
    

</source>

Voici une liste des "familles" de containers ainsi que de courtes descriptions sur leurs fonctions.

Liste des familles de containers
Famille Sujet
OCArticle* Articles, les thèmes d'articles et les catégories
OCDbDirectory* Annuaires stockés en base de données
OCDelegation* Délégations des utilisateurs
OCCalendar* Agendas
OCFaq* Faqs
OCFolder*, OCFile* Fichiers uploadés
OCForum*, OCThread, OCPost* Posts, sujets et forums
OCRecent* Dernières modifications sur le site internet
OCSitemap* Arborescence du site
OCWaiting* Éléments en attendant d'approbation
Emboîtement de containers

Il peut arriver d'avoir besoin d'emboîter deux containers du même type. Dans ce cas, il est nécessaire de bien identifier chaque container à l'aide d'un paramètre qui servira d'identifiant, sans quoi, des problèmes peuvent survenir.

Le problème apparu va être montré à l'aide d'un exemple. Je souhaite afficher un message en fonction du nom et du prénom de quelqu'un. Je fais un test pour comparer son nom puis un autre dedans pour comparer son prénom (dans la pratique, ce cas de figure n'apparaîtra sûrement jamais, mais c'est à vous de voir ce que vous souhaitez faire !).

Avec le code ci-dessous, je m'attends à voir s'afficher Ah ! Vous êtes de la famille ! étant donné que le nom est bien Dupont mais que le prénom n'est pas Michel.

<source lang="ovml"> <OCIfEqual expr1="Dupont" expr2="Dupont">

   <OCIfEqual expr1="Jean" expr2="Michel">
       Bonjour Michel ! Comment vas-tu ?
</OCIfEqual> <OCIfNotEqual expr1="Jean" expr2="Michel"> Ah ! Vous êtes de la famille !
</OCIfNotEqual>

</OCIfEqual> <OCIfNotEqual expr1="Dupont" expr2="Dupont">

   Mais qui êtes-vous ?

</OCIfNotEqual> </source>

Bonjour Michel ! Comment vas-tu ?
Ah ! Vous êtes de la famille !

Comme vous le voyez, le premier message s'est affiché, malgré le fait que le prénom ne soit pas Michel. Pour résoudre ce problème, il suffit, comme dit précédemment, d'ajouter un attribut aux containers emboîtés pour permettre de les distinguer.

<source lang="ovml"> <OCIfEqual expr1="Dupont" expr2="Dupont" i10>

   <OCIfEqual expr1="Jean" expr2="Michel" i20>
       Bonjour Michel ! Comment vas-tu ?
</OCIfEqual i20> <OCIfNotEqual expr1="Jean" expr2="Michel" i20> Ah ! Vous êtes de la famille !
</OCIfNotEqual i20>

</OCIfEqual i10> <OCIfNotEqual expr1="Dupont" expr2="Dupont" i10>

   Mais qui êtes-vous ?

</OCIfNotEqual i10> </source>

Ah ! Vous êtes de la famille !

Grâce à l'ajout de ces attributs, seul le message attendu apparaît. Par sécurité, il est conseillé de toujours rajouter un attribut d'identification à un container.

Note de l'auteur : Pour ma part, les containers de tests (OCIf*) ont un identifiant commençant par i et les autres commencent par c. Ensuite, j'incrémente de 10 unités à chaque nouveau sous-container. Cela me permet de différencier rapidement les tests des données et d'introduire facilement un nouveau container entre deux si besoin.

Utilisation des variables dans les fonctions et containers

Il est possible d'utiliser la valeur d'une variable comme paramètre pour une fonction ou un container. Il suffit pour cela de mettre le code permettant d'afficher la variable à la place de la valeur du paramètre.

Exemple :

<source lang="ovml"> <OFPutVar name="Age" value="20">

<OCIfLessThan expr1="<OVAge>" expr2="18" i10>

   Vous êtes mineur.

</OCIfLessThan i10> <OCIfGreaterThanOrEqual expr1="<OVAge>" expr2="18" i10>

   Vous êtes majeur.

</OCIfGreaterThanOrEqual i10> </source>

Vous êtes majeur.

Vous pouvez également utiliser des attributs sur ces variables.

Exemple :

<source lang="ovml"> <OFPutVar name="Nom" value="Dupont">

<OCIfEqual expr1="<OVNom strcase="upper">" expr2="DUPONT" i10>

   Bienvenue cher ami !

</OCIfEqual i10> <OCIfNotEqual expr1="<OVNom strcase="upper">" expr2="DUPONT" i10>

   Imposteur !

</OCIfNotEqual i10> </source>

Bienvenue cher ami !
Documentation

Une documentation sur les variables, fonctions et containers est disponible sur la page de documentation sur l'OvML.

Fichiers OvML

Pages d'accueil

Il existe deux fichiers OvML importants. Il s'agit des pages d'accueil. Ovidentia possède deux pages d'accueil, une publique accessible aux utilisateurs non connectés et une privée accessible aux utilisateurs connectés.

Ces deux pages sont personnalisables et sont générées grâce à l'OvML, elles sont donc logiquement situées dans le dossier ovml du skin, il s'agit des fichiers private.html et public.html, respectivement associées à la page d'accueil privée et à la page d'accueil publique.

Si vous supprimez ces deux fichiers, alors ce sera le template entry.html qui sera utilisé.

Insertion dans une page

Pour pouvoir être utilisé, un fichier OvML doit être situé dans le dossier ovml de votre skin, sans quoi il ne sera pas possible de l'utiliser.

Bien que l'insertion d'un fichier OvML depuis un article à l'aide de l'interface graphique filtre les fichiers selon leur extension, un fichier OvML peut toutefois posséder n'importe quelle extension (ou aucune) sans altérer son interprétation.

Mini langage de templates

L'insertion d'un fichier OvML dans un template se fait de la manière suivante :

{ $OVML(chemin/vers/mon/fichier.ovml) }

Le chemin est relatif au dossier ovml de votre skin (et non pas au template qui l'appelle). Le fichier appelé ci-dessus sera donc situé dans le dossier ovml/chemin/vers/mon/fichier.ovml de votre skin.

Exemple :

{ $OVML(carrousel.ovml) }
Article

L'insertion d'un fichier OvML dans un article peut se faire de deux façons différentes.

Soit en insérant le code suivant dans l'article :

$OVML(chemin/vers/mon/fichier.ovml)

Le chemin est relatif au dossier ovml de votre skin.

Soit en cliquant sur le bouton Bouton "Ovidentia" de l'éditeur de texte WYSIWYG sur l'éditeur WYSIWIG. Une pop-up s'ouvre permettant d'effectuer plusieurs actions, cliquez sur Bouton d'insertion d'un fichier OvML dans un article Insérer un fichier OvML. L'arborescence du dossier ovml de votre skin apparait alors listant ses dossiers et la liste des fichiers .ovml, .oml, .html et .htm. Il suffit alors de cliquer sur le fichier souhaité.

Fichier OvML

L'insertion d'un fichier OvML dans un second fichier OvML se fait à l'aide de la fonction Include du langage OvML.

<source lang="ovml"> <OFInclude file="chemin/vers/mon/fichier.ovml"> </source>

Le chemin est relatif au dossier ovml de votre skin (et non pas au fichier OvML qui l'appelle).

Appel direct

Il est également possible d'appeler un fichier OvML directement grâce à une URL particulière.

L'URL suivante permet d'afficher un fichier OvML inclu dans le template page.html.

http://votre-nom-de-domaine.com/index.php?tg=oml&file=chemin/vers/mon/fichier.ovml

Pour n'afficher que le contenu du fichier OvML sans template, il faut rajouter un paramètre à l'URL.

http://votre-nom-de-domaine.com/index.php?tg=oml&file=chemin/vers/mon/fichier.ovml&echo=1

Feuilles de style

Les feuilles de style doivent être situées dans le dossier styles de votre skin. Pour des raisons de performance, il est préférable de regrouper toutes les règles dans une seule feuille de style.

Attention, toutes les feuilles de style situées dans à la racine du sous-dossier style de votre skin seront listées lors de la modification du skin par l'administrateur ou un utilisateur. Il est donc préférable de créer une seule feuille de style à la racine puis de les mettre dans un sous-dossier du dossier style (à moins que vous ne souhaitiez proposer plusieurs variantes de votre skin, comme plusieurs largeurs différentes).

Différents médias

Il est important pour certains sites de gérer plusieurs types de médias. Pour ce faire, l'utilisation de media queries devient indispensable.

Certains sites auront besoin d'être responsive et d'autres devront pouvoir être imprimés correctement. Il vous revient donc le choix de regrouper toutes les feuilles de style en une seule prenant en compte tous les médias ou de les diviser en plusieurs feuilles de style. Dans le second cas, il est conseillé de créer un sous-répertoire medias dans le dossier styles de votre skin afin de ne pas proposer aux utilisateurs du site internet dans les options les feuilles de styles liées à d'autre médias.

Encodage du skin

Cette fonctionnalité est disponible à partir de la version 7 d'Ovidentia.

Dans le fichier templates / page.html de votre skin, situez la balise meta définissant le type de contenu.

<source lang="html4strict"> <meta http-equiv="Content-type" content="{ sContent }" /> </source>

Modifiez sa valeur pour qu'elle corresponde à l'encodage utilisé.

<source lang="html4strict"> <meta http-equiv="Content-type" content="text/html; charset=iso-8859-15" /> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> </source>

Si vous utilisez HTML5, la définition de la balise meta pour préciser l'encodage est désormais raccourcie.

<source lang="html4strict"> <meta charset="iso-8859-15"> <meta charset="utf-8"> </source>

Pour qu'un skin soit compatible avec plusieurs encodages, il est nécessaire que celui-ci ne contienne que des caractères ASCII.

Exemple :

Déposé par Cantico

doit être remplacé par

D&eacute;pos&eacute; par Cantico

Créer un module depuis son skin

Depuis la version 6.7.92 d'Ovidentia, un skin doit être converti en module afin d'être compatible avec les futures versions.

Terminologie

Dans Ovidentia, les modules sont constitués de plusieurs répertoires situés à divers endroits de l'arborescence. Le répertoire du skin est l'un d'entre eux.

Les différents répertoires composant un module sont listés dans l'article sur la structure des répertoires d'un module.

Le nom du skin devient le nom du module. Par convention, les modules contenant un skin ont un nom préfixé par theme_. Le noyau est maintenant distribué avec le module theme_default en cas de nouvelle installation.

Le nom donné au répertoire du skin sera le nom du module.

Créer le module

Pour créer le module, rendez-vous à la racine de votre site. Vous avez normalement un ou plusieurs dossiers nommés ovidentia-numero-de-version, ouvrez celui avec le dernier numéro de version. Rendez-vous ensuite dans addons et créez un dossier ayant le même nom que votre skin.

Arborescence d'un skin/module

Dans ce répertoire, deux fichiers sont obligatoires, il s'agit de addonini.php et init.php.

addonini.php

Le fichier addonini.php permet de donner des informations sur votre skin qui pourront être exploitées par Ovidentia, telles que son nom, sa version, son auteur, ses dépendances, etc.

N'hésitez pas à aller voir la liste des variables du fichier addonini.php ainsi que ses différentes parties.

Exemple :

<source lang="ini"> [general] name = "ovidentia_sw" version = "1.0" description = "Ovidentia skin base" description.fr = "Base de skin Ovidentia" icon = "icon.png" image = "thumbnail.png" delete = "1" addon_access_control = "0" ov_version = "7.0" author = "Cantico" encoding = "UTF-8" mysql_character_set_database = "latin1,utf8" php_version = "5.1.0" </source>

ini.php

Si aucun traitement PHP ne doit être effectué par le module, alors le fichier init.php peut rester vide.

Aperçu du skin

Il est possible de créer un aperçu de votre skin dans la liste des modules en l'illustrant par une icône ainsi qu'un aperçu miniature.

Icône

L'icône ajoutée à votre skin sera affichée dans la liste des skins accessibles depuis Administration > Ajouter / Supprimer des programmes > Skins.

Cela permet notamment de retrouver votre skin plus rapidement parmi une longue liste de skins.

Skin icône

Pour ce faire, modifiez le fichier addonini.php de votre skin en déclarant la variable icon dans la section general, la valeur de cette variable devra correspondre au nom de l'image représentant votre skin :

<source lang="ini"> [general] ... icon = "icon.png" </source>

Rendez-vous ensuite à la racine de votre site. Vous avez normalement un ou plusieurs dossiers nommés ovidentia-numero-de-version, ouvrez celui avec le dernier numéro de version. Rendez-vous ensuite dans skins / ovidentia / images / addons et créez un dossier ayant le même nom que votre skin.

Arborescence des images représentant un skin

Il vous suffit ensuite d'enregistrer votre image dans le dossier que vous venez de créer en la nommant avec la valeur affectée à la variable icon dans le fichier addonini.php.

Dans un souci d'ergonomie, nous vous conseillons de ne pas dépasser une taille de 50*50 pixels pour votre icône.

Aperçu miniature

L'aperçu miniature ajouté à votre skin sera affiché dans les détails de votre skin accessibles depuis Administration > Ajouter / Supprimer des programmes > Skins puis en cliquant sur le nom de votre skin.

Cela permet à l'utilisateur d'avoir un aperçu du skin.

Miniature d'un skin

La procédure à suivre est la même que pour l'ajout d'une icône à votre skin, mais le nom de la variable à déclarer dans le fichier addonini.php sera image à la place de icon.

Dans un souci d'ergonomie, nous vous conseillons de ne pas dépasser une taille de 200*150 pixels pour votre miniature.

Configuration du skin

Il est possible lorsque votre skin est un module d'ajouter une page de configuration pour celui-ci qui sera accessible depuis Administration > Ajouter / Supprimer des programmes > Skins sur la ligne de votre skin.

Skin configurable

Pour ce faire, modifiez le fichier addonini.php de votre skin en déclarant la variable configuration_page dans la section general, la valeur de cette variable devra correspondre au nom de la page :

<source lang="ini"> [general] ... configuration_page = "configuration" </source>

Ici, configuration_page valant "configuration", la page appelée sera configuration.php. Vous pouvez y mettre le code PHP que vous souhaitez.

Consultez la page d'accueil du wiki d'Ovidentia pour accéder aux documentations des différentes API disponibles.

Arborescence complète

Voici un aperçu récapitulant l'arborescence complète d'un skin modularisé.

Arborescence complète d'un skin modularisé