Squeletml

Squelette XHTML musclé par PHP!

Documentation de Squeletml

Installation

Squeletml requiert un serveur Apache avec PHP 5, sans plus. Aucune base de données n'est utilisée. Pour installer Squeletml, il est donc seulement nécessaire de télécharger l'archive de la dernière version sur la page d'accueil du logiciel, d'extraire cette archive et de placer les fichiers sur un serveur, par exemple par ftp.

Notes:

  • pour utiliser la fonction de mise en maintenance du site, la réécriture d'URL doit être activée sur le serveur;
  • pour ajouter des images dans une galerie à partir d'une archive ZIP ainsi que pour compresser les archives TAR des dossiers téléchargeables à partir du porte-documents, le module PHP zlib doit être installé.

Mise en situation

On extrait l'archive, ce qui crée par exemple le dossier squeletml-2.0. Pour avoir un site situé dans un répertoire, copier le dossier squeletml-2.0 sur le serveur et le renommer comme désiré, ce qui nous donne l'adresse http://www.nomDeDomaine.ext/monSiteSqueletml/. Pour avoir un site situé à la racine d'un nom de domaine, transférer sur le serveur le contenu du dossier squeletml-2.0, ce qui nous donne l'adresse http://www.nomDeDomaine.ext/.

Configuration

Actions obligatoires

Deux seuls fichiers doivent obligatoirement être créés et configurés, bien que vous voudrez probablement personnaliser ensuite le reste du site.

Tant que ces deux fichiers n'existent pas, la page d'accueil de votre installation de Squeletml émettra un avertissement.

Note: les personnes installant Squeletml sur un serveur de Free.fr doivent effectuer quelques manipulations supplémentaires. Voir un peu plus bas.

Le fichier init.inc.php

Avec la méthode de votre choix (par exemple en vous connectant par ftp au serveur hébergeant votre site), trouvez le fichier init.inc.php.defaut, situé à la racine de votre installation de Squeletml. Copiez-le et coller-le sous le nom init.inc.php (il faut donc enlever le defaut final du nom).

Ce fichier contient deux variables obligatoires à renseigner:

  • $urlRacine: il s'agit de l'adresse URL vers votre installation de Squeletml. Par exemple, http://www.nomDeDomaine.ext/monSiteSqueletml ou http://www.nomDeDomaine.ext.

  • $accueil[]: il s'agit d'un tableau contenant l'adresse url de l'accueil pour chaque langue de votre site. Si votre site est offert dans une seule langue, le tableau ne contiendra qu'un élément. Exemple:

    $accueil['fr'] = $urlRacine;
    

    Vous pouvez ajouter autant de langues que vous le désirez, dans la mesure où cette langue est offerte par défaut avec Squeletml ou que vous en effectuiez la traduction. Le français est la langue par défaut. Ainsi, l'interface de Squeletml sera toujours disponible à 100% dans cette langue. Pour l'instant, une traduction partielle en anglais accompagne Squeletml.

Une fois ce fichier renseigné, vous pouvez visiter dans votre navigateur l'adresse URL de votre installation, par exemple http://www.nomDeDomaine.ext/.

Note: il est possible de renommer le dossier d'administration pour plus de sécurité, qui est par défaut admin. La variable à modifier, $adminDossierAdmin, se trouve dans le fichier init.inc.php. Le cas échéant, modifier le chemin vers l'administration dans les exemples de cette documentation. Par exemple, modifier ceci:

http://www.nomDeDomaine.ext/admin/acces.admin.php

pour:

http://www.nomDeDomaine.ext/$dossierAdmin/acces.admin.php

Protection de l'administration (fichier .acces)

Une fois que le fichier init.inc.php existe et qu'il est correctement renseigné, il est important de protéger sans attendre la section d'administration du site. Pour ce faire, visitez la page suivante:

http://www.nomDeDomaine.ext/admin/acces.admin.php

et ajoutez un utilisateur. Les utilisateurs sont listés dans le fichier .acces situé à la racine de votre installation de Squeletml.

Actions obligatoires supplémentaires sur un serveur de Free.fr

Pour une installation de Squeletml sur un serveur de Free.fr, il faut effectuer en plus les deux actions obligatoires suivantes:

  • Ouvrir le fichier init.inc.php situé à la racine de l'installation. Trouver la variable $serveurFreeFr et modifier sa valeur pour TRUE.

  • Ouvrir le fichier .htaccess situé à la racine de l'installation. Trouver la ligne suivante:

    #php 1
    

et la décommenter, ce qui donne:

    php 1

Les autres fichiers

Le fichier .htaccess

Ce fichier contient entre autres l'adresse URL vers la page d'erreur 404 (toute personne tentant de visiter une page qui n'existe pas ou qui n'existe plus sur votre site sera redirigée vers cette page explicative). Si en visitant une page inexistante, vous ne voyez pas le contenu de la page d'erreur, ouvrez le fichier .htaccess, trouvez la ligne:

ErrorDocument 404 /404.php

et modifiez /404.php par la bonne adresse URL, par exemple http://www.nomDeDomaine.ext/404.php.

D'autres pages d'erreur sont déclarées dans le .htaccess, comme celle pour l'erreur 401. Au besoin, modifier dans le .htaccess le chemin de toutes les pages d'erreur.

Ce fichier va également contenir les instructions pour protéger le dossier d'administration.

Le fichier inc/config.inc.php

Ce fichier contient beaucoup de paramètres au sujet du site. Les variables modifiables sont en général documentées directement dans le fichier de configuration. Mais pour bien comprendre comment tirer partie des possibilités de ce fichier, il faut préalablement comprendre la structure de Squeletml. Vous serez ensuite en mesure de modifier des paramètres de votre site.

Architecture de Squeletml

Dossiers

L'arborescence de Squeletml est la suivante:

  • admin (le cas échéant, modifier le nom du dossier d'administration)
  • css
  • en
  • fichiers
  • inc
  • js
  • locale
  • site
  • xhtml

Tous les dossiers, à part site, font partie de la structure officielle par défaut de Squeletml, et les fichiers y étant contenus ne doivent pas être modifiés, sous peine de perdre les modifications lors d'une mise à jour de Squeletml.

Toute modification apportée à la configuration par défaut doit donc être effectuée dans le dossier site.

Par exemple, pour modifier l'apparence du site, ne modifiez pas le fichier css/style-general.css, mais créez un fichier dans site/css, par exemple site/css/style.css. Il faudra ensuite ajouter ce fichier dans les styles à inclure. Nous verrons comment faire un peu plus loin.

Pour ajouter des images, mettez vos fichiers dans site/fichiers. Pour ajouter des fichiers à inclure, créez des fichiers dans site/inc. Vous aurez compris, le dossier site recrée la structure par défaut de Squeletml, ce qui permet de pouvoir facilement personnaliser le site sans toucher aux fichiers officiels de Squeletml. La mise à jour du logiciel en sera grandement facilitée.

Le dossier inc

Le dossier inc contient tous les scripts déclarant et affectant les variables qui seront utilisées pour construire la structure XHTML. Aucun fichier de ce dossier ne génère un affichage vers le navigateur. Il y a donc une séparation dans Squeletml entre les fichiers d'analyse et ceux contenant le contenu envoyé au navigateur.

Les fichiers du dossier inc peuvent être personnalisés en créant un fichier de même nom dans site/inc, et Squeletml reconnaîtra automatiquement le fichier personnel:

  • blocs.inc.php: construit le code XHTML des blocs (menu des langues, menu principal, liens vers les flux RSS, etc.) pour une région spécifique. Après son inclusion, la variable $blocs est prête à être utilisée. Vous pouvez modifier cette variable en créant le fichier site/inc/blocs.inc.php, qui sera inséré à la fin de celui par défaut.

  • categories.inc.php: construit et analyse la liste des articles faisant partie de la catégorie demandée. Après son inclusion, la variable $categorie est prête à être utilisée. Vous pouvez modifier cette variable en créant le fichier site/inc/categorie.inc.php, qui sera inséré à la fin de celui par défaut.

  • config.inc.php: contient presque toute la configuration du site, autant pour le formulaire de contact, les galeries photos, le titre du site, etc. Pour modifier une variable de ce fichier, créer le fichier site/inc/config.inc.php et y réaffecter les variables dont vous voulez changer la valeur. S'il existe, ce fichier sera inséré après celui par défaut.

  • constantes.inc.php: contient les constantes PHP utilisées dans Squeletml. Vous pouvez ajouter vos propres constantes en créant le fichier site/inc/constantes.inc.php. S'il existe, ce fichier sera inséré après celui par défaut.

  • contact.inc.php: construit et analyse le formulaire de contact. Après son inclusion, la variable $contact est prête à être utilisée et contient les messages (d'erreur ou de confirmation) affichés à l'internaute et le formulaire en tant que tel. Il est possible d'interagir avec ce script en créant le fichier site/inc/contact.inc.php, qui sera inséré à différentes étapes du script:

    • juste après l'analyse des champs par défaut du formulaire, ce qui permet entre autres d'avoir des champs personnalisés et d'utiliser son propre script d'analyse de ces champs. Les variables utiles lors d'une analyse personnalisée sont $erreurFormulaire, qui annule l'envoi du message si elle vaut TRUE, et $messagesScript, qui contient les explications affichées après le traitement du formulaire.

    • juste avant l'envoi du message, ce qui permet de modifier le corps du message, l'objet, etc.

    • à la fin du fichier par défaut.

  • dernier.inc.php: gère l'inclusion des fichiers et l'affectation des variables nécessaires à la construction de la structure XHTML suivant le contenu ajouté directement dans une page du site. Vous pouvez créer le fichier site/inc/dernier.inc.php, qui sera inséré à la fin de celui par défaut.

  • faire-decouvrir.inc.php: crée les variables nécessaires à l'incorporation au formulaire de contact du module «Faire découvrir». Vous pouvez modifier ces variables en créant le fichier site/inc/faire-decouvrir.inc.php, qui sera inséré à la fin de celui par défaut.

  • fonctions.inc.php: contient les fonctions utilisées dans Squeletml. Vous pouvez créer vos propres fonctions dans le fichier site/inc/fonctions.inc.php, qui sera inséré après celui par défaut.

  • galerie.inc.php: génère les variables nécessaires à l'affiche d'une galerie ou d'une page individuelle d'une oeuvre. Vous pouvez modifier ces variables en créant le fichier site/inc/galerie.inc.php, qui sera inséré à la fin de celui par défaut.

  • premier.inc.php: gère l'inclusion des fichiers et l'affectation des variables nécessaires à la construction de la structure XHTML précédant le contenu ajouté directement dans une page du site. Vous pouvez créer le fichier site/inc/premier.inc.php, qui sera inséré à la fin de celui par défaut.

Note: le principe de personnalisation des fichiers du dossier inc est applicable également à la section d'administration. La structure répliquée à l'intérieur du dossier site doit être contenue dans un dossier de même nom que celui de l'administration, qui est admin par défaut. Par exemple, pour modifier des variables du fichier de configuration admin/inc/config.inc.php, créer le fichier site/admin/inc/config.inc.php.

Le dossier xhtml

Le dossier xhtml contient tous les fichiers contenant la structure XHTML envoyée au navigateur. Autrement dit, les variables nécessaires à la construction d'une page ont été déclarées et affectées par les scripts du dossier inc, et elles seront utilisées dans les fichiers du dossier xhtml.

Les fichiers du dossier xhtml peuvent être personnalisés en créant un fichier de même nom dans site/xhtml, et Squeletml reconnaîtra automatiquement le fichier personnel. Par exemple, pour modifier le menu en français, créer un fichier site/xhtml/fr/menu.inc.php, qui sera inséré à la place du fichier par défaut.

Il est également possible d'utiliser le même fichier pour toutes les langues du site. Pour ce faire, placer le fichier à la racine du dossier site/xhtml/. Par exemple, un menu commun à toutes les langues se trouvera dans site/xhtml/menu.inc.php.

Liste des fichiers

Pour commencer, il y a les fichiers de la structure XHTML générale de la page:

  • form-contact.inc.php: modèle du formulaire de contact. Vous pouvez utiliser votre propre modèle en créant le fichier site/xhtml/(LANGUE/)form-contact.inc.php, qui sera utilisé à la place du modèle par défaut. Vous pouvez également ajouter des champs supplémentaires au modèle par défaut. Ainsi, si le fichier site/xhtml/(LANGUE/)form-contact.inc.php n'existe pas, des champs supplémentaires sous le champ nom peuvent être inclus dans le modèle par défaut grâce au fichier site/xhtml/(LANGUE/)form-contact-champs-apres-nom.inc.php, et des champs supplémentaires sous le message peuvent être inclus grâce au fichier site/xhtml/(LANGUE/)form-contact-champs-apres-message.inc.php.

  • page.dernier.inc.php: modèle de page suivant le contenu ajouté directement par l'utilisateur. Vous pouvez utiliser votre propre modèle en créant le fichier site/xhtml/(LANGUE/)page.dernier.inc.php, qui sera utilisé à la place du modèle par défaut.

  • page.premier.inc.php: modèle de page précédant le contenu ajouté directement par l'utilisateur. Vous pouvez utiliser votre propre modèle en créant le fichier site/xhtml/(LANGUE/)page.premier.inc.php, qui sera utilisé à la place du modèle par défaut.

Ensuite, il y a les fichiers de division XHTML, qui sont, pour le français:

  • fr/ancres.inc.php
  • fr/bas-de-page.inc.php
  • fr/menu.inc.php
  • fr/menu-langues.inc.php
  • fr/sous-titre.inc.php
  • fr/sur-titre.inc.php

    Pour chaque autre langue, le fr est remplacé par le code approprié, par exemple en/menu.inc.php.

Il y a enfin les fichiers des pages par défaut:

  • fr/page.401.inc.php
  • fr/page.404.inc.php
  • fr/page.contact.inc.php
  • fr/page.index.inc.php

    Pour chaque autre langue, le fr est remplacé par le code approprié, par exemple en/page.index.inc.php.

    Il s'agit des pages livrées par défaut avec Squeletml. C'est pour cette raison que leur contenu se trouve dans un fichier à inclure, sinon la mise à jour du logiciel risquerait de supprimer les modifications effectuées. Toute autre page créée dans le site n'aura pas à utiliser ce système d'inclusion. Pour personnaliser une page livrée par défaut, par exemple la page d'accueil, créer le fichier site/xhtml/fr/page.index.inc.php, qui sera inclus à la place du fichier par défaut.

    La seule page que vous voudrez sans aucun doute personnaliser est la page d'accueil. Le système d'inclusion expliqué ci-dessus est donc tout indiqué. Cependant, pour les autres pages, il ne s'agit pas d'une nécessité absolue. En effet, les pages d'erreur 401 et 404 affichent un message standard et propose un lien vers l'accueil, et pour sa part, la page de contact peut utiliser un courriel par défaut si vous renseignez la variable $contactCourrielParDefaut dans le fichier de configuration.

Dossiers inutiles pour une configuration donnée

Le dossier d'une langue inactivée peut être supprimé, tout comme les pages livrées par défaut et qui ne sont pas utilisées. Par exemple, si votre site est seulement en français, le dossier en peut être supprimé. C'est également le cas des pages exemple.php et galerie-demo.php à la racine du site si ces dernières ne sont pas utilisées.

Lors d'une mise à jour, il est également inutile de copier ces dossiers ou fichiers.

Structure XHTML par défaut

Voici un modèle simplifié d'une page de Squeletml par défaut:

Doctype XHTML 1.0 Strict..
<html ...><!-- Langue de la page en cours. -->
    <!-- ____________________ <head> ____________________ -->
    <head>
        <!-- Titre. -->
        <title>...</title>

        <!-- Métabalises. -->
        Encodage UTF-8.
        Description.
        Robots.

        <!-- Balises `link` et `script`. -->
        Feuilles de style et scripts Javascript.
    </head>
    <!-- ____________________ <body> ____________________ -->
    <body class="...">
        <!-- ____________________ #ancres ____________________ -->
        <div id="ancres">
            ...
        </div><!-- /#ancres -->

        <!-- ____________________ Message pour IE6. ____________________ -->
        <!--[if lt IE 7]>
            <div id="messageIe6">
                ...
            </div><!-- /#messageIe6 -->
        <![endif]-->

        <!-- ____________________ #page ____________________ -->
        <div id="page">
          <div id="interieurPage">
            <!-- ____________________ #enTete ____________________ -->
                <div id="enTete">
                    <div id="titre">
                        Titre du site dans un `h1` s'il s'agit de la page d'accueil, sinon dans un `p`.
                    </div><!-- /#titre -->

                    <div id="sousTitre">
                        ...
                    </div><!-- /#sousTitre -->
                </div><!-- /#enTete -->

                <!-- ____________________ #surContenu ____________________ -->
                <div id="surContenu">
                    Vide par défaut, donc `div` pas incluse.
                </div><!-- /#surContenu -->

                <!-- ____________________ #contenu ____________________ -->
                <div id="contenu" class="...">
                    <div id="interieurContenu">
                        <div id="debutInterieurContenu">
                            Vide par défaut, donc `div` pas incluse.
                        </div><!-- /#debutInterieurContenu -->

                        Contenu entré directement par l'utilisateur.

                        <div id="finInterieurContenu">
                            Vide par défaut, donc `div` pas incluse.
                        </div><!-- /#finInterieurContenu -->
                    </div><!-- /#interieurContenu -->
                </div><!-- /#contenu -->

                <!-- ____________________ #sousContenu ____________________ -->
                <div id="sousContenu">
                    <div id="menuLangues" class="bloc">
                        ...
                    </div><!-- /#menuLangues -->

                    <div id="menu" class="bloc">
                        ...
                    </div><!-- /#menu -->

                    <div id="faireDecouvrir" class="bloc">
                        ...
                    </div><!-- /#faireDecouvrir -->

                    <div id="fluxRss" class="bloc">
                        ...
                    </div><!-- /#fluxRss -->
                </div><!-- /#sousContenu -->

                <!-- ____________________ #basDePage ____________________ -->
                <div id="basDePage">
                    ...
                </div><!-- /#basDePage -->
            </div><!-- /#interieurPage -->
        </div><!-- /#page -->

        Balises `script` finales.
    </body>
</html>

D'autres div peuvent apparaître à la suite de <div id="interieurContenu"> selon le module en cours d'utilisation, par exemple <div id="galerie"> lorsque nous visitons la page d'une galerie. Aussi, certaines div peuvent être positionnées ailleurs selon les choix effectués dans le fichier de configuration, par exemple le menu. Enfin, il est possible d'utiliser son propre modèle de page, comme expliqué à la section «Le dossier xhtml».

Nombre de colonnes et blocs de contenu

Les sections «Style CSS» et «Contenu et ordre du flux HTML» du fichier de configuration contiennent beaucoup commentaires explicatifs. Tout ne sera pas repris ici, mais en résumé, il est possible de choisir le nombre de colonnes ainsi que l'ordre de leur contenu. Le principe est le suivant: plusieurs blocs de contenu existent par défaut, comme le menu des langues, le menu principal, les liens vers les flux RSS, etc. Il est possible également d'ajouter ses propres blocs.

Chaque bloc peut être positionné dans une région spécifique de la page (et dans l'ordre voulu à l'intérieur d'une même région): enTete, surContenu, debutInterieurContenu, finInterieurContenu, sousContenu ou basDePage. Chaque nom de région correspond à une div du modèle de page.

Selon le style affecté (voir la section «Style CSS» du fichier de configuration), les div surContenu et sousContenu vont être positionnées dans la page pour remplir la ou les colonnes, ou bien, s'il n'y a pas de colonne, le dessus ou le dessous du contenu. Les possibilités sont donc:

  • aucune colonne, les blocs étant positionnés au-dessus ou au-dessous du contenu selon leur configuration;
  • une seule colonne à gauche;
  • une seule colonne à droite;
  • deux colonnes dont celle de gauche est remplie par les blocs de surContenu et celle de droite par les blocs de sousContenu;
  • deux colonnes dont celle de gauche est remplie par les blocs de sousContenu et celle de droite par les blocs de surContenu.

Il est bon de rappeler qu'un modèle de page personnalisé peut être utilisé (voir la section «Le dossier xhtml»), et que les blocs peuvent alors être affichés ailleurs selon le modèle utilisé.

Schéma des inclusions lors de la construction d'une page

Note: le schéma doit se lire ainsi:

  • fichier: le fichier existe et il sera inséré;
  • fichier: le fichier sera inséré seulement s'il existe;
  • fichier1 || fichier2: une seule insertion au maximum aura lieu, le premier fichier existant, vérifié de gauche à droite, sera inséré.

Voici le schéma des inclusions pour une page par défaut. Seuls les fichiers principaux et pour lesquels une personnalisation est possible sont listés.

  • inc/premier.inc.php
    • inc/fonctions.inc.php
    • site/inc/fonctions.inc.php
    • inc/config.inc.php
    • site/inc/config.inc.php
    • inc/constantes.inc.php
    • site/inc/constantes.inc.php
    • Si $idCategorie n'est pas vide: inc/categorie.inc.php
      • site/inc/categorie.inc.php
    • Si $idGalerie n'est pas vide: inc/galerie.inc.php
      • site/inc/galerie.inc.php
    • inc/blocs.inc.php
      • inc/faire-decouvrir.inc.php
        • site/inc/faire-decouvrir.inc.php
      • Inclusions selon les blocs configurés. Exemple pour le menu des langues:
        site/xhtml/$langueDeLaPage/menu-langues.inc.php || xhtml/$langueDeLaPage/menu-langues.inc.php || site/xhtml/$langueParDefaut/menu-langues.inc.php || xhtml/$langueParDefaut/menu-langues.inc.php || site/xhtml/menu-langues.inc.php || xhtml/menu-langues.inc.php
      • site/inc/blocs.inc.php
    • site/inc/premier.inc.php
    • site/xhtml/(LANGUE/)page.premier.inc.php || xhtml/(LANGUE/)page.premier.inc.php
  • Contenu de la page
  • inc/dernier.inc.php
    • inc/blocs.inc.php (voir les détails plus haut)
    • inc/contact.inc.php
      • inc/faire-decouvrir.inc.php (voir les détails plus haut)
      • site/inc/contact.inc.php après le traitement des champs par défaut
      • site/inc/contact.inc.php avant l'envoi du message
      • inc/faire-decouvrir.inc.php (voir les détails plus haut)
      • site/xhtml/(LANGUE/)form-contact.inc.php || (xhtml/(LANGUE/)form-contact.inc.php && site/xhtml/(LANGUE/)form-contact-champs-apres-nom.inc.php && site/xhtml/(LANGUE/)form-contact-champs-apres-message.inc.php)
      • site/inc/contact.inc.php à la fin du fichier
    • site/inc/dernier.inc.php
    • site/xhtml/(LANGUE/)page.dernier.inc.php || xhtml/(LANGUE/)page.dernier.inc.php

Style de Squeletml

Le style d'un site réalisé avec Squeletml peut être modifié comme n'importe quel autre site à l'aide de feuilles de style CSS. Il est même possible de ne pas inclure les feuilles par défaut et partir de zéro. Cependant, le fichier de configuration contient une section «Style CSS», offrant la possibilité de modifier quelques aspects du site sans devoir bidouiller dans une feuille de style ou modifier le modèle de page (voir la section «Dossiers»). L'utilisation du fichier de configuration pour modifier le style n'est pas du tout une obligation, mais une aide supplémentaire si besoin il y a.

Voici quelques exemples:

  • ajout de coins arrondis aux blocs de contenu;
  • nombre de colonnes;
  • emplacement d'une colonne unique;
  • arrière-plan d'une colonne; contenu affichable ou masquable par un clic sur le titre;
  • ajout d'une classe actif aux liens pointant vers la page en cours dans les blocs de contenu; -limite de la profondeur d'une liste dans les blocs de contenu (classe masquer ajoutée aux sous-listes inactives);
  • etc.

Traduction de Squeletml

Il est possible de traduire Squeletml dans la langue désirée. Le principal fichier est locale/squeletml.pot. Il contient la plupart des phrases à traduire. Les autres fichiers sont:

  • admin/versions-solo.admin.php (le cas échéant, modifier le nom du dossier d'administration)
  • xhtml/fr/ancres.inc.php
  • xhtml/fr/bas-de-page.inc.php
  • xhtml/fr/menu.inc.php
  • xhtml/fr/menu-langues.inc.php
  • xhtml/fr/sous-titre.inc.php
  • xhtml/fr/sur-titre.inc.php
  • xhtml/fr/page.401.inc.php
  • xhtml/fr/page.404.inc.php
  • xhtml/fr/page.contact.inc.php
  • xhtml/fr/page.galerie.inc.php
  • xhtml/fr/page.index.inc.php
  • documentation.mdtxt
  • LISEZ-MOI.mdtxt
  • maintenance.php

Mise à jour de Squeletml

Note: lisez toute cette section avant d'effectuer une mise à jour.

Pour mettre à jour Squeletml:

  • Visitez la page http://www.nomDeDomaine.ext/admin/acces.admin.php et mettez votre site en maintenance (hors ligne). Vous pouvez ajouter votre adresse IP dans le champ prévu à cet effet pour avoir encore accès à votre site durant la maintenance.

    La page de maintenance n'a pas de dépendance à des fichiers du site, à l'exception du fichier .htaccess de la racine, ce qui veut dire qu'en mode maintenance, vous pouvez supprimer ou déplacer tous les fichiers voulus, à l'exception de maintenance.php et .htaccess.

    Note: la réécriture d'URL doit être activée sur votre serveur pour utiliser cette fonctionnalité. Si tel n'est pas le cas, ignorez le mode maintenance et passez à l'étape suivante.

  • Téléchargez l'archive de la dernière version et extrayez son contenu. Vous allez obtenir un dossier dont le nom ressemble à squeletml-2.0.

  • Ensuite, sélectionnez et copiez tout le contenu de ce dossier, à l'exception éventuellement de ce qui suit: vous avez fort probablement personnalisé le fichier .htaccess (ne serait-ce que pour protéger l'accès à l'administration), et peut-être le fichier robots.txt. Dans ce cas, ne copiez pas le ou les fichiers modifiés. Vous pouvez cependant vérifier si ces fichiers ont été modifiés dans la nouvelle version de Squeletml et, si tel est le cas, les éditer à la main pour y appliquer les changements.

  • Maintenant, collez votre précédente sélection dans l'emplacement de votre site, et ce en acceptant de fusionner les dossiers et d'écraser les fichiers déjà existants.

Il s'agit probablement de la méthode la plus simple. Cependant, de vieux fichiers supprimés entre deux versions de Squeletml peuvent encore être présents sur votre site. Pour une mise à jour totalement propre, vous pouvez supprimer les fichiers de Squeletml de votre site avant d'y coller votre précédente sélection. Prenez garde cependant à ne pas supprimer, en plus des fichiers .htaccess ou robots.txt, le dossier site, qui contient votre configuration personnalisée, éventuellement les dossiers des différentes langues si votre site est multilingue (par exemple, si vous avez une section en anglais, vous avez fort probablement créé des pages personnalisées dans le dossier en) ainsi que les pages que vous avez vous-même ajoutées.

Notes:

  • si vous avez modifié le nom du dossier d'administration, ne pas oublier de supprimer l'ancien dossier et de renommer le nouveau;
  • la lecture de la section «Dossiers inutiles pour une configuration donnée» est suggérée en complément à cette explication sur la mise à jour de Squeletml.

Création de pages

Il y a plusieurs manières de créer une page:

  1. Créer un fichier vide et reproduir la structure d'une page.
  2. Copier le fichier exemple.php et le coller avec le nom désiré.
  3. Dans le porte-documents de la section d'administration, créer un nouveau fichier de type «Fichier modèle de page web» ou «Fichier modèle HTML de page web avec syntaxe Markdown».

Voici l'anatomie d'une page:

  1. variables PHP
  2. inclusion du premier fichier PHP
  3. contenu de la page
  4. inclusion du dernier fichier PHP

Variables PHP

Voici les différentes variables optionnelles avant l'inclusion du premier fichier PHP:

  • $apercu: aperçu de la page en cours, inséré en tant que commentaire HTML au début de la div interieurContenu s'il n'est pas vide et si $inclureApercu du fichier de configuration vaut TRUE.

    Si $apercu vaut exactement interne ($apercu = "interne";), le commentaire HTML inséré sera donc <!-- APERÇU: interne -->, ce qui signifiera à Squeletml d'utiliser comme aperçu tout le texte situé entre l'ouverture de la div interieurContenu et le commentaire <!-- /aperçu -->. S'il y a lieu, des balises HTML seront fermées pour rendre le code de l'aperçu valide. Exemple:

    <div id="interieurContenu">
        <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In sapien ante; dictum id, pharetra ut, malesuada<!-- /aperçu --> et, magna. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Praesent tempus; odio ac sagittis vehicula; mauris pede tincidunt lacus, in euismod orci mauris a quam. Sed justo. Nunc diam.</p>
    

    Sinon si $apercu vaut exactement description ($apercu = "description";), le commentaire HTML inséré sera donc <!-- APERÇU: description -->, ce qui signifiera à Squeletml d'utiliser comme aperçu le contenu de la métabalise description.

  • $auteur: nom ou noms à inclure dans la métabalise author, si différents du nom ou des noms par défaut déclarés dans le fichier de configuration. Si elle existe, cette variable sera utilisée dans le listage des articles faisant partie d'une catégorie ainsi que dans le bloc des informations de publication.

  • $baliseTitle: contenu de la balise title. Si cette variable est vide, elle se verra assigner l'URL de la page en cours.

  • $boitesDeroulantes: permet d'activer les boîte déroulantes pour du contenu présent dans la page en cours. Voir les commentaires de la variable $boitesDeroulantesParDefaut dans le fichier de configuration pour une description détaillée de la syntaxe à utiliser.

  • $boitesDeroulantesAlaMain: prend la valeur TRUE ou FALSE. Si vaut TRUE, les fichiers nécessaires à la gestion d'une boîte déroulante (Javascript et CSS) seront inclus, mais l'appel à la fonction Javascript boiteDeroulante() ne se fera pas de manière automatique, mais à la main par l'utilisateur, qui devra insérer la fonction à l'endroit désiré dans le code de la page.

    La variable $boitesDeroulantesAlaMainParDefaut, déclarée dans le fichier de configuration, s'applique à toutes les pages du site. Utiliser $boitesDeroulantesAlaMain pour changer la valeur par défaut pour une page spécifique.

  • $classesBody: permet d'ajouter des classes à la balise body. Voici un exemple:

    $classesBody = 'maClasse1 maClasse2';
    
  • $classesContenu: permet d'ajouter des classes à la div contenu. Voir $classesBody pour un exemple d'utilisation.

  • $courrielContact: adresse courriel qui va recevoir les messages du formulaire de contact. Si cette variable existe et n'est pas vide, un formulaire de contact sera automatiquement inclus dans la page. Il est donc facile de créer autant de formulaires que désiré en créant pour chacun une page contenant une varibale $courrielContact.

    Note: dans le formulaire de contact livré par défaut avec Squeletml, cette variable vaut simplement @. Puisqu'elle n'est pas vide, un formulaire de contact s'affiche. Cependant, le formulaire par défaut n'est pas utilisable en ce sens que la valeur de $courrielContact n'est pas une adresse réelle. Toutefois, si la variable $contactCourrielParDefaut est renseignée dans le fichier de configuration, toutes les variables $courrielContact valant exactement @ prendront la valeur de $contactCourrielParDefaut, ce qui évite de devoir créer une page de contact personnalisée simplement parce que le formulaire par défaut n'a pas une adresse valide.

  • $dateCreation: date de création de la page, sous la forme AAAA-MM-JJ, incluse dans la métabalise date-creation-yyyymmdd. Si elle existe, cette variable sera utilisée dans le listage des articles faisant partie d'une catégorie, dans le classement des items des flux RSS et dans le bloc des informations de publication.

  • $dateRevision: date de dernière révision de la page, sous la forme AAAA-MM-JJ, incluse dans la métabalise date-revision-yyyymmdd. Si elle existe, cette variable sera utilisée dans le bloc des informations de publication, dans le listage des articles faisant partie d'une catégorie et, si $dateCreation n'existe pas, dans le classement des items des flux RSS.

  • $description: contenu de la métabalise description. Si cette variable est vide, la métabalise description ne sera pas incluse dans l'en-tête de la page.

  • $faireDecouvrir: prend la valeur TRUE ou FALSE, selon qu'on veut activer ou non cette option pour la page courante.

    La variable $activerFaireDecouvrirParDefaut, déclarée dans le fichier de configuration, s'applique à toutes les pages du site. Utiliser $faireDecouvrir pour changer la valeur par défaut pour une page spécifique.

  • $idCategorie: un nombre, un mot ou une phrase identifiant la catégorie à chercher pour afficher la liste des articles en faisant partie. Voir la section «Catégories».

  • $idGalerie: un nombre, un mot ou une phrase identifiant la galerie. Représente le nom du répertoire qui sera lu dans site/fichiers/galeries pour lister les images. Par défaut, cette variable est vide, mais si elle n'est pas vide, et si le fichier de configuration existe pour cet id (voir la section «Galeries»), une galerie sera insérée dans la page.

    Par exemple, si nous avons $idGalerie = "mes-voyages";, Squeletml va rechercher le dossier site/fichiers/galeries/mes-voyages. Si ce dossier ou le fichier de configuration n'existent pas, un message d'erreur informe de l'inexistence de la galerie.

  • $infosPublication: prend la valeur TRUE ou FALSE, selon qu'on veut afficher ou non les informations de publication (auteur, date de création, date de dernière révision).

  • $langue: langue de la page courante, si différente de la langue par défaut déclarée dans le fichier de configuration.

  • $licence: licence de la page courante, si différente de la licence par défaut déclarée dans le fichier de configuration. Plusieurs licences peuvent être déclarées, chacune devant être séparée par une espace. Voici un exemple:

    $licence = 'art-libre cc-by-sa';
    

    Voir la fonction licence() pour connaître tous les choix possibles.

  • $marquePagesSociaux: prend la valeur TRUE ou FALSE, selon qu'on veut activer ou non cette option pour la page courante.

    La variable $activerMarquePagesSociauxParDefaut, déclarée dans le fichier de configuration, s'applique à toutes les pages du site. Utiliser $marquePagesSociaux pour changer la valeur par défaut pour une page spécifique.

  • $motsCles: contenu de la métabalise keywords. Si cette variable est vide ou inexistante, elle sera générée automatiquement à partir du contenu de la variable $description. Prenez note que si $inclureMotsCles vaut FALSE dans le fichier de configuration, les mots-clés ne seront pas ajoutés à l'en-tête de la page, même si $motsCles n'est pas vide.

  • $robots: contenu de la métabalise robots, si différent du contenu par défaut déclaré dans le fichier de configuration.

  • $rssCategorie: prend la valeur TRUE ou FALSE, selon qu'on veut activer ou non la syndication de contenu individuelle pour la catégorie en question, si la valeur est différente de $activerFluxRssCategorieParDefaut du fichier de configuration.

  • $rssGalerie: prend la valeur TRUE ou FALSE, selon qu'on veut activer ou non la syndication de contenu individuelle pour la galerie en question, si la valeur est différente de $galerieActiverFluxRssParDefaut du fichier de configuration.

  • $tableDesMatieres: prend la valeur TRUE ou FALSE, selon qu'on veut générer ou non une table des matières pour la page en question. La table des matières est générée par Javascript. Son contenu correspond à tous les titres de niveaux 2 à 6 présents à l'intérieur de la div interieurContenu. La table est ajoutée au début de cette div.

    La variable $afficherTableDesMatieresParDefaut, déclarée dans le fichier de configuration, s'applique à toutes les pages du site. Utiliser $tableDesMatieres pour changer la valeur par défaut pour une page spécifique.

Inclusion du premier fichier PHP

Il suffit d'inclure le fichier inc/premier.inc.php.

Cas de l'installation par défaut de Squeletml

Ne pas oublier de vérifier le chemin d'inclusion. Par exemple, pour une page à la racine du site, ça donnera:

include 'inc/premier.inc.php';

Pour une page dans un dossier:

include '../inc/premier.inc.php';

Pour une page dans un sous-dossier (dossier d'un dossier):

include '../../inc/premier.inc.php';

Note: si la page est créée à partir du porte-documents dans la section d'administration, le bon chemin d'inclusion est automatiquement inséré.

Cas avec insertion automatique du fichier init.inc.php

Note: je n'ai pas testé cette possibilité, et ce n'est pas supporté officiellement dans Squeletml.

Le fichier init.inc.php contient entre autres la variable $racine. En faisant insérer automatiquement ce fichier dans toutes les pages, il est donc possible d'utiliser la variable $racine pour inclure le fichier inc/premier.inc.php, ce qui nous dispense de devoir modifier le chemin d'inclusion selon le dossier dans lequel la page est située.

Pour ce faire, ouvrir le fichier .htaccess, trouver la ligne contenant la directive auto_prepend_file, et la décommenter, ce qui va donner:

<FilesMatch "\.(php)$"> 
    php_value auto_prepend_file "/var/www/serveur_local/squeletml/init.inc.php"
</FilesMatch>

Ne pas oublier de modifier le chemin d'inclusion du fichier init.inc.php.

Contenu

Mettre tout ce que vous désirez. Du texte, du code HTML, du code PHP, etc.

Utilisation de la syntaxe Markdown

Il est possible d'utiliser la syntaxe Markdown. Pour ce faire, il y a deux fonctions mises à disposition:

Fonction mdtxt()

Écrire le contenu en Markdown dans un fichier. Ensuite, faire appel à cette fonction dans la page du site. Exemple:

  1. Création du fichier Markdown, par exemple ma-page.php.mdtxt.

  2. Création de la page PHP, par exemple ma-page.php, comme n'importe quelle autre page du site. On suppose dans cet exemple que le fichier ma-page.php.mdtxt et la page ma-page.php sont dans le même dossier (ce n'est pas obligatoire).

  3. À l'intérieur de ma-page.php, à l'endroit où on insère habituellement le contenu, faire appel à la fonction suivante:

    <?php echo mdtxt('ma-page.php.mdtxt'); ?>
    

Note: si la page a été créée dans le porte-documents de la section d'administration avec le type «Fichier modèle HTML de page web avec syntaxe Markdown», tout ceci est effectué automatiquement.

Fonction mdtxtChaine()

On peut passer directement une chaîne écrite en Markdown à la fonction mdtxtChaine(). Exemple:

  1. Création d'une page pour le site, par exemple une-page.php.

  2. À l'endoit où on insère habituellement le contenu, utiliser la fonction suivante:

    <?php echo mdtxtChaine("Du texte écrit en *Markdown*."); ?>
    

    Même exemple, mais avec une variable:

    <?php
    $chaine = "Du texte écrit en *Markdown*.";
    echo mdtxtChaine($chaine);
    ?>
    

    Autre exemple avec une variable dont le contenu est plus long:

    <?php
    $chaine = <<<TEXTE
    Du texte écrit en *Markdown*.
    
    Liste:
    
    - Item 1
    - Item 2
    
    Paragraphe.
    TEXTE;
    
    echo mdtxtChaine($chaine);
    ?>
    

Variables et constantes utiles

Quelques variables et constantes PHP peuvent être utilisées dans la rédaction du contenu pour faciliter l'élaboration des chemins vers certains fichiers:

Variables
  • $accueil: tableau permettant d'utiliser un lien vers l'accueil de n'importe quelle langue. Par exemple, dans une page en français:

    <a href="<?php echo $accueil['en']; ?>/gallery.php">lien vers une galerie dans la section en anglais</a>
    
  • $racine: contient le chemin sur le serveur vers le dossier d'installation de Squeletml. Exemple d'inclusion d'un fichier situé à la racine de l'installation de Squeletml:

    <?php include $racine . '/fichier.inc.php'; ?>
    
  • $urlRacine: contient l'URL vers le dossier d'installation de Squeletml. Exemple:

    <a href="<?php echo $urlRacine; ?>/cron.php">lien vers la page de cron</a>
    
  • $urlRacineAdmin: contient l'URL vers le dossier d'administration de Squeletml. Exemple:

    <a href="<?php echo $urlRacineAdmin; ?>">lien vers la section d'administration</a>
    
  • $urlSite: contient l'URL vers le dossier site. Exemple de lien vers une image:

    <a href="<?php echo $urlSite; ?>/fichiers/image.jpg">lien vers une image</a>
    
  • $urlFichiers: contient l'URL vers le dossier site/fichiers. Exemple de lien vers la même image:

    <a href="<?php echo $urlFichiers; ?>/image.jpg">lien vers une image</a>
    
  • variables relatives à l'URL de la page en cours (à moins d'indication contraire, dans les exemples qui suivent, l'URL de référence est http://www.NomDeDomaine.ext/fichier.php?a=1&b=2):

    • $nomPage: contient le nom de la page en cours. Exemple:

      fichier.php
      
    • $url: contient l'URL de la page en cours. Exemple:

      http://www.NomDeDomaine.ext/fichier.php?a=1&b=2
      
    • $urlSansGet: contient l'URL de la page en cours sans les variables GET. Exemple:

      http://www.NomDeDomaine.ext/fichier.php
      
    • $urlAvecIndexSansGet: contient l'URL de la page en cours sans les variables GET et avec le fichier d'index, s'il y a lieu. Pour l'URL http://www.NomDeDomaine.ext/actualite/?a=1&b=2, la valeur serait par exemple:

      http://www.NomDeDomaine.ext/actualite/index.php
      
Constantes
  • ACCUEIL: contient l'URL pointant vers l'accueil de la langue de la page.

    • Exemple d'utilisation dans une page dont la langue est le français:

      <a href="<?php echo ACCUEIL; ?>/contact.php">lien vers la page contact de la section en français</a>
      
    • Exemple d'utilisation dans une page dont la langue est l'anglais:

      <a href="<?php echo ACCUEIL; ?>/contact.php">lien vers la page contact de la section en anglais</a>
      
  • LANGUE: contient la langue de la page en cours. Exemple de valeur:

    `fr`
    

Liste des dernières publications

La fonction publicationsRecentes() permet d'obtenir la liste des dernières publications pour un type de publication donné: une catégorie, une galerie, toutes les galeries ou tout le site. Voici un exemple:

$dernieresOeuvres = publicationsRecentes($racine, $urlRacine, $langueParDefaut, LANGUE, 'galerie', "chiens", 5, TRUE, $dureeCache, $galerieFluxRssAuteurEstAuteurParDefaut, $auteurParDefaut, $galerieLienOriginalTelecharger);

Dans l'exemple ci-dessus, la variable $dernieresOeuvres contient les 5 dernières oeuvres ajoutées à la galerie chiens, et ce sous la forme d'une liste (formée de balises li dans un ul) dont chaque item contient la vignette d'une oeuvre et un lien vers la page individuelle de l'oeuvre. Aussi, le septième paramètre vaut TRUE, donc un lien «Voir plus d'oeuvres» est ajouté à la fin de la liste vers l'accueil de la galerie.

Pour les types de publication categorie et site, la fonction renvoie une liste de titres pointant vers la page en question.

Voir les explications de la fonction publicationsRecentes() dans le fichier inc/fonctions.inc.php pour plus de détails.

Coloration de code PHP

Il est possible d'utiliser une version personnalisée des fonctions highlight_string() et highlight_file() de PHP. En effet, coloreCodePhp() et coloreFichierPhp() remplacent les espaces insécables par des espaces normales et modifient les couleurs par défaut (entre autres pour améliorer le contraste des commentaires).

Les deux premiers paramètres sont les mêmes que ceux des fonctions natives de PHP. De plus, un paramètre supplémentaire permet d'afficher les commentaires en noir.

Exemples:

<?php coloreFichierPhp($cheminFichier); ?>
<?php $texte = coloreFichierPhp($cheminFichier, TRUE); ?>
<?php coloreCodePhp($code, FALSE, TRUE); ?>

Voir la déclaration de la fonction dans le fichier inc/fonctions.inc.php pour plus de détails.

Inclusion du dernier fichier PHP

Il suffit d'inclure le fichier inc/dernier.inc.php. Cette fois-ci, il n'est pas nécessaire de faire attention au chemin d'inclusion. Nous pouvons utiliser la variable $racine. Exemple:

<?php include $racine . '/inc/dernier.inc.php'; ?>

Exemple complet

Voici un exemple minimal:

<?php
$baliseTitle = "Titre (contenu de la balise `title`)";
$description = "Description de la page.";
include 'inc/premier.inc.php'; // Le cas échéant, modifier le chemin d'inclusion
?>

<h1>Titre de la page</h1>

<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>

<?php include $racine . '/inc/dernier.inc.php'; ?>

Catégories

Squeletml propose un moyen de regrouper des pages: les catégories. Il ne faut au minimum qu'un fichier de configuration pour utiliser cette fonctionnalité. Le fichier de configuration site/inc/categories.ini.txt ou site/inc/categories.ini peut être créé à la main ou à l'aide du script de gestion des catégories dans la section d'administration de Squeletml. Ce fichier doit contenir la liste des pages pour chaque catégorie, et ce sous la forme suivante:

[id de la catégorie]
pages[]=URL relative de la page

L'URL relative est le chemin de la page à partir de l'URL racine du site. Exemple:

[Chiens]
pages[]=animaux/chiens/husky.php
pages[]=animaux/chiens/malamute.php

Les deux pages en question sont accessibles respectivement à l'adresse:

$urlRacine/animaux/chiens/husky.php

et:

$urlRacine/animaux/chiens/malamute.php

Optionnellement, la langue à laquelle appartient chaque catégorie peut être précisée avec le paramètre langueCat:

langueCat=fr

Si aucune langue n'est précisée, la langue par défaut du site est utilisée.

Aussi, un lien vers la page d'accueil de chaque catégorie peut optionnellement être précisé grâce au paramètre urlCat:

urlCat=l'URL relative de la page d'accueil de la catégorie

Exemple:

[Chiens]
langueCat=fr
urlCat=animaux/chiens/
pages[]=animaux/chiens/husky.php
pages[]=animaux/chiens/malamute.php

La page d'accueil d'une catégorie peut être située n'importe où sur le site. L'important est d'insérer dans la page l'identifiant de la catégorie que vous voulez afficher, et ce grâce à la variable $idCategorie. Disons que pour notre exemple la page est $urlRacine/animaux/chiens/index.php et qu'elle contient ceci:

<?php
$baliseTitle = "Articles sur les chiens";
$idCategorie = "Chiens";
include '../../inc/premier.inc.php';
?>

<?php include $racine . '/inc/dernier.inc.php'; ?>

En visitant cette page, un aperçu pour chaque page listée dans le fichier de configuration pour la catégorie donnée sera généré. Un titre de premier niveau (h1) sera également généré par défaut (voir la variable $genererTitrePageCategories dans le fichier de configuration du site).

Si la page d'accueil d'une catégorie n'est pas précisée à l'aide du paramètre urlCat, l'URL sera générée automatiquement, et ce sous la forme $urlRacine/categorie.php?id=$idCategorie. Pour éviter le contenu dupliqué dans les moteurs de recherche, seules les catégories pour lesquelles aucune valeur n'a été donnée au paramètre urlCat sont accessibles sur la page $urlRacine/categorie.php.

Voici un exemple d'aperçu qui pourrait être généré pour la page sur le husky:

Article sur le husky

Publié par pseudo le 2010-01-04. Dernière révision le 2010-01-05.

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In sapien ante; dictum id, pharetra ut, malesuada et, magna. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. […]

Lire la suite de Article sur le husky 

La teneur exacte de l'aperçu de la page sur le husky dépend de la configuration de $urlRacine/animaux/chiens/husky.php. Dans notre exemple, les variables $dateCreation et $dateRevision ont été affectées. Pour sa part, le lien «Lire la suite de...» est ajouté lorsque le texte de la page n'apparaît pas au complet, et ce grâce à l'utilisation de la variable $apercu. Voir la section «Variables PHP» pour plus de détails au sujet de ces variables.

Si une page fait partie d'une catégorie au moins, les informations de publication au sujet de cette page feront référence à sa ou ses catégories. Exemple:

Publié par pseudo le 2010-01-04. Dernière révision le 2010-01-05. Catégories: Animaux, Chiens

Catégories spéciales

Les catégories spéciales sont site (les dernières publications) et galeries (les derniers ajouts aux galeries). Par défaut, l'URL est $urlRacine/categorie.php?id=(site|galeries)&amp;langue=$langue. Il n'y a pas de flux RSS associé à ces catégories puisque les flux RSS globaux remplissent déjà cette tâche.

Pour que les catégories spéciales soient activées, la variable $activerCategoriesGlobales du fichier de configuration du site doit valoir TRUE.

Bloc de menu des catégories

Les catégories peuvent être listées dans un menu qui leur est propre. Deux méthodes existent pour obtenir un tel menu:

  • créer le fichier site/xhtml/(LANGUE/)menu-categories.inc.php;

  • si ce fichier n'existe pas et que $genererMenuCategories vaut TRUE dans le fichier de configuration du site, le menu des catégories sera généré automatiquement. Il est possible de préciser la catégorie parente d'une catégorie, et ainsi obtenir un menu structuré en conséquence. Exemple:

    [Chiens] urlCat=animaux/chiens/ catParente=Animaux pages[]=animaux/chiens/husky.php pages[]=animaux/chiens/malamute.php

Dans l'un ou l'autre des cas, les catégories actives seront marquées comme telles, si cette option est activée dans le fichier de configuration du site.

Galeries

Chaque galerie possède son propre identifiant unique, aussi appelé id, qui peut être un nombre ou une chaîne de caractères que vous choisissez lors de sa création, et qui est utilisé par Squeletml pour différencier les galeries. Pour l'explication qui suit, disons que l'identifiant vaut galerie1. Les trois points suivants doivent être satisfaits pour qu'une galerie soit accessible:

  • un dossier contenant les images, présent dans site/fichiers/galeries/ et dont le nom correspond à l'identifiant de la galerie, ce qui donne pour notre exemple site/fichiers/galeries/galerie1/;

  • un fichier de configuration listant les images à afficher et éventuellement diverses informations optionnelles, et situé dans site/fichiers/galeries/identifiantDeLaGalerie. Il y a deux noms possibles pour le fichier de configuration: config.ini.txt ou config.ini. Le premier fichier existant trouvé est utilisé, config.ini.txt étant cherché en premier. Cela donne pour notre exemple site/fichiers/galeries/galerie1/config.ini.txt ou site/fichiers/galeries/galerie1/config.ini;

  • une page à visiter sur le site pour afficher la galerie, par exemple ma-galerie-de-test.php. Cette page peut être située n'importe où sur le site. L'important est d'insérer dans la page l'identifiant de la galerie que vous voulez afficher.

Concrètement, pour créer une galerie, voici les étapes à suivre:

  1. Ajouter une variable $idGalerie au début de la page qu'on veut utiliser comme galerie, et l'assigner avec l'identifiant voulu ($idGalerie = "ce qu'on veut";).

  2. Créer un dossier site/fichiers/galeries/$idGalerie et y mettre les images.

  3. Créer un fichier de configuration site/fichiers/galeries/$idGalerie/config.ini.txt ou site/fichiers/galeries/$idGalerie/config.ini. Cette étape est développée ci-dessous.

Note: toutes ces étapes peuvent être réalisées facilement dans la section d'administration.

Fichier de configuration d'une galerie

Chaque image d'une galerie est déclinée en au moins deux versions: vignette et intermédiaire. Une troisième version peut être offerte en téléchargement: le format original. Chacune des images peut se voir assigner différentes informations optionnelles, par exemple la valeur de chaque attribut (width, height, alt, src) de la balise img. En fait, une seule information est obligatoire dans le fichier de configuration: le nom du fichier de l'image en version intermédiaire.

Cette information doit se retrouver dans le fichier de configuration site/fichiers/galeries/$idGalerie/config.ini.txt ou site/fichiers/galeries/$idGalerie/config.ini. Vous pouvez générer et mettre à jour automatiquement le contenu de ce fichier en utilisant le script de gestion des galeries dans la section d'administration. Vous pouvez également le créer et le modifier à la main à l'aide d'un simple éditeur de texte.

Chaque oeuvre de la galerie possède sa propre section dans le fichier de configuration. La section commence par un titre entre crochets représentant le nom du fichier de l'image en version intermédiaire (et se termine par le début d'une autre section ou par la fin du fichier):

`[intermediaireNom]`

Voici un exemple:

[fichier1.jpg]
[fichier2.jpg]

Il s'agit d'une configuration minimale pour une galerie de deux images. Il est cependant possible d'ajouter beaucoup plus d'information pour chaque oeuvre. Voici la liste complète des paramètres possibles:

  • id: utilisé dans l'adresse URL pour identifier l'oeuvre, au lieu de l'indice de la position de l'oeuvre dans le tableau de la galerie. Ceci permet de facilement déplacer des oeuvres dans la galerie sans modifier leur URL. Si l'id n'est pas renseigné, il sera généré automatiquement à partir du titre de l'oeuvre ou du nom du fichier image. Exemple:

    id=5
    
  • titre: utilisé pour nommer l'oeuvre dans les textes générés par le script. Exemple:

    titre=Le fleuve Saint-Laurent en hiver
    
  • licence: licence ou licences de l'oeuvre. Exemple:

    licence=art-libre
    

    Voir les explications de la variable $licence dans la documentation pour plus de détails.

  • vignetteNom: nom de l'image en version vignette. Si l'information n'est pas renseignée, le nom de la vignette sera déduit à partir du nom de l'image en version intermédiaire, c'est-à-dire intermediaireNom(sans extension)-vignette.extension. Exemple:

    vignetteNom=fichier1Petit.jpg
    
  • vignetteLargeur: largeur de la vignette. Si vignetteLargeur ou vignetteHauteur sont renseignées, seulement la ou les informations renseignées seront affichées dans la balise img. Si les deux sont vides, les attributs width et height seront calculés automatiquement. Exemple:

    vignetteLargeur=100
    
  • vignetteHauteur: hauteur de la vignette. Voir vignetteLargeur pour plus de détails. Exemple:

    vignetteHauteur=150
    
  • vignetteAlt: texte alternatif (contenu de l'attribut alt) de la vignette. Si vide, le contenu sera généré automatiquement. Exemple:

    vignetteAlt=Chien assis sur un divan
    
  • vignetteAttributTitle: texte affiché dans une infobulle au survol de l'image par la souris. Exemple:

    vignetteAttributTitle=Chien assis sur un divan
    
  • intermediaireLargeur: largeur de l'image en version intermédiaire. Voir vignetteLargeur pour plus de détails. Exemple:

    intermediaireLargeur=500
    
  • intermediaireHauteur: hauteur de l'image en version intermédiaire. Voir vignetteLargeur pour plus de détails. Exemple:

    intermediaireHauteur=750
    
  • intermediaireAlt: texte alternatif (contenu de l'attribut alt) de l'image en version intermédiaire. Si vide, le contenu sera généré automatiquement. Exemple:

    intermediaireAlt=Chien dormant sur un divan
    
  • intermediaireAttributTitle: texte affiché dans une infobulle au survol de l'image par la souris. Exemple:

    intermediaireAttributTitle=Chien dormant sur un divan
    
  • intermediaireLegende: commentaire qui sera affiché sous l'image en version intermédiaire. Exemple:

    intermediaireLegende=Cette photographie a été prise le... à... avec un appareil de marque... et représente...
    
  • pageIntermediaireBaliseTitle: contenu de la balise title de la page présentant l'image en version intermédiaire. Laisser vide pour une génération automatique. Exemple:

    pageIntermediaireBaliseTitle=Bla bla bla
    
  • pageIntermediaireDescription: contenu de la métabalise description de la page présentant l'image en version intermédiaire. Laisser vide pour une génération automatique. Exemple:

    pageIntermediaireDescription=Bla bla bla
    
  • pageIntermediaireMotsCles: contenu de la métabalise keywords de la page présentant l'image en version intermédiaire. Laisser vide pour une génération automatique. Exemple:

    pageIntermediaireMotsCles=photographie, chien, bla bla bla, divan, photo
    
  • originalNom: nom de l'image au format original (en tout cas normalement de taille plus importante que la version intermédiaire, ou un fichier source). Si l'information est renseignée, un lien de téléchargement vers ce fichier sera ajouté, selon la configuration, dans le bas de l'image en version intermédiaire, directement sur l'image ou sur une petite icône sous l'image (l'icône par défaut est fichiers/agrandir.png; pour utiliser sa propre icône, créer le fichier site/fichiers/agrandir.png). Si l'information n'est pas renseignée, un nom sera construit à partir du nom de l'image en version intermédiaire, c'est-à-dire intermediaireNom(sans extension)-original.extension, un test sera effectué pour savoir si ce fichier existe, et s'il existe, un lien sera ajouté. Exemple:

    originalNom=fichier1Original.jpg
    
  • auteurAjout: auteur de l'ajout de l'oeuvre dans la galerie. Exemple:

    auteurAjout=Moi
    

    S'il existe et n'est pas vide, ce champ est utilisé dans les flux RSS.

  • dateAjout: date d'ajout de l'oeuvre dans la galerie, sous la forme Y-m-d H:i (voir la fonction PHP date()). Exemple:

    dateAjout=2010-01-17 20:05
    

    La partie après le jour est optionnelle. Il est donc possible de ne pas préciser l'heure ni les minutes, ou de ne préciser que l'heure.

    La date d'ajout est insérée automatiquement par Squeletml lorsque les galeries sont gérées par l'interface d'administration. Cette information est utilisée dans les flux RSS pour classer les oeuvres. Si dateAjout n'existe pas, la date utilisée sera celle du fichier image sur le serveur retournée par la fonction PHP filemtime().

  • exclure: informe si l'image doit être exclue de la galerie. Par défaut, l'image n'est pas exclue, mais elle l'est seulement si exclure vaut oui. Exemple:

    exclure=oui
    
  • commentaire: n'est pas utilisé par Squeletml pour l'affichage de l'oeuvre. Il s'agit d'un paramètre utile pour ajouter des notes personnelles quand on modifie le fichier de configuration dans un éditeur de texte sans passer par la section d'administration de Squeletml. Exemple:

    commentaire=Photographie à 50% de sa taille originale.
    

Voici un exemple pour une galerie de deux images:

[fichier1.jpg]
id=1
titre=Lorem ipsum
intermediaireLegende=Lorem ipsum dolor sit amet.

[fichier2.jpg]
intermediaireLegende=Praesent tempus; odio ac sagittis vehicula.

Voici une entrée vide, qu'il est possible de copier/coller:

[intermediaireNom]
id=
titre=
licence=
vignetteNom=
vignetteLargeur=
vignetteHauteur=
vignetteAlt=
intermediaireLargeur=
intermediaireHauteur=
intermediaireAlt=
intermediaireLegende=
pageIntermediaireBaliseTitle=
pageIntermediaireDescription=
pageIntermediaireMotsCles=
originalNom=
auteurAjout=
dateAjout=
exclure=
commentaire=

Navigation entre les oeuvres

Il y a six méthodes possibles pour naviguer entre les oeuvres. La méthode à utiliser est paramétrable dans le fichier de configuration du site.

Fenêtre Javascript

Il s'agit de la seule méthode de navigation sans passer par le rechargement de la page pour consulter les images. Plus précisément, en choisissant cette option, le script Slimbox 2 est utilisé pour passer d'une image à une autre sur la page d'accueil de la galerie au lieu de naviguer d'une image à une autre en rechargeant toute la page.

Si une légende est précisée pour une image, elle s'affiche sous cette dernière dans la fenêtre Javascript.

Flèches

Les flèches par défaut sont fichiers/precedent.png et fichiers/suivant.png. Pour utiliser ses propres images, créer les fichiers site/fichiers/precedent.png et site/fichiers/suivant.png.

Il est possible de choisir l'emplacement des flèches (haut ou bas).

Vignettes

Il est possible de choisir l'emplacement des vignettes (haut ou bas).

Vignettes seules

Les vignettes utilisées sont celles de l'image vers laquelle le lien pointe:

  • soit la vignette précisée dans le fichier de configuration (paramètre vignetteNom);

  • soit la vignette déduite automatiquement à partir du nom du fichier de l'image en version intermédiaire (intermediaireNom(sans extension)-vignette.extension);

  • soit la vignette générée automatiquement par le script de galerie.

Vignettes tatouées d'une flèche

Dans le cas où l'option $galerieNavigationTatouerVignettes est activée dans le fichier de configuration, une vignette personnalisée est générée par le script (à partir de la vignette de l'image) sur laquelle une flèche est superposée au centre.

Les fichiers par défaut pour les flèches superposées sont fichiers/precedent-tatouage.png et fichiers/suivant-tatouage.png. Pour utiliser ses propres images, créer les fichiers site/fichiers/precedent-tatouage.png et site/fichiers/suivant-tatouage.png.

La vignette résultante est sauvegardée dans site/fichiers/galeries/id/tatouage/vignetteNom-sens.extension. Il y a donc deux vignettes tatouées par image (une pour le sens «précédent» et l'autre pour le sens «suivant»).

Vignettes seules accompagnées d'une flèche

Dans le cas où les vignettes seules sont utilisées (sans tatouage), il est possible d'ajouter une flèche à côté de la vignette.

Les fichiers par défaut pour les flèches accompagnant les vignettes sont fichiers/precedent-accompagnee.png et fichiers/suivant-accompagnee.png. Pour utiliser ses propres images, créer les fichiers site/fichiers/precedent-accompagnee.png et site/fichiers/suivant-accompagnee.png.

Minivignettes

Il est possible d'ajouter au système de flèches ou de vignettes un aperçu de la galerie, composé de minivignettes des oeuvres de la galerie. Chaque minivignette est cliquable. Par défaut, la hauteur d'une minivignette est de 35 pixels. Ceci peut être modifié par CSS.

Il est possible de choisir l'emplacement des minivignettes (haut ou bas).

Lien «Faire découvrir à des ami-e-s»

Une option «Faire découvrir à des ami-e-s» est activée par défaut. Concrètement, un lien est inséré dans le menu pour offrir la possibilité à l'internaute d'envoyer un message à une ou plusieurs personnes pour faire connaître la page visitée. En cliquant sur ce lien, un formulaire de contact est ajouté dans le bas de la page. Le modèle du message qui sera envoyé est présenté à l'internaute, et ce dernier peut ajouter un petit mot personnalisé.

Si la page visitée est la page individuelle d'une oeuvre dans une galerie, le modèle de message contiendra une vignette de l'oeuvre et, si possible, une description, qui est formée par une de ces informations (en ordre de priorité):

  • intermediaireLegende
  • intermediaireAlt
  • vignetteAlt
  • pageIntermediaireDescription
  • pageIntermediaireBaliseTitle

Si la page visitée est autre chose qu'une page individuelle d'oeuvre, le modèle de message contiendra un lien vers la page et, si possible une description, qui est formée par une de ces informations (en ordre de priorité):

  • $baliseDescription
  • $baliseTitle

Syndication de contenu (flux RSS)

Syndication individuelle

Syndication par catégorie

Par défaut, chaque catégorie possède son propre flux RSS, généré automatiquement. Dans la configuration, il est possible de désactiver par défaut la syndication individuelle des catégories. Dans tous les cas, la variable optionnelle $rssCategorie peut être renseignée dans le fichier PHP de la catégorie pour activer (TRUE) ou désactiver (FALSE) la syndication pour la catégorie en question.

Syndication par galerie

Par défaut, chaque galerie possède son propre flux RSS, généré automatiquement. Dans la configuration, il est possible de désactiver par défaut la syndication individuelle des galeries. Dans tous les cas, la variable optionnelle $rssGalerie peut être renseignée dans le fichier PHP de la galerie pour activer (TRUE) ou désactiver (FALSE) la syndication pour la galerie en question.

Syndication globale

Note: chaque langue du site a sa propre syndication globale. Le code de la langue dans les explications qui suivent précise la langue de la syndication globale. Par exemple, fr signifie que la page en question sera incluse dans le flux RSS global de la section du site en français. Le code de la langue doit correspondre aux indices du tableau $accueil, déclaré dans le fichier init.inc.php, situé à la racine du site.

Syndication globale des galeries

Pour activer le flux RSS global des galeries, ou flux RSS des derniers ajouts aux galeries, il faut:

  • que la variable $galerieActiverFluxRssGlobal dans le fichier de configuration du site vaille TRUE;

  • qu'un fichier site/inc/rss-galeries.ini.txt ou site/inc/rss-galeries.ini soit créé à la main ou à l'aide du script de gestion des flux globaux dans la section d'administration de Squeletml. Ce fichier doit contenir la liste des galeries du site sous la forme suivante:

    [code de la langue]
    id de la galerie=URL relative de la galerie
    

    Le code de la langue précise la langue de la syndication globale. L'id correspond à la valeur donnée à la variable $idGalerie, et l'URL relative est le chemin de la galerie à partir de l'URL racine du site. Exemple pour un site de deux galeries:

    [fr]
    mes voyages=voyages.php
    animaux=dossier/galerie-animaux.php
    

    Les deux galeries en question sont accessibles respectivement à l'adresse:

    $urlRacine/voyages.php
    

    et:

    $urlRacine/dossier/galerie-animaux.php
    

    Note: puisque le script ne lit que la liste du fichier de configuration site/inc/rss-galeries.ini.txt ou site/inc/rss-galeries.ini, le fait d'avoir désactivé la syndication individuelle d'une galerie avec $rssGalerie = FALSE; n'aura aucun effet sur la présence de cette galerie dans le flux global. Pour ne pas inclure une galerie dans le flux global, ne pas la lister dans le fichier de configuration tout simplement.

Syndication globale du site

Pour activer le flux RSS global du site, ou flux RSS des dernières publications, il faut:

  • que la variable $activerFluxRssGlobalSite dans le fichier de configuration du site vaille TRUE;

  • qu'un fichier site/inc/rss-site.ini.txt ou site/inc/rss-site.ini soit créé à la main ou à l'aide du script de gestion des flux globaux dans la section d'administration de Squeletml. Ce fichier doit contenir la liste des pages à inclure dans le flux RSS, et ce sous la forme suivante:

    [code de la langue]
    pages[]=URL relative de la page
    

    Le code de la langue précise la langue de la syndication globale. L'URL relative est le chemin de la page à partir de l'URL racine du site. Exemple:

    [fr]
    pages[]=dossier1/dossier2/page.php
    pages[]=autrePage.php
    

    Les deux pages en question sont accessibles respectivement à l'adresse:

    $urlRacine/dossier1/dossier2/page.php
    

    et:

    $urlRacine/autrePage.php
    

Cache

Par défaut, Squeletml n'utilise pas de système de cache des pages générées. Cependant, il est possible d'activer le cache en modifiant la variable $dureeCache du fichier de configuration du site. La durée du cache peut être précisée pour le corps des galeries (page d'accueil d'une galerie ou pages individuelles d'une oeuvre) et des catégories ainsi que pour les flux RSS.

Il est particulièrement recommandé d'activer le cache des catégories si ces dernières sont utilisées, car le temps de construction d'une page de catégorie peut être réduit de l'ordre de 90% en utilisant le cache.

Dans certains cas, le cache peut être long à générer, ce qui a comme conséquence qu'un internaute visitant une page dont le cache n'a pas encore été généré ou est expiré peut attendre assez longtemps avant de voir le contenu s'afficher. Cependant, il est possible de générer le cache automatiquement sans attendre la visite d'internautes. Voir la section «Cron» pour plus de détails.

Cron

Le fichier cron.php permet d'effectuer certaines tâches de maintenance. Pour l'instant, ces tâches concernent la génération automatique du cache des pages utilisant cette fonctionnalité (flux RSS, catégorie et galerie, selon la valeur de la variable $dureeCache du fichier de configuration du site). À noter que le cache de la page individuelle d'une oeuvre d'une galerie n'est pas généré par le cron.

Le cron peut être lancé manuellement dans l'administration (section «Accès»). Il peut aussi être lancé automatiquement dans la mesure où la visite de la page cron.php est planifiée par un script. Par exemple, sous GNU/Linux, la commande crontab -e permet d'ajouter une commande différée, comme celle-ci:

* */12 * * * lynx -source $urlRacine/cron.php > /dev/null 2>&1

Grâce à la commande ci-dessus, la page cron.php est visitée toutes les 12 heures. Bien sûr, ne pas oublier de remplacer $urlRacine par la bonne valeur, par exemple:

* */12 * * * lynx -source http://www.nomDeDomaine.ext/cron.php > /dev/null 2>&1

Développement

Le logiciel Bazaar est utilisé pour le versionnage des fichiers. La version de développement est disponible sur Launchpad.

Téléchargement de la version de développement

Pour récupérer la version de développement, simnplement saisir cette commande dans une console:

bzr branch lp:squeletml

Fichier Makefile

Les principales commandes du fichier Makefile sont:

  • make generer: met à jour les fichiers qui sont versionnés, mais pas créés ni gérés à la main, par exemple les fichiers de langue. Est utilisée en général avant la dernière révision d'une prochaine version.

  • make publier: crée des archives .bz2 et .zip; y ajoute les fichiers qui ne sont pas versionnés, mais nécessaires; supprime les fichiers versionnés, mais inutiles; copie certains fichiers utiles (comme le ChangeLog) sur le bureau; et déplace les archives également sur le bureau. Est utilisée après un bzr tag... pour la sortie d'une nouvelle version.

    Par défaut, le dernier tag (qui correspond à la dernière version) est utilisé par cette commande. Pour publier une version différente, préciser les variables tag et derniereRevAvantDernierTag dans la ligne de commande. Exemple:

    make publier tag=squeletml-2.2.1 derniereRevAvantDernierTag=505
    
  • make ini: installe pour l'utilisateur courant la coloration syntaxique dans l'éditeur de texte gedit (sous GNU/Linux) pour les fichiers de configuration utilisés par Squeletml (configuration des galeries et des flux RSS globaux). Ces fichiers sont au format .ini. Contrairement à la coloration par défaut dans gedit, celle installée par make ini ne colore pas de délimiteurs de caractères (habituellement les guillemets et les apostrophes), ce qui évite par exemple qu'une apostrophe présente dans la valeur d'un paramètre, comme ceci:

    parametre=Lorem ipsum l'orem
    

    colore (sans raison) tout le texte qui suit.

    Pour utiliser la coloration, démarrer ou redémarrer gedit et ouvrir un fichier de configuration. Si l'extension du fichier est .ini.txt, la coloration s'activera automatiquement, sinon aller dans le menu Affichage > Mode de coloration > Autres et choisir .ini Squeletml.

    La désinstallation de la coloration se fait grâce à la commande make menage-ini.

Annexes

Contenu du fichier de configuration de Squeletml

Voici le contenu du fichier de configuration, largement commenté, et constituant ainsi un bon complément à la documentation, pour ne pas dire une seconde documentation en parallèle.


<?php
########################################################################
##
## Configuration générale.
##
########################################################################

/* ____________________ Général. ____________________ */

// Délai d'expiration d'un script.
/*
- Voir la fonction `super_set_time_limit()`, qui n'est utilisée que pour certains scripts nécessitant potentiellement plus de temps d'exécution.
*/
$delaiExpirationScript = 300;

/* ____________________ En-tête HTML. ____________________ */

// Choix du DTD (Définition de Type de Document).
/*
- Si `$xhtmlStrict` vaut TRUE, le doctype utilisé est XHTML 1.0 Strict, sinon c'est XHTML 1.0 Transitional. Si vous ne savez pas de quoi il s'agit, laissez TRUE. Le seul intérêt de choisir FALSE est dans le cas où on sait qu'on doit utiliser du code non valide en XHTML 1.0 Strict.
- Voir la fonction `doctype()`.
*/
$xhtmlStrict = TRUE; // TRUE|FALSE

// Complément de la balise `title` selon la langue.
/*
- Le complément de la balise `title` est ajouté à la suite du contenu principal de la balise `title`.
- Voir les fonctions `baliseTitle()` et `baliseTitleComplement()`.
*/
$tableauBaliseTitleComplement['fr'] = " | Squeletml";
$tableauBaliseTitleComplement['en'] = " | Squeletml";

// Fichiers inclus dans des balises `link` et `script`.
/*
- Les types possibles sont: css, cssltIE7, cssIE7, csslteIE7, js, jsDirect, jsDirectltIE7, jsltIE7, favicon, po, rss.
- Syntaxe pour tous les types:
  $balisesLinkScript[] = "URL#TYPE#fichier à inclure#contenu de l'attribut `title`";
  Le contenu de l'attribut `title` est optionnel, et est utilisé seulement pour le type rss.
- Ajouter une étoile à la fin de l'URL pour inclure toutes les pages enfants.
- Dans le fichier de configuration personnalisé, ajouter tout simplement des éléments au tableau `$balisesLinkScript`, par exemple:
  $balisesLinkScript[] = "$urlRacine/*#css#$urlRacine/site/css/style-general.css";
  $balisesLinkScript[] = "$urlRacine/page.php#css#$urlRacine/site/css/style-page.css";
- Voir la fonction `linkScript()`.
*/
$balisesLinkScript[] = "$urlRacine/*#css#$urlRacine/css/squeletml.css";
$balisesLinkScript[] = "$urlRacine/*#css#$urlRacine/css/extensions-proprietaires.css";
$balisesLinkScript[] = "$urlRacine/*#csslteIE7#$urlRacine/css/ie6-7.css";
$balisesLinkScript[] = "$urlRacine/*#cssIE7#$urlRacine/css/ie7.css";
$balisesLinkScript[] = "$urlRacine/*#cssltIE7#$urlRacine/css/ie6.css";
$balisesLinkScript[] = "$urlRacine/*#js#$urlRacine/js/phpjs/php.min.js";
$balisesLinkScript[] = "$urlRacine/*#js#$urlRacine/js/squeletml.js";
$balisesLinkScript[] = "$urlRacine/*#favicon#$urlRacine/fichiers/favicon.png";

// Version par défaut des fichiers déclarés dans le tableau `$balisesLinkScript`.
/*
- La version est ajoutée à la suite du nom des fichiers en tant que variable GET.
- Laisser vide pour désactiver l'ajout de version.
- Exemple de sortie HTML lorsque `$versionParDefautLinkScript` vaut `1`:
  <script type="text/javascript" src="/js/squeletml.js?1"></script>
- Voir la fonction `linkScript()`.
*/
$versionParDefautLinkScript = "";

// Inclusion des feuilles de style par défaut de Squeletml (dossier `css`).
/*
- Voir les fonctions `linkScript()` et `supprimeInclusionCssParDefaut()`.
*/
$inclureCssParDefaut = TRUE; // TRUE|FALSE

// Inclusion de la métabalise `keywords`.
/*
- A priorité sur la déclaration de mots-clés spécifiques à une page.
*/
$inclureMotsCles = FALSE; // TRUE|FALSE

// Contenu par défaut de la métabalise `robots`.
/*
- Liste de valeurs possibles: index, follow, archive, noindex, nofollow, noarchive, noodp, noydir.
- Si la variable `$robots` est déclarée dans une page, c'est la valeur de cette dernière qui est utilisée.
- Voir la fonction `robots()`.
*/
$robotsParDefaut = 'index, follow, archive';

// Désactivation de l'indexation des pages de catégorie dans les moteurs de recherche.
/*
- L'intérêt de ne pas indexer les pages de catégorie dans les moteurs de recherche est d'éviter le contenu dupliqué.
*/
$desactiverIndexationPagesCategorie = FALSE; // TRUE|FALSE

// Encodage du site.
$charset = 'UTF-8';

// Langue par défaut.
/*
- Langue par défaut si aucune autre précision n'est apportée. Si la variable `$langue` est déclarée dans une page, c'est la valeur de cette dernière qui est utilisée.
- Voir la fonction `langue()`.
*/
$langueParDefaut = 'fr';

/* ____________________ Contenu et ordre du flux HTML. ____________________ */

// Titre du site en en-tête.
/*
- Contenu (balises HTML permises) qui sera inséré comme titre de site dans un `h1` sur la page d'accueil, et dans un `p` sur toutes les autres pages.
- Astuce: si vous ne voulez pas bidouiller dans le style, remplacez la première image (dont l'`id` est `logo`) par une autre image de 75px × 75px, et remplacez le contenu du `span` (dont l'`id` est `logoSupplement`) par le titre de votre site.
*/
$titreSite['fr'] = "<img id=\"logo\" src=\"$urlRacine/fichiers/squeletml-logo.png\" alt=\"Squeletml\" /><span id=\"logoSupplement\"><img src=\"$urlRacine/fichiers/squeletml.png\" alt=\"Squeletml\" /></span>";
$titreSite['en'] = $titreSite['fr'];

// Ordre et région des blocs constituant les menus.
/*
Les divers blocs constituant les menus sont positionnables, au choix, dans les régions suivantes:

- `div` `enTete`;
- `div` `surContenu`;
- `div` `debutInterieurContenu`;
- `div` `finInterieurContenu`;
- `div` `sousContenu`;
- `div` `basDePage`.

Ce choix concerne l'ordre dans lequel les blocs apparaissent dans le flux HTML. Ensuite, selon le style CSS utilisé, les deux `div` `surContenu` et `sousContenu` formeront:

- une seule colonne à gauche;
- une seule colonne à droite;
- deux colonnes dont celle de gauche est remplie par les blocs de `surContenu` et celle de droite par les blocs de `sousContenu`;
- deux colonnes dont celle de gauche est remplie par les blocs de `sousContenu` et celle de droite par les blocs de `surContenu`;
- aucune colonne, les blocs étant positionnés au-dessus ou au-dessous du contenu selon la `div` dans laquelle ils ont été assignés.

Chaque bloc se voit assigner trois nombres (séparés par une espace), qui font référence respectivement à l'ordre du bloc lorsqu'il n'y a pas de colonne, lorsqu'il y a une seule colonne et lorsqu'il y en a deux. Selon la centaine à laquelle le nombre appartient, le bloc sera placé dans une région en particulier:

- `div` `enTete`: 100-199 (un nombre entre 100 et 199 signifie que le bloc en question sera placé dans la `div` `enTete`);
- `div` `surContenu`: 200-299;
- `div` `debutInterieurContenu`: 300-399;
- `div` `finInterieurContenu`: 400-499;
- `div` `sousContenu`: 500-599;
- `div` `basDePage`: 600-699.

À l'intérieur d'une même région, l'ordre d'insertion des blocs se fait en ordre croissant des nombres leur étant assignés.

Par exemple:

    $ordreBlocsDansFluxHtml['menu-langues'] = array (510, 510, 504);
    $ordreBlocsDansFluxHtml['flux-rss']     = array (502, 502, 506);

signifie que le menu des langues ainsi que les liens RSS seront insérés dans la `div` `sousContenu`, peu importe le nombre de colonnes, puisque les deux blocs ont un nombre compris entre 500 et 599 pour chaque possibilité en lien avec le nombre de colonnes, et qu'à l'intérieur de la `div`, les liens RSS seront insérés en premier lorsqu'il n'y a pas de colonne et lorsqu'il n'y en a qu'une seule puisqu'en ordre croissant, nous obtenons 502 (les liens RSS) et 510 (le menu des langues), mais s'il y a deux colonnes, les liens RSS seront insérés après le menu des langues, car nous obtenons 504 (le menu des langues) et 506 (les liens RSS).

Il est possible d'insérer un nombre illimité de blocs personnalisés. Il faut toutefois avoir en tête que chaque clé ajoutée dans le tableau `$ordreBlocsDansFluxHtml` doit représenter une partie du nom du fichier à insérer. Par exemple, un bloc personnalisé ayant une clé `heure` dans le tableau `$ordreBlocsDansFluxHtml` fera référence à un fichier `$racine/site/xhtml/(LANGUE/)heure.inc.php`.

Note: le tableau ci-dessous n'a pas de lien avec l'activation ou la désactivation d'une fonctionnalité, mais seulement avec l'odre dans lequel les blocs sont insérés dans le flux HTML dans le cas où la fonctionnalité est activée.

Voir la fonction `blocs()`.
*/
$ordreBlocsDansFluxHtml['menu-langues']           = array (500, 500, 200);
$ordreBlocsDansFluxHtml['menu']                   = array (200, 510, 500);
$ordreBlocsDansFluxHtml['menu-categories']        = array (510, 520, 510);
$ordreBlocsDansFluxHtml['legende-oeuvre-galerie'] = array (520, 530, 520);
$ordreBlocsDansFluxHtml['flux-rss']               = array (530, 540, 530);
$ordreBlocsDansFluxHtml['faire-decouvrir']        = array (540, 550, 540);
$ordreBlocsDansFluxHtml['marque-pages-sociaux']   = array (550, 560, 550);
$ordreBlocsDansFluxHtml['infos-publication']      = array (400, 400, 400);
$ordreBlocsDansFluxHtml['licence']                = array (410, 410, 410);

// Détection du type MIME.
/*
- La détection du type MIME se fait par un des outils suivants, selon leur disponibilité (en ordre de priorité):
  - `Fileinfo` de PHP;
  - commande `file` si la variable `$typeMimeFile` vaut TRUE;
  - tableau personnalisé de correspondance entre une extension et son type MIME si la variable `$typeMimeCorrespondance` n'est pas vide. Exemple:
    $typeMimeCorrespondance = array ('rmi' => 'audio/midi');
  - tableau par défaut de correspondance entre une extension et son type MIME de la fonction `file_get_mimetype()`.
*/
$typeMimeFile = FALSE; // TRUE|FALSE
$typeMimeCheminFile = '/usr/bin/file';
$typeMimeCorrespondance = array ();

// Inclusion du sur-titre.
$inclureSurTitre = FALSE; // TRUE|FALSE

// Inclusion du bas de page.
$inclureBasDePage = TRUE; // TRUE|FALSE

// Activation par défaut de l'option «Faire découvrir à des ami-e-s».
$activerFaireDecouvrirParDefaut = TRUE; // TRUE|FALSE

// Activation par défaut des marque-pages ou réseaux sociaux.
$activerMarquePagesSociauxParDefaut = TRUE; // TRUE|FALSE

// Affichage du message pour Internet Explorer 6.
/*
- Message invitant l'internaute à télécharger un navigateur moderne.
- Voir la fonction `messageIe6()`.
*/
$afficherMessageIe6 = TRUE; // TRUE|FALSE

// Auteur par défaut.
/*
- Auteur par défaut si aucune autre précision n'est apportée. Si la variable `$auteur` est déclarée dans une page, c'est la valeur de cette dernière qui est utilisée.
- L'auteur est inséré en tant que métabalise `author`. Cette information est également utilisée dans le bloc des informations de publication, lors du listage des articles faisant partie d'une catégorie ainsi que dans les flux RSS.
*/
$auteurParDefaut = "";

// Affichage par défaut des informations de publication.
/*
- Les informations de publication contiennent l'auteur, la date de création et la date de dernière révision.
- Voir dans la documentation les explications pour les variables `$auteur`, `$dateCreation`, `$dateRevision` et `$infosPublication`.
*/
$afficherInfosPublicationParDefaut = TRUE; // TRUE|FALSE

// Licence par défaut pour tout le site.
/*
- Licence à déclarer pour chaque page du site. Si la variable `$licence` est déclarée dans une page, c'est la valeur de cette dernière qui est utilisée.
- Plusieurs licences peuvent être déclarées, chacune devant être séparée par une espace.
- Voir la fonction `licence()` pour connaître les choix possibles.
*/
$licenceParDefaut = "";

// Affichage par défaut de la table des matières.
/*
- État de la table des matières si aucune autre précision n'est apportée. Si la variable `$tableDesMatieres` est déclarée dans une page, c'est la valeur de cette dernière qui est utilisée.
*/
$afficherTableDesMatieresParDefaut = FALSE; // TRUE|FALSE

// Activation de boîtes déroulantes par défaut.
/*
Une boîte déroulante permet d'afficher/de masquer un contenu par simple clic, et enregistre, si possible, le choix d'affichage de l'internaute dans un témoin valide durant 365 jours. Ce contenu peut être situé n'importe où dans la page: menu, corps, bas de page, etc. Une boîte déroulante peut être activée seulement pour un contenu constitué d'un conteneur, d'un titre et d'un corps. La représentation générale est la suivante:

    <balise id="conteneur"> ou <balise class="conteneur">
        <balise class="bDtitre">...</balise>
        <balise class="bDcorps (afficher|masquer)">...</balise>
    </balise>

Le corps est affiché seulement s'il possède une classe `afficher`. La classe `masquer` n'est donc pas essentielle.

Voici un exemple concret:

1. avant application de la boîte déroulante:

    <div id="fruits">
        <h2 class="bDtitre">Fruits disponibles</h2>
        
        <div class="bDcorps afficher">
            <ul>
                <li>Fraises</li>
                <li>Poires</li>
                <li>Pommes</li>
            </ul>
            
            <p>Il n'y a plus de kiwi.</p>
        </div>
    </div>

2. après application de la boîte déroulante. Le corps est affiché:

    <div id="fruits">
        <h2 class="bDtitre"><a href="#" class="boiteDeroulanteLien"><span class="boiteDeroulanteSymbole">[-]&nbsp;</span><span>Fruits disponibles</span></a></h2>
        
        <div class="bDcorps afficher">
            <ul>
                <li>Fraises</li>
                <li>Poires</li>
                <li>Pommes</li>
            </ul>
            
            <p>Il n'y a plus de kiwi.</p>
        </div>
    </div>

3. après application de la boîte déroulante si le corps n'avait pas possédé de classe `afficher` (le corps aurait donc été masqué):

    <div id="fruits">
        <h2 class="bDtitre"><a href="#" class="boiteDeroulanteLien"><span class="boiteDeroulanteSymbole">[+]&nbsp;</span><span>Fruits disponibles</span></a></h2>
        
        <div class="bDcorps masquer">
            <ul>
                <li>Fraises</li>
                <li>Poires</li>
                <li>Pommes</li>
            </ul>
            
            <p>Il n'y a plus de kiwi.</p>
        </div>
    </div>

Nous constatons qu'un lien est ajouté au titre. Un clic sur le titre permet de changer l'état du corps (affiché ou masqué).

Dans l'exemple précédent, la boîte déroulante peut être activée de deux façons:

1. en ajoutant `#fruits` dans la variable `$boitesDeroulantesParDefaut`.

    La syntaxe de chaque boîte est donc:

        '#conteneur'

    pour un conteneur identifié à l'aide de son attribut `id`, ou bien:

        '.conteneur'

    pour un conteneur identifié à l'aide de son attribut `class`.

    En ajoutant au moins une boîte dans cette variable, chaque page de Squeletml ajoutera les scripts nécessaires aux boîtes déroulantes. Pour ajouter plusieurs boîtes, le séparateur à utiliser est une espace. Voici un exemple d'ajout de plusieurs boîtes:

        $boitesDeroulantesParDefaut = "#conteneur1 .conteneur2 .conteneur3";

2. en renseignant la variable `$boitesDeroulantes` dans une page spécifique avant l'inclusion du premier fichier PHP (la syntaxe est la même que pour la variable `$boitesDeroulantesParDefaut`). Voir la documentation pour plus de détails.

Comme le montre l'exemple général, le titre n'est pas à comprendre au sens sémantique. Ce n'est donc pas nécessaire de l'entourer de balises `h1`, `h2`, `h3`, `h4`, `h5` ou `h6`. Il s'agit simplement du texte qui servira à afficher ou masquer le corps.

Voir la fonction Javascript `boiteDeroulante()`.
*/
$boitesDeroulantesParDefaut = "";

// Activation de boîtes déroulantes à la main par défaut.
/*
- Si vaut TRUE, insère les fichiers nécessaires à la gestion d'une boîte déroulante, mais l'appel à la fonction Javascript `boiteDeroulante()` est fait à la main par l'utilisateur.
- Voir les explications de la variable `$boitesDeroulantesAlaMain` dans la documentation pour plus de détails.
*/
$boitesDeroulantesAlaMainParDefaut = FALSE; // TRUE|FALSE

// Balises `link` et `script` finales, ajoutées juste avant `</body>`.
/*
- Voir les commentaires de la variable `$balisesLinkScript` dans ce même fichier de configuration pour les détails de la syntaxe.
- Voir la fonction `linkScript()`.
*/
$balisesLinkScriptFinales[] = "$urlRacine/*#jsDirect#ajouteEvenementLoad(function(){egaliseHauteur('interieurPage', 'surContenu', 'sousContenu');});";

// Inclusion de l'aperçu d'une page.
/*
- L'aperçu d'une page (s'il existe et n'est pas vide, et si `$inclureApercu` vaut TRUE) est inséré en tant que commentaire HTML au début de la div `interieurContenu` et est utilisé par certains scripts comme celui de construction des flux RSS.
- Le but de mettre `$inclureApercu` à FALSE est que les scripts qui utilisent normalement l'aperçu d'une page sauteront alors l'étape de sa recherche, ce qui sauvera du temps et des ressources.
- Voir les explications de la variable `$apercu` dans la documentation pour plus de détails.
*/
$inclureApercu = TRUE; // TRUE|FALSE

// Expiration du cache.
/*
- Temps en secondes avant que le cache n'expire.
- Exemples:
  - `0` équivaut à désactiver le cache;
  - `1800` équivaut à 30 minutes;
  - `3600` équivaut à 1 heure;
  - `28800` équivaut à 8 heures;
  - `43200` équivaut à 12 heures;
  - `86400` équivaut à 1 jour;
  - `259200` équivaut à 3 jours;
  - `604800` équivaut à 7 jours.
*/
$dureeCache['fluxRss'] = 0;
$dureeCache['categorie'] = 0;
$dureeCache['galerie'] = 0;
$dureeCache['publications-recentes'] = 0; // Voir la fonction `publicationsRecentes()`.

// Génération automatisée du titre principal de la page d'accueil d'une catégorie.
/*
- Si vaut `TRUE`, un titre `h1` sera ajouté avant la liste des pages faisant partie de la catégorie affichée.
*/
$genererTitrePageCategories = TRUE; // TRUE|FALSE

// Génération automatisée du bloc de menu des catégories.
/*
- Le bloc de menu des catégories peut être réalisé à la main dans le fichier `menu-categories.inc.php` ou généré automatiquement.
- Voir la section «Bloc de menu des catégories» dans la documentation pour plus de détails.
*/
$genererMenuCategories = TRUE; // TRUE|FALSE

// Si `$genererMenuCategories` vaut TRUE, affichage du nombre d'articles dans chaque catégorie.
/*
- Exemple: `Animaux (23)`.
*/
$afficherNombreArticlesCategorie = TRUE; // TRUE|FALSE

// Activation s'il y a lieu des catégories spéciales.
/*
- Les catégories spéciales sont les dernières publications et les derniers ajouts aux galeries.
- Par défaut, l'URL est `$urlRacine/categorie.php?id=(site|galeries)`.
*/
$activerCategoriesGlobales = TRUE; // TRUE|FALSE

// Pagination par défaut de la liste des articles faisant partie d'une catégorie.
/*
- Nombre d'articles par page par défaut (0 pour désactiver la pagination).
*/
$nombreArticlesParPageCategorie = 10;

/* ____________________ Style CSS. ____________________ */

// Note: les options suivantes n'ont aucune influence sur le flux HTML. Il s'agit simplement d'un outil optionnel mais utile pour modifier le style du site sans devoir bidouiller dans les feuilles CSS. En aucun cas ces options sont obligatoires à la stylisation du site.

// Style des liens visités.
/*
- Les liens visités (`a:visited`) de tout le site (menus y compris) ont par défaut un style différent des liens non visités. Mettre à FALSE pour différencier seulement les liens visités contenus dans le corps des pages (`div` `contenu`).
*/
$differencierLiensVisitesHorsContenu = TRUE; // TRUE|FALSE

// Détection des liens actifs dans les blocs.
/*
- Si la détection est activée pour un bloc, ajoute la classe `actif` à tous les liens (balises `a`) de ce bloc et pointant vers la page en cours ainsi qu'au `li` contenant ce lien. Avec la feuille de style par défaut, le résultat est un lien actif en gras et un `li` marqué d'une petite puce spéciale.
- Voir les explications de la variable `$ordreBlocsDansFluxHtml` dans ce fichier de configuration pour connaître la syntaxe des clés du tableau (par exemple `menu-langues`).
- Chaque élément prend comme valeur TRUE, FALSE ou NULL.
- Voir la fonction `lienActif()`.
*/
$liensActifsBlocs['menu-langues'] = TRUE;
$liensActifsBlocs['menu'] = TRUE;
$liensActifsBlocs['menu-categories'] = TRUE; // S'il y a lieu (voir la section «Catégories» de la documentation).
$liensActifsBlocs['faire-decouvrir'] = NULL; // Ne s'applique pas.
$liensActifsBlocs['legende-oeuvre-galerie'] = FALSE; // S'il y a lieu (voir `$galerieLegendeEmplacement`).
$liensActifsBlocs['flux-rss'] = NULL; // Ne s'applique pas.
$liensActifsBlocs['infos-publication'] = NULL; // Ne s'applique pas.
$liensActifsBlocs['licence'] = NULL; // Ne s'applique pas.
$liensActifsBlocs['marque-pages-sociaux'] = NULL; // Ne s'applique pas.

// Limite de la profondeur d'une liste dans un bloc.
/*
Pour chaque bloc, préciser par TRUE ou FALSE si la profondeur d'une liste y étant présente doit être limitée. Aucun texte n'est supprimé, mais une classe `masquer` est ajoutée aux sous-listes inactives identifiées auparavant par la fonction `lienActif()`, ce qui signifie qu'un bloc pour lequel la détection des liens actifs n'aura pas été activée dans la variable `$liensActifsBlocs` (dans ce fichier de configuration) ne pourra pas avoir de limite de profondeur.

Par exemple, si la page en cours est `page2.1.php`, une liste comme celle-ci:

    Lien page1
        Lien page1.1
            Lien page1.1.1
                Lien page1.1.1.1
                Lien page1.1.1.2
            Lien page1.1.2
                Lien page1.1.2.1
                Lien page1.1.2.2
        Lien page1.2
            Lien page1.2.1
                Lien page1.2.1.1
                Lien page1.2.1.2
            Lien page1.2.2
                Lien page1.2.2.1
                Lien page1.2.2.2
    Lien page2
        Lien page2.1
            Lien page2.1.1
                Lien page2.1.1.1
                Lien page2.1.1.2
            Lien page2.1.2
                Lien page2.1.2.1
                Lien page2.1.2.2
        Lien page2.2
            Lien page2.2.1
                Lien page2.2.1.1
                Lien page2.2.1.2
            Lien page2.2.2
                Lien page2.2.2.1
                Lien page2.2.2.2

sera visible ainsi:

    Lien page1
    Lien page2
        Lien page2.1
            Lien page2.1.1
            Lien page2.1.2
        Lien page2.2

Voir les explications de la variable `$ordreBlocsDansFluxHtml` dans ce fichier de configuration pour connaître la syntaxe des clés du tableau (par exemple `menu-langues`).

Voir les fonctions `limiteProfondeurListe()` et `lienActif()`.
*/
$limiterProfondeurListesBlocs['menu-langues'] = FALSE;
$limiterProfondeurListesBlocs['menu'] = TRUE;
$limiterProfondeurListesBlocs['menu-categories'] = TRUE; // S'il y a lieu (voir la section «Catégories» de la documentation).
$limiterProfondeurListesBlocs['faire-decouvrir'] = NULL; // Ne s'applique pas.
$limiterProfondeurListesBlocs['legende-oeuvre-galerie'] = FALSE; // S'il y a lieu (voir `$galerieLegendeEmplacement`).
$limiterProfondeurListesBlocs['flux-rss'] = NULL; // Ne s'applique pas.
$limiterProfondeurListesBlocs['infos-publication'] = NULL; // Ne s'applique pas.
$limiterProfondeurListesBlocs['licence'] = NULL; // Ne s'applique pas.
$limiterProfondeurListesBlocs['marque-pages-sociaux'] = NULL; // Ne s'applique pas.

// Nombre de colonnes.
/*
- Si vaut 2, ajoute à la balise `body` les classes `deuxColonnes`, `colonneAgauche` et `colonneAdroite`, sinon si vaut 1, ajoute la classe `uneColonne`, sinon si vaut 0, ajoute la classe `aucuneColonne`.
*/
$nombreDeColonnes = 1; // 0|1|2

// S'il y a lieu, emplacement de la colonne unique.
/*
- Si `$nombreDeColonnes` vaut 1 et que `$uneColonneAgauche` vaut TRUE, les classes `colonneAgauche` et `uneColonneAgauche` sont ajoutées à `body`, sinon si `$nombreDeColonnes` vaut 1 et que `$uneColonneAgauche` vaut FALSE, les classes `colonneAdroite` et `uneColonneAdroite` sont ajoutées à `body`.
*/
$uneColonneAgauche = TRUE; // TRUE|FALSE

// Emplacement du sous-contenu lorsqu'il y a deux colonnes.
/*
- Si `$nombreDeColonnes` vaut 2 et si `$deuxColonnesSousContenuAgauche` vaut TRUE, ajoute la classe `deuxColonnesSousContenuAgauche` à `body`, sinon si `$nombreDeColonnes` vaut 2 et que `$deuxColonnesSousContenuAgauche` vaut FALSE, ajoute la classe `deuxColonnesSousContenuAdroite` à `body`.
- Le sur-contenu va être affiché par défaut dans la colonne opposée.
*/
$deuxColonnesSousContenuAgauche = TRUE; // TRUE|FALSE

// S'il y a lieu, arrière-plan d'une colonne.
$arrierePlanColonne = 'rayuresEtBordure'; // aucun|bordure|rayures|rayuresEtBordure|fondUni

// Div `page` avec bordures.
/*
- Les valeurs possibles sont TRUE ou FALSE.
*/
$borduresPage['droite'] = TRUE;
$borduresPage['bas'] = TRUE;
$borduresPage['gauche'] = TRUE;

// S'il y a au moins une colonne, étendre l'en-tête sur toute la largeur du site.
/*
- Par défaut, l'en-tête ne s'étend que sur la largeur du contenu, excluant la largeur de la ou des colonnes. Mettre à TRUE pour l'étendre sur toute la page.
*/ 
$enTetePleineLargeur = FALSE; // TRUE|FALSE

// Table des matières avec coins arrondis.
$tableDesMatieresArrondie = TRUE; // TRUE|FALSE

// Blocs de contenu avec coins arrondis par défaut.
$blocsArrondisParDefaut = FALSE; // TRUE|FALSE

// Blocs de contenu spécifiques avec coins arrondis.
/*
Il est possible de modifier la configuration par défaut des blocs arrondis pour un bloc en particulier selon le nombre de colonnes. Par exemple, la ligne suivante:

    $blocsArrondisSpecifiques['menu'] = array (TRUE, FALSE, FALSE);

précise que le bloc de menu principal devra avoir des coins arrondis lorsqu'il n'y a pas de colonne, mais ne devra pas en avoir lorsqu'il y en a une ou deux. Nous pouvons donc dégager la syntaxe générale suivante:

    $blocsArrondisSpecifiques['bloc'] = array (valeur quand aucune colonne, valeur quand 1 colonne, valeur quand 2 colonnes);
*/
$blocsArrondisSpecifiques['menu'] = array (TRUE, FALSE, FALSE);
$blocsArrondisSpecifiques['licence'] = array (TRUE, TRUE, TRUE);

/* ____________________ Syndication de contenu (flux RSS). ____________________ */

// Syndication globale du site (dernières publications).
/*
- La syndication n'est pas complètement automatique. En effet, il faut maintenir un fichier contenant une liste d'URL.
- Voir la documentation pour plus de détails.
*/
$activerFluxRssGlobalSite = TRUE; // TRUE|FALSE

// Syndication individuelle par défaut des catégories.
/*
- Note: il est possible de configurer la syndication pour chaque catégorie, et ainsi donner une valeur différente de celle par défaut. En effet, si la variable `$rssCategorie` est déclarée dans une page, c'est la valeur de cette dernière qui est utilisée.
*/
$activerFluxRssCategorieParDefaut = TRUE; // TRUE|FALSE

// Nombre maximal d'items par flux RSS.
$nombreItemsFluxRss = 25;

// Si `$inclureApercu` vaut TRUE, utiliser les aperçus dans les flux RSS.
$utiliserApercuDansFluxRss = FALSE; // TRUE|FALSE

########################################################################
##
## Configuration du formulaire de contact.
##
########################################################################

/* ____________________ Général. ____________________ */

// Contact par défaut.
/*
- Pour utiliser le formulaire de contact livré par défaut sans devoir créer une page de contact personnalisée simplement pour y renseigner la variable `$courrielContact`, saisir ci-dessous l'adresse courriel à utiliser, sinon laisser vide.
*/
$contactCourrielParDefaut = "";

// Vérification de la forme du courriel.
$contactVerifierCourriel = TRUE; // TRUE|FALSE

// Ajout optionnel d'un identifiant dans l'objet.
$contactCourrielIdentifiantObjet = '[Contact] ';

// Ajout dans le formulaire d'une option d'envoi d'une copie à l'expéditeur.
$contactCopieCourriel = FALSE; // TRUE|FALSE

// Champs obligatoires.
/*
- Chaque élément prend comme valeur TRUE ou FALSE.
*/
$contactChampsObligatoires['nom'] = TRUE;
$contactChampsObligatoires['message'] = TRUE;

/* ____________________ Antipourriel. ____________________ */

// Ajout d'un champ de calcul mathématique.
$contactActiverCaptchaCalcul = TRUE; // TRUE|FALSE
$contactCaptchaCalculMin = 2;
$contactCaptchaCalculMax = 10;

// Si `$contactActiverCaptchaCalcul` vaut TRUE, inversion des termes de l'addition et du résultat.
/*
- Par défaut (TRUE), le calcul se présente ainsi:
  c = ? + ?
  Bien sûr, il peut y avoir plusieurs réponses possibles.
- Mettre à FALSE pour annuler l'inversion et obtenir ceci:
  a + b = ?
*/
$contactCaptchaCalculInverse = TRUE; // TRUE|FALSE;

// Limitation du nombre de liens dans le corps d'un message.
$contactActiverCaptchaLiens = FALSE; // TRUE|FALSE
$contactCaptchaLiensNombre = 5; // Nombre maximal de liens dans un message

########################################################################
##
## Configuration de la galerie.
##
########################################################################

/* ____________________ Général. ____________________ */

// Génération automatisée du titre principal des pages d'une galerie.
/*
- Si vaut `TRUE`, un titre `h1` sera ajouté au début de chaque page d'une galerie (accueil d'une galerie et pages individuelles d'une oeuvre).
*/
$galerieGenererTitrePages = TRUE; // TRUE|FALSE

// Qualité des images JPG générées par le script.
$galerieQualiteJpg = 90; // 0-100

// Dimensions d'une vignette si génération automatique.
/*
- La valeur `0` assignée à une dimension signifie que cette dernière sera calculée automatiquement à partir de l'autre dimension donnée ainsi que des dimensions de l'image source. Si les deux dimensions sont données, la plus grande taille possible contenable dans ces dimensions sera utilisée, sans toutefois dépasser la taille originale.
- Les proportions de l'image sont conservées.
- Au moins une dimension doit être donnée.
*/
$galerieDimensionsVignette['largeur'] = 100;
$galerieDimensionsVignette['hauteur'] = 100;

// Taille forcée pour une vignette.
/*
- En résumé: permet d'avoir des vignettes de même hauteur ou de même largeur, ou les deux.
- En détails: si la taille calculée pour la génération d'une vignette est plus petite que la taille voulue pour une vignette, ajoute des bordures blanches (ou transparentes pour les PNG) pour compléter l'espace manquant.
  - Par exemple, disons que nous avons une petite image source de 24 px × 24 px, et que la taille voulue pour une vignette est de 100 px × 100 px. Si `$galerieForcerDimensionsVignette` vaut FALSE, la vignette créée aura la même taille que l'image source (c'est-à-dire 24 px × 24 px), mais si `$galerieForcerDimensionsVignette` vaut TRUE, alors la vignette fera 100 px × 100 px, mais il y aura des marges blanches ou transparentes de 38 px autour du corps de l'image (qui se trouve donc à être centrée).
  - Bien sûr, on ne peut forcer une dimension (largeur ou hauteur) que si la dimension voulue a été précisée dans `$galerieDimensionsVignette`.
*/
$galerieForcerDimensionsVignette = TRUE; // TRUE|FALSE

/* ____________________ Accueil d'une galerie. ____________________ */

// Pagination des vignettes de la page d'accueil.
/*
- Nombre de vignettes par page (0 pour désactiver la pagination).
*/
$galerieVignettesParPage = 0;

// S'il y a pagination, affichage des liens au-dessus ou au-dessous des vignettes, ou les deux.
/*
- Chaque élément prend comme valeur TRUE ou FALSE.
*/
$galeriePagination['au-dessus'] = TRUE;
$galeriePagination['au-dessous'] = FALSE;

// Affichage d'informations au sujet de la galerie.
$galerieInfoAjout = TRUE; // TRUE|FALSE

// S'il y a des informations au sujet de la galerie, choix de leur emplacement.
$galerieInfoEmplacement = 'haut'; // haut|bas

// Fenêtre Javascript sur l'accueil de la galerie pour consulter les images.
/*
- Utiliser Slimbox 2 pour passer d'une image à une autre sur la page d'accueil de la galerie au lieu de naviguer d'une image à une autre en rechargeant toute la page.
*/
$galerieAccueilJavascript = FALSE; // TRUE|FALSE

/* ____________________ Page individuelle d'une oeuvre. ____________________ */

// Choix de la navigation entre les oeuvres.
$galerieNavigation = 'fleches'; // fleches|vignettes

// Si la navigation est faite avec des vignettes, ajout d'une petite flèche au centre des vignettes.
/*
- Il s'agit d'une superposition (une sorte de tatouage) d'une image au centre de chaque vignette. Par défaut il s'agit d'une petite flèche gauche pour la vignette de l'image précédente et d'une petite flèche droite pour la vignette de l'image suivante. Il est possible d'utiliser ses propres images. Le résultat est un seul fichier image.
- Voir la documentation pour plus de détails.
*/
$galerieNavigationTatouerVignettes = TRUE; // TRUE|FALSE

// Si la navigation est faite avec des vignettes, et si `$galerieNavigationTatouerVignettes` vaut FALSE, ajout d'une petite flèche à côté des vignettes.
/*
- Au lieu de tatouer les vignettes, ajouter une image à leur côté. Il est possible d'utiliser ses propres images d'accompagnement.
- Voir la documentation pour plus de détails.
*/
$galerieNavigationAccompagnerVignettes = TRUE; // TRUE|FALSE

// Choix de l'emplacement de la navigation.
$galerieNavigationEmplacement = 'haut'; // haut|bas

// Aperçu grâce à des minivignettes du contenu de la galerie sur les pages individuelles de chaque oeuvre.
/*
- Il s'agit d'un résumé visuel de la galerie. Chaque oeuvre est représentée par une toute petite vignette cliquable.
*/
$galerieAfficherMinivignettes = TRUE; //TRUE|FALSE

// S'il y a des minivignettes, choix de leur emplacement.
$galerieMinivignettesEmplacement = 'haut'; // haut|bas

// S'il y a des minivignettes, le nombre à afficher.
/*
- 0 pour un nombre illimité.
*/
$galerieMinivignettesNombre = 0;

// Ajout automatique d'une légende dans le cas où aucune légende n'a été précisée.
/*
- La légende générée automatiquement correspond au contenu de l'attribut `alt` et à la taille du fichier.
*/
$galerieLegendeAutomatique = FALSE; // TRUE|FALSE

// Utilisation de la syntaxe Markdown dans la légende.
/*
- Active la syntaxe Markdown pour le texte de la légende (valeur du paramètre `intermediaireLegende`).
*/
$galerieLegendeMarkdown = FALSE; // TRUE|FALSE

// Affichage d'informations Exif pour les fichiers JPG.
/*
- La version de PHP utilisée doit être compilée avec l'option `--enable-exif`. Voir <http://us3.php.net/manual/fr/exif.requirements.php> pour plus de détails. Si ce n'est pas le cas, les informations Exif ne seront tout simplement pas affichées.
*/
$galerieExifAjout = TRUE; // TRUE|FALSE

// S'il y a lieu, choix des informations Exif à afficher.
/*
- Chaque élément prend comme valeur TRUE ou FALSE.
*/
$galerieExifInfos['DateTime'] = TRUE;
$galerieExifInfos['ExposureTime'] = TRUE;
$galerieExifInfos['FNumber'] = TRUE;
$galerieExifInfos['FocalLength'] = TRUE;
$galerieExifInfos['ISOSpeedRatings'] = TRUE;
$galerieExifInfos['Make'] = TRUE;
$galerieExifInfos['Model'] = TRUE;

// Si le format original d'une image existe, emplacement du lien vers le fichier.
/*
- Si l'emplacement `icone` vaut TRUE, une petite icône est ajoutée sous l'image pour signifier que le format original existe.
- Les valeurs possibles pour chaque emplacement sont TRUE ou FALSE.
*/
$galerieLienOriginalEmplacement['image'] = TRUE;
$galerieLienOriginalEmplacement['legende'] = TRUE;
$galerieLienOriginalEmplacement['icone'] = TRUE;

// Si le format original d'une image existe, est-ce que le lien vers le fichier est pris en charge par une fenêtre Javascript (ne fonctionne pas pour le SVG)?
/*
- Cette option n'est pas conseillée pour de grandes images. Voir <http://code.google.com/p/slimbox/wiki/FAQ#Can_Slimbox_automatically_resize_my_images_when_they_are_too_lar> pour plus de détails.
*/
$galerieLienOriginalJavascript = FALSE; // TRUE|FALSE

// Si le format original d'une image existe et que le lien n'est pas pris en charge par une fenêtre Javascript, est-ce que le lien vers le fichier force le téléchargement sans affichage dans le navigateur?
$galerieLienOriginalTelecharger = FALSE; // TRUE|FALSE

// S'il y a lieu, emplacement de la légende.
/*
- La légende comprend les informations Exif et le lien vers l'image originale.
- Les choix possibles sont: haut, bas, bloc.
- Les emplacements `haut` et `bas` font référence à l'image en version intermediaire, alors que `bloc` transforme la légende en bloc positionnable comme n'importe quel autre bloc de contenu à l'aide de la variable `$ordreBlocsDansFluxHtml`.
- Les trois emplacements à préciser sont respectivement lorsqu'il n'y a pas de colonne, lorsqu'il y a une seule colonne et lorsqu'il y en a deux.
*/
$galerieLegendeEmplacement = array ('bas', 'bas', 'bas');

/* ____________________ Syndication de contenu (flux RSS). ____________________ */

// Syndication individuelle par défaut des galeries.
/*
- Note: il est possible de configurer la syndication pour chaque galerie, et ainsi donner une valeur différente de celle par défaut. En effet, si la variable `$rssGalerie` est déclarée dans une page, c'est la valeur de cette dernière qui est utilisée.
*/
$galerieActiverFluxRssParDefaut = TRUE; // TRUE|FALSE

// Syndication globale des galeries (derniers ajouts aux galeries).
/*
- La syndication globale des galeries n'est pas complètement automatique. En effet, il faut maintenir un fichier contenant la liste des galeries et de leur URL.
- Voir la documentation pour plus de détails.
*/
$galerieActiverFluxRssGlobal = TRUE; // TRUE|FALSE

// Auteur par défaut à afficher dans la syndication.
/*
- Si `$galerieFluxRssAuteurEstAuteurParDefaut` vaut TRUE, l'auteur affiché dans les flux RSS pour une oeuvre donnée est la valeur de `$auteurParDefaut` (voir ce présent fichier de configuration). Dans tous les cas, si le champ `auteurAjout` est précisé pour l'oeuvre donnée dans le fichier de configuration de la galerie en question, c'est la valeur de ce dernier qui est utilisée.
*/
$galerieFluxRssAuteurEstAuteurParDefaut = TRUE; // TRUE|FALSE
?>


Contenu du fichier de configuration de l'administration de Squeletml


<?php
########################################################################
##
## Configuration générale.
##
########################################################################

// URL relative de la page de maintenance à partir de `$urlRacine/`.
$adminUrlMaintenance = 'maintenance.php';

// Taille en octets du dossier de cache.
/*
- Exemples:
  - `102400` équivaut à 100 Kio;
  - `512000` équivaut à 500 Kio;
  - `1048576` équivaut à 1 Mio;
  - `2097152` équivaut à 2 Mio;
  - `5242880` équivaut à 5 Mio;
  - `10485760` équivaut à 10 Mio;
  - `26214400` équivaut à 25 Mio;
  - `52428800` équivaut à 50 Mio;
*/
$adminTailleCache = '5242880';

// Activation de boîtes déroulantes par défaut.
/*
- Voir les explications de la variable `$boitesDeroulantesParDefaut` dans le fichier de configuration du site.
*/
$adminBoitesDeroulantesParDefaut = '';

// Activation de boîtes déroulantes à la main par défaut.
/*
- Voir les explications de la variable `$boitesDeroulantesAlaMainParDefaut` dans le fichier de configuration du site.
*/
$adminBoitesDeroulantesAlaMainParDefaut = TRUE; // TRUE|FALSE

// Activation de l'infobulle.
/*
- L'infobulle apparaît lors du survol du curseur au-dessus de l'icône des propriétés d'un dossier ou d'un fichier, et contient plusieurs informations sur ce dernier.
- Note: lors du listage de dossiers contenant beaucoup de fichiers, cette option peut ralentir considérablement l'affichage de la page. C'est la raison pour laquelle il peut être intéressant de la désactiver.
*/
$adminActiverInfobulle['contenuDossier'] = TRUE; // TRUE|FALSE
$adminActiverInfobulle['listeDesDossiers'] = TRUE; // TRUE|FALSE
$adminActiverInfobulle['apercuGalerie'] = TRUE; // TRUE|FALSE

// Inclusion du bas de page.
$adminInclureBasDePage = TRUE; // TRUE|FALSE

/* ____________________ En-tête HTML. ____________________ */

// Choix du DTD (Définition de Type de Document).
/*
- Voir les explications de la variable `$xhtmlStrict` dans le fichier de configuration du site.
*/
$adminXhtmlStrict = TRUE; // TRUE|FALSE

// Encodage de l'administration.
$adminCharset = 'UTF-8';

// Contenu par défaut de la métabalise `robots`.
/*
- Voir les explications de la variable `$robotsParDefaut` dans le fichier de configuration du site.
*/
$adminRobots = 'noindex, nofollow, noarchive';

// Langue par défaut de l'administration.
/*
- Langue par défaut si aucune autre précision n'est apportée. Si la variable `$langue` est déclarée dans une page, c'est la valeur de cette dernière qui est utilisée.
- Voir la fonction `langue()`.
*/
$adminLangueParDefaut = 'fr';

// Fichiers inclus dans des balises `link` et `script`.
/*
- Voir les explications de la variable `$balisesLinkScript` dans le fichier de configuration du site.
*/
$adminBalisesLinkScript[] = "$urlRacineAdmin/*#css#$urlRacineAdmin/css/admin.css";
$adminBalisesLinkScript[] = "$urlRacineAdmin/*#css#$urlRacineAdmin/css/extensions-proprietaires.css";
$adminBalisesLinkScript[] = "$urlRacineAdmin/*#csslteIE7#$urlRacineAdmin/css/ie6-7.css";
$adminBalisesLinkScript[] = "$urlRacineAdmin/*#cssltIE7#$urlRacineAdmin/css/ie6.css";
$adminBalisesLinkScript[] = "$urlRacineAdmin/*#css#$urlRacine/css/extensions-proprietaires.css";
$adminBalisesLinkScript[] = "$urlRacineAdmin/*#js#$urlRacine/js/phpjs/php.min.js";
$adminBalisesLinkScript[] = "$urlRacineAdmin/*#js#$urlRacine/js/squeletml.js";
$adminBalisesLinkScript[] = "$urlRacineAdmin/*#js#$urlRacineAdmin/js/squeletml.js";
$adminBalisesLinkScript[] = "$urlRacineAdmin/*#favicon#$urlRacine/fichiers/favicon.png";
$adminBalisesLinkScript[] = "$urlRacineAdmin/rss.admin.php*#js#$urlRacine/js/jquery/jquery.min.js";
$adminBalisesLinkScript[] = "$urlRacineAdmin/rss.admin.php*#js#$urlRacineAdmin/js/jquery-ui/ui.core.js";
$adminBalisesLinkScript[] = "$urlRacineAdmin/rss.admin.php*#js#$urlRacineAdmin/js/jquery-ui/ui.sortable.js";
$jsDirect = <<<JS
    $(function()
    {
        $('ul.triable').sortable();
    });
JS;
$adminBalisesLinkScript[] = "$urlRacineAdmin/rss.admin.php*#jsDirect#$jsDirect";
$adminBalisesLinkScript[] = "$urlRacineAdmin/categories.admin.php*#js#$urlRacine/js/jquery/jquery.min.js";
$adminBalisesLinkScript[] = "$urlRacineAdmin/categories.admin.php*#js#$urlRacineAdmin/js/jquery-ui/ui.core.js";
$adminBalisesLinkScript[] = "$urlRacineAdmin/categories.admin.php*#js#$urlRacineAdmin/js/jquery-ui/ui.sortable.js";
$adminBalisesLinkScript[] = "$urlRacineAdmin/categories.admin.php*#jsDirect#$jsDirect";

########################################################################
##
## Porte-documents.
##
########################################################################

// Valeur de l'attribut `action` des formulaires.
$adminAction = $_SERVER['SCRIPT_NAME'];

// Symbole variable GET.
/*
- Si la variable `$adminAction` contient déjà une variable GET, mettre `&amp;`, sinon mettre `?`.
*/
$adminSymboleUrl = '?';

/* ____________________ Liste des fichiers et dossiers. ____________________ */

// Dossier racine contenant les fichiers (sans / à la fin).
/*
- Le chemin peut être absolu ou bien relatif à partir du dossier racine de l'administration (valeur de `$racineAdmin`).
- Exemple de dossier absolu:
  $adminDossierRacinePorteDocuments = '/var/www/squeletml/site';
- Exemple de dossier relatif:
  $adminDossierRacinePorteDocuments = '../site';
*/
$adminDossierRacinePorteDocuments = '..';

// Filtre d'accès aux dossiers.
/*
- Il est possible d'appliquer un filtre d'accès à la liste des dossiers du site. Un dossier inaccessible ne peut être géré par le porte-documents ni téléchargé par l'administration.
- Pour ne préciser que les dossiers à prendre en compte, mettre 'dossiersInclus'
- Pour ne préciser que les dossiers à exclure, mettre 'dossiersExclus'
- Pour ne pas appliquer de filtre, laisser la variable vide, c'est-à-dire:
  $adminTypeFiltreAccesDossiers = '';
*/
$adminTypeFiltreAccesDossiers = 'dossiersExclus';

// Dossiers à prendre en compte dans le filtre d'accès.
/*
- Si la variable `$adminTypeFiltreAccesDossiers` est vide, aucun filtre ne sera appliqué.
- Le chemin peut être absolu ou bien relatif à partir du dossier racine de l'administration (valeur de `$racineAdmin`).
- Lister les dossiers en les séparant par une barre verticale | (ne pas mettre d'espace).
- Exemple:
  $adminFiltreAccesDossiers = '../rep|../rep2|../rep3/sous-rep4';
*/
$adminFiltreAccesDossiers = '../.bzr';

// Filtre d'affichage des dossiers.
/*
- Il est possible d'appliquer un filtre d'affichage à la liste des dossiers du site. Un dossier dont l'affichage est désactivé est quand même accessible par le porte-documents et téléchargeable; il n'apparaît simplement pas par défaut dans le porte-documents, ce qui allège l'utilisation de cet outil.
- Pour ne préciser que les dossiers à prendre en compte, mettre 'dossiersAffiches'
- Pour ne préciser que les dossiers à exclure, mettre 'dossiersNonAffiches'
- Pour ne pas appliquer de filtre, laisser la variable vide, c'est-à-dire:
  $adminTypeFiltreAffichageDossiers = '';
*/
$adminTypeFiltreAffichageDossiers = 'dossiersNonAffiches';

// Listage du contenu des sous-dossiers lors de l'affichage du contenu d'un dossier.
$adminListerSousDossiers = FALSE; // TRUE|FALSE

// Si `$adminListageSousDossiers` vaut TRUE, dossiers à prendre en compte dans le filtre d'affichage.
/*
- Si la variable `$adminTypeFiltreAffichageDossiers` est vide, aucun filtre ne sera appliqué.
- Voir les explication de la variable `$adminFiltreAccesDossiers` dans le présent fichier de configuration pour la syntaxe à utiliser.
*/
$adminFiltreAffichageDossiers = '../admin|../css|../fichiers|../inc|../js|../locale|../site/cache|../site/fichiers/galeries|../src|../xhtml';

/* ____________________ Ajout de fichiers. ____________________ */

// Taille maximale des fichiers ajoutés (en octets).
$adminTailleMaxFichiers = adminPhpIniOctets(ini_get('upload_max_filesize'));

// Filtre des noms de fichier.
/*
- Le filtre convertit automatiquement les caractères différents de `a-zA-Z0-9.-_+` en tiret, et les caractères accentués par leur équivalent non accentué (par exemple «é» devient «e»).
*/
$adminFiltreNom = FALSE; // TRUE|FALSE

// Filtre du type Mime.
$adminFiltreTypesMime = TRUE; // TRUE|FALSE

// Si `$adminFiltreTypesMime` vaut TRUE, types MIME permis pour les fichiers ajoutés.
/*
- Si `$adminFiltreTypesMime` vaut TRUE et que le tableau `$adminTypesMimePermis` est vide, l'ajout de fichiers par le porte-documents sera désactivé.
*/
$adminTypesMimePermis['gif'] = 'image/gif';
$adminTypesMimePermis['jpeg|jpg|jpe'] = 'image/jpeg';
$adminTypesMimePermis['png'] = 'image/png';
$adminTypesMimePermis['svg|svgz'] = 'image/svg+xml';
$adminTypesMimePermis['bmp'] = 'image/x-ms-bmp';
$adminTypesMimePermis['tiff|tif'] = 'image/tiff';
$adminTypesMimePermis['xcf'] = 'application/x-xcf';
$adminTypesMimePermis['psd'] = 'image/x-photoshop';

$adminTypesMimePermis['html|htm|shtml'] = 'text/html';
$adminTypesMimePermis['xhtml|xht'] = 'application/xhtml+xml';
$adminTypesMimePermis['xml|xsl'] = 'application/xml';
$adminTypesMimePermis['css'] = 'text/css';
$adminTypesMimePermis['asc|txt|text|pot|ini'] = 'text/plain';

$adminTypesMimePermis['odb'] = 'application/vnd.oasis.opendocument.database';
$adminTypesMimePermis['odp'] = 'application/vnd.oasis.opendocument.presentation';
$adminTypesMimePermis['ods'] = 'application/vnd.oasis.opendocument.spreadsheet';
$adminTypesMimePermis['odt'] = 'application/vnd.oasis.opendocument.text';
$adminTypesMimePermis['rtf'] = 'application/rtf';
$adminTypesMimePermis['mdb'] = 'application/msaccess';
$adminTypesMimePermis['ppt|pps'] = 'application/vnd.ms-powerpoint';
$adminTypesMimePermis['pptx'] = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
$adminTypesMimePermis['xls|xlb|xlt'] = 'application/vnd.ms-excel';
$adminTypesMimePermis['xlsx'] = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
$adminTypesMimePermis['doc|dot'] = 'application/msword';
$adminTypesMimePermis['docx'] = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
$adminTypesMimePermis['pdf'] = 'application/pdf';
$adminTypesMimePermis['ps|ai|eps'] = 'application/postscript';

$adminTypesMimePermis['tar'] = 'application/x-tar';
$adminTypesMimePermis['7z'] = 'application/x-7z-compressed';
$adminTypesMimePermis['gtar|tgz|taz'] = 'application/x-gtar';
$adminTypesMimePermis['zip'] = 'application/zip';
$adminTypesMimePermis['rar'] = 'application/rar';

$adminTypesMimePermis['ogg|ogx'] = 'application/ogg';
$adminTypesMimePermis['oga|spx'] = 'audio/ogg';
$adminTypesMimePermis['ogv'] = 'video/ogg';
$adminTypesMimePermis['avi'] = 'video/x-msvideo';
$adminTypesMimePermis['mpga|mpega|mp2|mp3|m4a'] = 'audio/mpeg';
$adminTypesMimePermis['mpeg|mpg|mpe'] = 'video/mpeg';
$adminTypesMimePermis['mp4'] = 'video/mp4';
$adminTypesMimePermis['ra|rm|ram'] = 'audio/x-pn-realaudio';
$adminTypesMimePermis['wma'] = 'audio/x-ms-wma';
$adminTypesMimePermis['wmv'] = 'video/x-ms-wmv';
$adminTypesMimePermis['qt|mov'] = 'video/quicktime';

/* ____________________ Actions sur les fichiers. ____________________ */

// Actions à activer dans le porte-documents.
/*
- Chaque élément peut valoir TRUE ou FALSE.
*/
$adminPorteDocumentsDroits['ajouter'] = TRUE;
$adminPorteDocumentsDroits['copier'] = TRUE;
$adminPorteDocumentsDroits['creer'] = TRUE;
$adminPorteDocumentsDroits['deplacer'] = TRUE;
$adminPorteDocumentsDroits['editer'] = TRUE;
$adminPorteDocumentsDroits['modifier-permissions'] = TRUE;
$adminPorteDocumentsDroits['renommer'] = TRUE;
$adminPorteDocumentsDroits['supprimer'] = TRUE;
$adminPorteDocumentsDroits['telecharger'] = TRUE;

// Si `$adminPorteDocumentsDroits['edition']` vaut TRUE, activer une aide lors de l'édition.
/*
- Il y a deux possibilités:
  - activer l'ajout d'une barre de raccourcis de balises HTML à l'aide de [BUEditor](http://ufku.com/drupal/bueditor), qui permet également de visualiser un aperçu du code HTML.
  - activer la coloration en direct du **code** à l'aide de [CodeMirror](http://marijn.haverbeke.nl/codemirror/) durant la saisie dans le `textarea`. La coloration s'applique alors au code PHP, HTML, CSS et Javascript (séparément ou entremêlés dans le même fichier);
- Pour désactiver l'aide, laisser vide, c'est-à-dire:
  $adminAideEdition = '';
*/
$adminAideEdition = 'CodeMirror'; // BUEditor|CodeMirror
?>