Squeletml

Squelette XHTML musclé par PHP!

Documentation de Squeletml

Dépendances

Squeletml requiert un serveur Apache avec PHP 5. Aucune base de données n'est utilisée.

Certains dossiers doivent être accessibles en écriture:

  • lors de l'installation, des fichiers sont créés dans le dossier racine de Squeletml, et possiblement dans des dossiers de langue (pour l'instant, seulement en/);

  • l'administration de Squeletml peut devoir créer des fichiers dans différents sous-dossiers de site/, principalement les suivants:

    • site/admin/cache/
    • site/cache/
    • site/fichiers/galeries/
    • site/inc/

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é.

  • Pour générer automatiquement des vignettes ou redimensionner des images d'une galerie, la bibliothèque GD doit être installée (par exemple, sous Ubuntu 10.10, vérifier que le paquet php5-gd est installé).

  • Pour afficher les données Exif dans les galeries, la fonction PHP exif_read_data() doit être disponible.

  • La détection du type MIME peut se faire par Fileinfo de PHP ou par la commande file sur le système.

  • La rotation automatique et sans perte de qualité des images JPG peut se faire avec la commande exiftran sur le système, ou bien avec la commande jpegtran sur le système et la fonction PHP exif_read_data().

  • La suppression sans perte de qualité des données Exif des images JPG peut se faire avec la commande jpegtran sur le système.

  • La récupération de contenu externe se fait par cURL si disponible (par exemple, sous Ubuntu 10.10, vérifier que le paquet php5-curl est installé), sinon par file_get_contents(). À ce sujet, il semble que Free.fr a modifié au début 2010 la configuration de ses serveurs, et une requête HTTP retourne systématiquement un code d'erreur 403. Par exemple, file_get_contents('http://www.squeletml.net/'); retourne ceci:

    HTTP/1.0 403 Forbidden
    

    Selon la FAQ du site «Les Pages Perso Chez Free», il faut demander sur le forum d'aide de Free.fr de mettre sur la liste blanche les URL que l'on souhaite atteindre.

    Dans ces conditions, sans un déblocage par Free de l'URL de votre site, les catégories, les flux RSS et la génération automatique du cache par le cron ne sont pas fonctionnels.

Installation

La procédure d'installation est très simple. Il faut commencer par télécharger l'archive de la dernière version sur la page de téléchargement du logiciel, extraire cette archive et placer les fichiers sur votre serveur, par exemple par ftp.

Mise en situation

On télécharge et extrait l'archive, ce qui crée le dossier squeletml.

  • Pour avoir un site situé dans un répertoire, copier le dossier squeletml 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, ce qui nous donne l'adresse http://www.nomDeDomaine.ext/.

    Important: à la racine du dossier créé par l'extraction de l'archive, il y a au moins un fichier dont le nom débute par un point. De tels fichiers sont dits «cachés» (à tout le moins sur les systèmes de type Unix), et pour les voir, il faut généralement que le gestionnaire de fichiers soit configuré en conséquence ou que la ligne de commande comporte un argument conséquent. Par exemple, dans Nautilus, on peut afficher les fichiers cachés en allant dans Affichage et en cochant Afficher les fichiers cachés. En ligne de commande, ls accepte l'argument -a:

    ls -a
    

On termine l'installation de façon automatisée ou à la main.

Installation automatisée

Visiter la page d'accueil de votre nouveau site et suivre les quelques indications.

Si tout se passe bien, Squeletml créera automatiquement les fichiers nécessaires et la structure par défaut de votre site sera accessible.

Mise en situation

On visite dans notre navigateur la page d'accueil du nouveau site, ce qui nous donne http://www.nomDeDomaine.ext/monSiteSqueletml/ ou http://www.nomDeDomaine.ext/ selon le choix effectué à l'étape 1, et on suit les indications affichées.

Installation à la main

Par défaut, l'installation se fait en passant par une page web. Cependant, il est possible d'installer Squeletml à la main.

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

Tant que l'installation n'est pas terminée, la page d'accueil de votre site Squeletml dirigera vers la procédure d'installation par défaut passant par une page web.

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), trouver le fichier modeles/init.inc.php.modele, le copier et le coller sous le nom init.inc.php (il faut donc enlever le .modele final du nom) à la racine du site.

Ce fichier contient deux variables obligatoires à renseigner:

  • $urlRacine: il s'agit de l'adresse URL vers votre site 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.

    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 entièrement disponible dans cette langue. Pour l'instant, une traduction partielle en anglais accompagne Squeletml.

    Vous pouvez également commenter les langues dont vous ne vous servez pas. Seules les langues existant dans le tableau $accueil apparaissent dans le menu des langues généré automatiquement par Squeletml.

    Exemple d'un site n'utilisant que le français:

    $accueil['fr'] = $urlRacine;
    #$accueil['en'] = $urlRacine . '/en';
    

    Exemple d'un site utilisant le français et l'anglais:

    $accueil['fr'] = $urlRacine;
    $accueil['en'] = $urlRacine . '/en';
    

    Si une langue n'est pas utilisée, il est conseillé de supprimer son dossier d'accueil ou de créer dans ce dossier un fichier interdisant son accès. Par exemple, si le site n'utilise pas l'anglais, nous pourrions supprimer le dossier d'accueil par défaut de cette langue, c'est-à-dire $urlRacine/en, ou y mettre un fichier .htaccess (donc $urlRacine/en/.htaccess) contenant ceci:

    Deny from all
    

    D'ailleurs, un tel fichier .htaccess est ajouté par l'installateur automatisé dans chaque dossier d'accueil d'une langue inactive.

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
Cas des serveurs de Free.fr

Pour une installation de Squeletml sur un serveur de Free.fr, il faut effectuer en plus l'action suivante:

  • trouver la variable $serveurFreeFr et modifier sa valeur pour TRUE.

Protection de l'administration (fichiers .htaccess et .acces)

Trouver le fichier modeles/.htaccess.modele, le copier et le coller sous le nom .htaccess (il faut donc enlever le .modele final du nom) à la racine du site. Ensuite, visiter la page suivante:

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

et ajouter un utilisateur. Un fichier .acces sera créé à la racine de votre site Squeletml. Ce fichier contient la liste des utilisateurs.

Cas des serveurs de Free.fr

Si Squeletml est installé sur un serveur de Free.fr, le fichier à trouver est modeles/.htaccess.free.fr.modele. La suite est la même (copie et collage sous le nom .htaccess à la racine du site).

Chemin des pages d'erreur

Le fichier .htaccess 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.

Déclaration de l'installation terminée

Créer un fichier vide squeletml-est-installe.txt dans le dossier site/inc, ce qui donne:

site/inc/squeletml-est-installe.txt

L'installation par défaut passant par une page web sera ainsi désactivée.

Le fichier robots.txt

Vous pouvez trouver le fichier modeles/robots.txt.modele, le copier et le coller sous le nom robots.txt (il faut donc enlever le .modele final du nom) à la racine du site.

Vous pouvez personnaliser ce fichier ou le laisser tel quel.

Architecture de Squeletml

Dossiers

L'arborescence de Squeletml est la suivante:

  • admin (le cas échéant, modifier le nom du dossier d'administration)
  • css
  • doc
  • en
  • fichiers
  • inc
  • js
  • locale
  • modeles
  • 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.

  • categorie.inc.php: construit et analyse la liste des articles classés dans 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 photo, 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.

    Quelques variables peuvent être utilisées dans le fichier de configuration personnalisé pour aider à construire des liens:

    • $urlFichiers
    • $urlRacineAdmin
    • $urlSite

    Voir la section «Variables et constantes utiles» pour une description de ces variables.

  • 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. Deux traitements personnalisés peuvent être effectués dans ce fichier:

    • vous pouvez créer le fichier site/inc/dernier-pre.inc.php, qui sera inséré au début de inc/dernier.inc.php;
    • vous pouvez également créer le fichier site/inc/dernier.inc.php, qui sera inséré à la fin de celui par défaut.
  • envoyer-amis.inc.php: crée les variables nécessaires à l'incorporation au formulaire de contact du module «Envoyer à des amis». Vous pouvez modifier ces variables en créant le fichier site/inc/envoyer-amis.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 image. 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. Deux traitements personnalisés peuvent être effectués dans ce fichier:

    • vous pouvez créer le fichier site/inc/premier-pre.inc.php, qui sera inséré dans inc/premier.inc.php après la deuxième série d'inclusions, donc juste avant les affectations en masse;
    • vous pouvez également 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 modeles

Le dossier modeles contient des modèles qui sont utilisés par l'installateur automatisé ou utilisable lors d'une installation manuelle, mais contient aussi des structures de fichier CSS et de fichiers de configuration (configuration du site et de l'administration).

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.

    Mise en situation: nous voulons afficher sous le champ nom un nouveau champ de saisie pour le code postal, et ce pour les formulaires en français.

    Il faut commencer par ajouter le code du nouveau champ de saisie dans le fichier site/xhtml/fr/form-contact-champs-apres-nom.inc.php, ce qui donne par exemple:

    <p><label for="inputCodePostal">Votre code postal:</label><br />
    <input id="inputCodePostal" class="champInfo" type="text" name="codePostal" size="7" maxlength="7" value="<?php echo $codePostal; ?>" /></p>
    

    Ensuite, il faut ajouter le traitement de ce nouveau champ dans le fichier site/inc/contact.inc.php. Le traitement doit inclure la validation de la saisie ainsi que son utilisation lorsque toutes les données sont valides et que le courriel peut être envoyé. Cela peut donner ce qui suit:

    <?php
    $codePostal = '';
    
    // L'envoi du message est demandé
    if (isset($_POST['envoyer']))
    {
        $codePostal = securiseTexte($_POST['codePostal']);
        $codePostal = str_replace(' ', '', $codePostal);
        $codePostal = strtoupper($codePostal);
    
        if (empty($codePostal))
        {
            $erreurFormulaire = TRUE;
            $messagesScript .= "<li class=\"erreur\">Vous n'avez pas inscrit de code postal.</li>\n";
        }
        elseif (!preg_match('/([A-Z]\d){3}/', $codePostal))
        {
            $erreurFormulaire = TRUE;
            $messagesScript .= "<li class=\"erreur\">Le code postal ne semble pas avoir une forme valide. Veuillez l'inscrire sous la forme <em>A1A1A1</em>.</li>\n";
        }
    
        // Envoi du message
        if ($formulaireValide)
        {
            if (!empty($infosCourriel['message']))
            {
                $infosCourriel['message'] = rtrim($infosCourriel['message']) . "\n\n=========================\n\n";
            }
    
            $infosCourriel['message'] .= "Code postal: $codePostal";
        }
    }
    ?>
    
  • 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.

Fichier piwik.inc.php

Piwik est un logiciel libre de statistiques web. Lorsqu'un site est ajouté dans Piwik, un code est généré et doit être inséré dans chaque page du site en question. Squeletml permet d'ajouter rapidement ce code. En effet, si un fichier piwik.inc.php existe dans le dossier site/xhtml, il sera automatiquement inclus comme bloc dans les pages, par défaut à la fin du bas de page. La région peut être modifiée dans le fichier de configuration comme tout autre bloc de contenu (voir la section «Nombre de colonnes et blocs de contenu»).

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 -->

                        <div id="milieuInterieurContenu">
                            Contenu entré directement par l'utilisateur.
                        </div><!-- /#milieuInterieurContenu -->

                        <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="envoyerAmis" class="bloc">
                        ...
                    </div><!-- /#envoyerAmis -->

                    <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
    • init.inc.php
    • inc/devel.inc.php
    • site/inc/devel.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
    • site/inc/premier-pre.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/envoyer-amis.inc.php
        • site/inc/envoyer-amis.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
    • site/inc/dernier-pre.inc.php
    • inc/blocs.inc.php (voir les détails plus haut)
    • inc/contact.inc.php
      • inc/envoyer-amis.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/envoyer-amis.inc.php (voir les détails plus haut)
      • site/inc/contact.inc.php avant l'inclusion du code XHTML du formulaire
      • 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
  • doc/documentation.mdtxt
  • doc/INCOMPATIBILITES.mdtxt
  • doc/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.

    Il est possible de personnaliser la page de maintenance en créant le fichier maintenance.inc.php à la racine du site. Si un tel fichier existe, il sera utilisé à la place de la page de maintenance par défaut.

    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 est squeletml.

  • Ensuite, sélectionnez et copiez tout le contenu de ce dossier, et collez la sélection dans l'emplacement de votre site, et ce en acceptant de fusionner les dossiers et d'écraser les fichiers déjà existants.

    **Important**: ne pas oublier d'afficher les fichiers cachés pour bien les sélectionner. Voir la section «Installation» pour plus de détails.
    

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 les quelques fichiers de configuration à la racine (.acces, .htaccess, init.inc.php et 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;
  • il est bon de vérifier si les fichiers de configuration à la racine par défaut 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;
  • 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 reproduire 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, si la valeur est différente de $apercuParDefaut du fichier de configuration du site. Le contenu de $apercu est inséré en tant que commentaire HTML au début de la div milieuInterieurContenu s'il n'est pas vide et si $inclureApercu du fichier de configuration du site 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 milieuInterieurContenu 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="milieuInterieurContenu">
        <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>
    

    Les espaces dans le commentaire <!-- /aperçu --> sont optionnelles, et le «c» peut s'écrire sans cédille. Voici des exemples de commentaire valide:

    • <!-- /aperçu -->
    • <!--/aperçu-->
    • <!-- /apercu -->
    • <!--/apercu-->

    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.

    Sinon si $apercu vaut exactement automatique ($apercu = "automatique";), le commentaire HTML inséré sera donc <!-- APERÇU: automatique -->, ce qui signifiera à Squeletml d'utiliser comme aperçu les premiers caractères de la div milieuInterieurContenu. Le nombre de caractères correspond à la valeur de la variable $tailleApercuAutomatique du fichier de configuration du site.

  • $auteur: nom ou noms à inclure dans la métabalise author, si la valeur est différente de $auteurParDefaut du fichier de configuration du site. Si elle existe, cette variable sera utilisée dans le listage des articles classés dans une catégorie ainsi que dans le bloc des informations de publication.

  • $baliseH1: contenu de la balise h1. Il s'agit donc du titre de premier niveau pour la page courante. Exemple:

    $baliseH1 = "Titre de premier niveau de la page courante";
    

    Ce titre peut très bien être ajouté directement dans le corps de la page en HTML sans passer par la variable $baliseH1. Le but d'utiliser cette variable est:

    • d'éviter de saisir deux fois la même information dans le cas où nous voulons que la balise title ait le même contenu que le titre de premier niveau. En effet, si la variable $baliseTitle n'est pas renseignée, mais que $baliseH1 l'est, alors la variable $baliseTitle aura le même contenu que le titre h1;

    • de pouvoir manipuler le titre de premier niveau comme un bloc de contenu (balise-h1), et ainsi pouvoir choisir son emplacement parmi les diverses régions possibles. Par exemple, le bloc de contenu sur les informations de publication s'affiche par défaut sous le contenu dans la région finInterieurContenu. En créant un bloc balise-h1, il est ainsi possible de faire apparaître le bloc des informations de publication dans le haut de la page, entre le titre de premier niveau et le contenu.

  • $baliseTitle: contenu de la balise title. Si cette variable est vide, elle se verra assigner la valeur de la variable $baliseH1 si cette dernière n'est pas vide, sinon 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 du site pour une description détaillée de la syntaxe à utiliser.

  • $boitesDeroulantesAlaMain: prend la valeur TRUE ou FALSE, si la valeur est différente de $boitesDeroulantesAlaMainParDefaut du fichier de configuration du site. 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.

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

    $classesBody = 'maClasse1 maClasse2';
    

    Prendre note que la balise body contient déjà par défaut plusieurs classes, dont la plupart ont un nom explicite. Voici cependant quelques classes qui méritent d'être définies:

    • accueil: ajoutée aux pages d'accueil de chaque langue du site.
    • article: ajoutée aux pages étant classées dans au moins une catégorie.
    • categorie: ajoutée aux pages listant les articles appartenant à une catégorie.
    • galerie: ajoutée aux pages d'une galerie, que ce soit la page d'accueil de la galerie ou une page individuelle d'une image.
    • galerieAccueil: ajoutée aux pages d'accueil de chaque galerie.
    • galeriePageImage: ajoutée à chaque page individuelle d'une image dans une galerie.
    • pageStandard: ajoutée aux pages n'étant ni un formulaire de contact, ni une galerie, ni une page listant les articles appartenant à une catégorie.
    • pageStandardSansCategorie: ajoutée aux pages n'étant ni un formulaire de contact, ni une galerie, ni une page listant les articles appartenant à une catégorie, ni une page étant classée dans au moins une catégorie.
  • $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 du site, 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 classés dans 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 classés dans 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.

  • $envoyerAmis: prend la valeur TRUE ou FALSE, selon qu'on veut activer ou non cette option pour la page courante, si la valeur est différente de $activerEnvoyerAmisParDefaut du fichier de configuration du site.

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

  • $idGalerie: un nombre, un mot ou une phrase identifiant la galerie. Le nom du dossier de la galerie dans site/fichiers/galeries correspond à l'identifiant filtré. 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 = "Promenade en forêt";, Squeletml va rechercher le dossier site/fichiers/galeries/Promenade-en-foret. 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) pour la page courante, si la valeur est différente de $afficherInfosPublicationParDefaut du fichier de configuration du site.

  • $langue: langue de la page courante, si la valeur est différente de $langueParDefaut du fichier de configuration du site.

  • $licence: licence de la page courante, si la valeur est différente de $licenceParDefaut du fichier de configuration du site. 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.

  • $lienPage: prend la valeur TRUE ou FALSE, selon qu'on veut afficher ou non une suggestion de code pour un lien vers la page courante, si la valeur est différente de $afficherLienPageParDefaut du fichier de configuration du site.

  • $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 du site, les mots-clés ne seront pas ajoutés à l'en-tête de la page, même si $motsCles n'est pas vide.

  • $partage: prend la valeur TRUE ou FALSE, selon qu'on veut activer ou non cette option pour la page courante, si la valeur est différente de $activerPartageParDefaut du fichier de configuration du site.

  • $robots: contenu de la métabalise robots, si la valeur est différente de $robotsParDefaut du fichier de configuration du site.

  • $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 du site.

  • $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 du site.

  • $tableDesMatieres: prend la valeur TRUE ou FALSE, selon qu'on veut générer ou non une table des matières pour la page courante, si la valeur est différente de $afficherTableDesMatieresParDefaut du fichier de configuration du site. La table des matières est générée par Javascript.

    Le contenu analysé pour la génération de la table des matières est la div milieuInterieurContenu pour les pages du site et la div interieurContenu pour les pages de l'administration. La table est ajoutée au début de la div analysée.

    Par défaut, tous les titres de niveaux 2 à 6 présents à l'intérieur de la div analysée constituent la table des matières. Il est possible de configurer la table des matières dans le fichier de configuration du site.

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 Extra:

Pour ce faire, deux fonctions sont mises à disposition:

  • mdtxt(), permettant de convertir en HTML un fichier écrit en Markdown;
  • mdtxtChaine(), permettant de convertir en HTML une chaîne de caractères écrite en Markdown.
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);
    ?>
    
Syntaxe Markdown avec imbrication de code PHP

Il est possible d'imbriquer du code PHP dans un fichier ou une chaîne utilisant la syntaxe Markdown. Le code PHP sera évalué avant la conversion du Markdown en HTML.

Pour insérer du PHP dans un fichier écrit en Markdown:

  1. Créer un fichier Markdown, par exemple ma-page.php.mdtxt, et y insérer du code PHP entre les balises [php] et [/php]. Exemple:

    Les **licences présentées dans cet article** sont les suivantes:
    
    - [php]echo licence($urlRacine, 'art-libre');[/php]
    - [php]echo licence($urlRacine, 'cc-by-sa');[/php]
    
    Les autres licences le seront dans un prochain article.
    
  2. Créer la page PHP, par exemple ma-page.php, comme n'importe quelle autre page du site.

  3. À l'intérieur de ma-page.php, à l'endroit où on insère habituellement le contenu, insérer le code suivant:

    <?php
    $cheminMdtxtPhp = $racine . '/chemin/vers/ma-page.php.mdtxt';
    eval(MDTXT_PHP);
    ?>
    

    Ne pas oublier de modifier la valeur de la variable $cheminMdtxtPhp pour préciser le bon chemin vers le fichier Markdown.

Maintenant, pour insérer du PHP dans une chaîne écrite en Markdown:

  1. Créer une page pour le site, par exemple une-page.php.

  2. À l'endoit où on insère habituellement le contenu, insérer le code suivant:

    <?php
    $chaineMdtxtPhp = 'Voici une liste de **1 à 5**:
    
    [php]
    for ($i = 1; $i <= 5; $i++)
    {
        echo "- $i\n";
    }
    [/php]';
    eval(MDTXT_PHP);
    ?>
    

    Modifier la valeur de la variable $chaineMdtxtPhp pour correspondre au contenu voulu.

Note: si les variables $chaineMdtxtPhp et $cheminMdtxtPhp existent toutes les deux, la variable $chaineMdtxtPhp a préséance.

Fonctions diverses

Voir la page exemple.php située à la racine de votre site Squeletml pour voir plusieurs exemples d'utilisation de fonctions aidant à la rédaction du contenu.

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 racine de Squeletml. Exemple d'inclusion d'un fichier situé à la racine de votre site Squeletml:

    <?php include $racine . '/fichier.inc.php'; ?>
    
  • $urlRacine: contient l'URL vers le dossier racine 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:

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

Dans l'exemple ci-dessus, la variable $dernieresImages contient les 5 dernières images 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 image et un lien vers la page individuelle de l'image. Aussi, le septième argument vaut TRUE, donc un lien «Voir plus d'images» 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=idCategorieFiltre (idCategorieFiltre représente la variable $idCategorie filtrée). Dans ce cas, il n'est pas nécessaire de créer la page d'accueil manuellement puisque categorie.php est une page livrée par défaut avec Squeletml et gérant l'affichage des articles d'une catégorie. 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 les dernières publications (site) et les derniers ajouts aux galeries (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.

Une catégorie spéciale apparaît seulement si elle est activée dans le tableau $activerCategoriesGlobales du fichier de configuration du site.

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 titre, aussi appelé «identifiant unique» (ou 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 Ma première galerie.

Les points suivants doivent être satisfaits pour qu'une galerie soit accessible (toutes ces étapes peuvent être réalisées facilement dans la section d'administration):

  • un dossier contenant les images, présent dans site/fichiers/galeries/. Le nom du dossier importe peu. Pour notre exemple, disons que le dossier est site/fichiers/galeries/galerie-1/;

  • un fichier de configuration listant les images à afficher et éventuellement diverses informations optionnelles, et situé dans site/fichiers/galeries/galerie-1/. 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/galerie-1/config.ini.txt ou site/fichiers/galeries/galerie-1/config.ini;

  • un fichier d'identification site/fichiers/galeries/galerie-1/id.txt ne contenant que l'identifiant de la galerie. Dans notre exemple, le fichier ne contient que Ma première galerie;

  • une page à visiter sur le site pour afficher la galerie, par exemple ma-premiere-galerie.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 à partir de l'administration de Squeletml, voici les étapes à suivre:

  1. Visiter la page admin/galeries.admin.php et se rendre à la section «Ajouter des images».

    Dans le champ «Identifiant de la galerie», inscrire l'identifiant voulu, par exemple Ma première galerie.

    Dans le champ «Fichier», préciser un fichier image ou une archive de format TAR (.tar) ou ZIP (.zip).

    Choisir d'autres options selon les besoins.

    Cliquer sur «Ajouter des images».

  2. Toujours dans la page admin/galeries.admin.php, se rendre à la section «Mettre en ligne une galerie».

    Dans le champ «Identifiant de la galerie», choisir la galerie voulue.

    Dans le champ «Emplacement de la page web», préciser la page web à créer, par exemple ma-premiere-galerie.php.

    Choisir d'autres options selon les besoins.

    Cliquer sur «Créer une page web».

Pour créer manuellement une galerie, donc sans passer par l'administration de Squeletml, les étapes sont les suivantes:

  1. Créer un dossier dans site/fichiers/galeries/, par exemple site/fichiers/galeries/galerie-1/, et y mettre les images.

  2. Créer un fichier de configuration site/fichiers/galeries/galerie-1/config.ini.txt ou site/fichiers/galeries/galerie-1/config.ini. Cette étape est développée dans la prochaine section.

  3. Créer un fichier d'identification site/fichiers/galeries/galerie-1/id.txt et y inscrire seulement l'identifiant de la galerie (par exemple Ma première galerie), ce qui donne donc un fichier d'une seule ligne.

  4. Ajouter une variable $idGalerie au début de la page qu'on veut utiliser comme galerie (par exemple, la page ma-premiere-galerie.php), et l'assigner avec l'identifiant voulu (par exemple, $idGalerie = "Ma première galerie";).

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/idGalerieDossier/config.ini.txt ou site/fichiers/galeries/idGalerieDossier/config.ini. Vous pouvez générer et mettre à jour automatiquement le contenu de ce fichier à partir de l'administration de Squeletml. Vous pouvez également le créer et le modifier à la main à l'aide d'un simple éditeur de texte.

Chaque image 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 image. Voici la liste complète des paramètres possibles:

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

    titre=Le fleuve Saint-Laurent en hiver
    
  • 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...
    
  • 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
    
  • id: utilisé dans l'adresse URL pour identifier l'image, au lieu de l'indice de la position de l'image dans le tableau de la galerie. Ceci permet de facilement déplacer des images 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'image ou du nom du fichier image. Exemple:

    id=5
    
  • licence: licence ou licences de l'image. Exemple:

    licence=art-libre
    

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

  • 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
    
  • 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
    
  • 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
    
  • auteurAjout: auteur de l'ajout de l'image 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'image 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 images. Si dateAjout n'existe pas, la date utilisée sera celle du fichier image sur le serveur retournée par la fonction PHP filemtime().

  • commentaire: n'est pas utilisé par Squeletml pour l'affichage de l'image. 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]
titre=
intermediaireLegende=
exclure=
id=
licence=
vignetteNom=
vignetteLargeur=
vignetteHauteur=
vignetteAlt=
intermediaireLargeur=
intermediaireHauteur=
intermediaireAlt=
pageIntermediaireBaliseTitle=
pageIntermediaireDescription=
pageIntermediaireMotsCles=
originalNom=
auteurAjout=
dateAjout=
commentaire=

Navigation entre les images

Il y a six méthodes possibles pour naviguer entre les images. 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

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

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.

Note: de façon générale, toute pagination sur le site effectuée à l'aide de flèches utilise les images personnalisées si ces dernières existent, sinon les flèches par défaut sont utilisées.

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 images 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 «Envoyer à des amis»

Une option «Envoyer à des amis» 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 image dans une galerie, le modèle de message contiendra une vignette de l'image 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'image, 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 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
    

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.

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 image) 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.

Note: si cURL est disponible sur le serveur, des requêtes en parallèle sont effectuées pour construire une page de catégorie, ce qui diminue le temps nécessaire à l'opération. Dans ce cas, il est moins critique d'activer le cache, même si cela demeure conseillé.

Cron

Le cron permet d'effectuer certaines tâches de maintenance:

  • génération du cache des flux RSS des dernières publications et des derniers ajouts aux galeries, ainsi que de chaque catégorie et galerie. Chaque page individuelle d'une image dans une galerie est également mise en cache. Prendre note que l'activation du cache dépend de la valeur de la variable $dureeCache du fichier de configuration du site.

  • génération des fichiers Sitemap du site et des galeries. Les galeries prises en compte sont celles listées dans le fichier de configuration du flux RSS des derniers ajouts aux galeries (site/inc/rss-galeries.ini.txt ou site/inc/rss-galeries.ini). Si le fichier d'index Sitemap n'existe pas, il sera créé. De même, si le fichier d'index Sitemap n'est pas indiqué dans le fichier robots.txt, il y sera déclaré.

Lancement du cron

Le cron peut être lancé manuellement dans l'administration (section «Accès»). Il peut aussi être lancé automatiquement dans la mesure où $activerPageCron dans le fichier de configuration du site vaut TRUE et que 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:

0 4 * * * lynx -source $urlRacine/cron.php

Grâce à la commande ci-dessus, la page cron.php est visitée une fois par jour à 4h00. Bien sûr, ne pas oublier de remplacer $urlRacine par la bonne valeur, par exemple:

0 4 * * * lynx -source http://www.nomDeDomaine.ext/cron.php

Lynx est un navigateur en mode texte. S'il n'est pas installé sur votre système, vous pouvez utiliser GNU Wget:

0 4 * * * wget -O - -q -t 1 http://www.nomDeDomaine.ext/cron.php

ou encore cURL:

0 4 * * * curl --silent --compressed http://www.nomDeDomaine.ext/cron.php

Rapport par courriel

Il est possible de recevoir un rapport par courriel au format HTML après l'exécution du cron. Pour ce faire, la variable $envoyerRapportCron du fichier de configuration du site doit valoir TRUE et un courriel d'administration doit avoir été précisé (au moins une des deux variables $courrielAdmin ou $contactCourrielParDefaut doit être renseignée).

Fichiers Sitemap

Trois fichiers Sitemap au format XML sont potentiellement utilisés par Squeletml:

  • sitemap_site.xml: contient les pages du site, et est géré dans la section d'administration. Si $ajouterPagesParCronDansSitemapSite du fichier de configuration du site vaut TRUE, les pages présentes dans le fichier de configuration des catégories et dans le flux RSS des dernières publications seront éventuellement ajoutées dans le fichier Sitemap du site par le cron;
  • sitemap_galeries.xml: si $activerSitemapGaleries du fichier de configuration du site vaut TRUE, contient la page d'acceuil de chaque galerie ainsi que chaque page individuelle d'une image dans une galerie. Ce fichier est généré automatiquement dans la section d'administration ou par le cron;
  • sitemap_index.xml: fichier d'index Sitemap regroupant les deux fichiers mentionnés ci-dessus. Ce fichier est généré automatiquement dans la section d'administration ou par le cron.

Ces trois fichiers se trouvent à la racine du site. Les fichiers Sitemap du site et des galeries supportent la nouvelle fonction (avril 2010) d'ajout pour chaque page listée dans un fichier Sitemap classique des informations au sujet des images importantes apparaissant dans la page. Voir «Adding image information to a Sitemap».

Développement

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

Le logiciel Git est utilisé pour la gestion de versions. Le dépôt peut être consulté en ligne ou récupéré en local.

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. Est utilisée en général avant la dernière révision d'une prochaine version.

  • make publier: crée les archives; y ajoute les fichiers qui ne sont pas versionnés, mais nécessaires; supprime les fichiers versionnés, mais inutiles. Est utilisée après un git tag -a ... pour la sortie d'une nouvelle version.

    Par défaut, la dernière version (représentée par la dernière étiquette) est utilisée par cette commande. Pour publier une version différente, préciser la variable version dans la ligne de commande. Exemple:

    make publier version=2.2.1
    
  • 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.

  • make exif: installe pour l'utilisateur courant un script Nautilus (sous GNU/Linux et Gnome) qui tente d'effectuer la rotation automatique d'images JPG. exiftran doit être installé. La rotation automatique est sans perte de qualité et est basée sur l'orientation déclarée dans les données Exif de l'image, si cette information existe. Pour utiliser le script, sélectionner les images JPG dans Nautilus, cliquer droit, aller dans Scripts et choisir exiftran-rotation.

    Cette fonctionnalité est accessible directement en ligne dans la section d'administration de Squeletml lors de l'ajout d'images dans une galerie si exiftran est accessible sur le serveur ou si jpegtran est accessible et que la fonction PHP exif_read_data() existe. L'intérêt du script Nautilus exiftran est quand le serveur sur lequel le site Squeletml est installé ne possède pas cette configuration.

    La désinstallation du script se fait grâce à la commande make menage-exif.

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. ____________________ */

// Adresse de l'admin.
/*
- Il s'agit de l'adresse courriel de la personne responsable de l'administration du site, donc adresse de réception des rapports générés par Squeletml.
- Si vide, utilisation de `$contactCourrielParDefaut` (voir le présent fichier de configuration) si cette dernière variable n'est pas vide.
*/
$courrielAdmin = "";

// Expéditeur des rapports de Squeletml envoyés par courriel.
/*
- Laisser vide pour utiliser la valeur par défaut du serveur.
*/
$courrielExpediteurRapports = "";

// Langue des rapports de Squeletml envoyés par courriel.
/*
- Si vide, utilisation de `$langueParDefaut` (voir le présent fichier de configuration).
*/
$langueRapports = "";

// Activation de la page du cron.
/*
- Si la page du cron est activée, le cron pourra être lancé en visitant `cron.php` à la racine du site.
- Le cron pourra toujours être lancé à partir de la section d'administration du site.
*/
$activerPageCron = TRUE; // TRUE|FALSE

// Ajout par le cron de pages dans le fichier Sitemap du site.
/*
- Si l'ajout est activé, la liste des pages déclarées dans le flux RSS des dernières publications et dans le fichier de configuration des catégories sera comparée à celle des pages déjà présentes dans le fichier Sitemap du site. Toute page manquante y sera ajoutée.
- Si l'ajout est désactivé, la composition du fichier Sitemap du site ne dépendra que des pages ajoutées en passant par l'interface d'administration ou à la main avec un éditeur de texte.
*/
$ajouterPagesParCronDansSitemapSite = TRUE; // TRUE|FALSE

// Envoi d'un rapport par courriel après l'exécution du cron.
$envoyerRapportCron = TRUE; // TRUE|FALSE

// Activation de la demande de création de compte à partir du site.
/*
- Si la demande est activée, le formulaire est accessible à la page `compte.php`, située à la racine du site.
*/
$activerCreationCompte = FALSE; // TRUE|FALSE

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

// Choix du DTD (Définition de Type de Document).
/*
- Les choix possibles sont:
  - XHTML 1.1
  - XHTML 1.0 Strict
  - XHTML 1.0 Transitional
  - HTML 4.01 Strict
  - HTML 4.01 Transitional

- Voir la fonction `doctype()`.
*/
$doctype = 'XHTML 1.0 Strict';

// 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`.
- Pour chaque langue, deux compléments sont précisables:
  - `accueil`, utilisé seulement sur la page d'accueil de la langue en question;
  - `interne`, utilisé pour toutes les autres pages dans cette langue.
- Voir la fonction `baliseTitleComplement()`.
*/
$tableauBaliseTitleComplement['fr']['accueil'] = " | Système de gestion de contenu léger et sans base de données";
$tableauBaliseTitleComplement['fr']['interne'] = " | Squeletml";
$tableauBaliseTitleComplement['en']['accueil'] = " | Lightweight content management system without database";
$tableauBaliseTitleComplement['en']['interne'] = " | 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";
- Ci-dessous, la clé est spécifiée (par exemple `$balisesLinkScript[5]`) pour permettre de modifier facilement une inclusion par défaut dans le fichier de configuration personnalisé. Pour ajouter de nouvelles inclusions, il n'est pas nécessaire de renseigner la clé (voir les exemples ci-dessus).
- Voir la fonction `linkScript()`.
*/
$balisesLinkScript[0] = "$urlRacine/*#css#$urlRacine/css/squeletml.css";
$balisesLinkScript[1] = "$urlRacine/*#css#$urlRacine/css/extensions-proprietaires.css";
$balisesLinkScript[2] = "$urlRacine/*#csslteIE7#$urlRacine/css/ie6-7.css";
$balisesLinkScript[3] = "$urlRacine/*#cssIE7#$urlRacine/css/ie7.css";
$balisesLinkScript[4] = "$urlRacine/*#cssltIE7#$urlRacine/css/ie6.css";
$balisesLinkScript[5] = "$urlRacine/*#js#$urlRacine/js/phpjs/php.min.js";
$balisesLinkScript[6] = "$urlRacine/*#js#$urlRacine/js/squeletml.js";
$balisesLinkScript[7] = "$urlRacine/*#favicon#$urlRacine/fichiers/favicon.png";

// Version par défaut des fichiers CSS 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 `$versionParDefautLinkScriptCss` vaut `1`:
  <link rel="stylesheet" type="text/css" href="http://localhost/serveur_local/squeletml/css/squeletml.css?1" media="screen" />
- Voir la fonction `linkScript()`.
*/
$versionParDefautLinkScriptCss = "";

// Version par défaut des fichiers déclarés dans le tableau `$balisesLinkScript`, à l'exception des fichiers CSS.
/*
- Voir les explications de la variable `$versionParDefautLinkScriptCss` dans le présent fichier de configuration pour plus de détails.
*/
$versionParDefautLinkScriptNonCss = "";

// 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['balise-h1']             = array (300, 300, 300);
$ordreBlocsDansFluxHtml['infos-publication']     = array (400, 400, 400);
$ordreBlocsDansFluxHtml['licence']               = array (410, 410, 410);
$ordreBlocsDansFluxHtml['lien-page']             = array (420, 420, 420);
$ordreBlocsDansFluxHtml['menu-langues']          = array (500, 500, 200);
$ordreBlocsDansFluxHtml['menu']                  = array (200, 510, 510);
$ordreBlocsDansFluxHtml['menu-categories']       = array (520, 520, 520);
$ordreBlocsDansFluxHtml['legende-image-galerie'] = array (530, 530, 530);
$ordreBlocsDansFluxHtml['flux-rss']              = array (540, 540, 540);
$ordreBlocsDansFluxHtml['envoyer-amis']          = array (550, 550, 550);
$ordreBlocsDansFluxHtml['partage']               = array (560, 560, 560);
$ordreBlocsDansFluxHtml['piwik']                 = array (699, 699, 699);
$ordreBlocsDansFluxHtml['recherche-google']      = array (570, 570, 570);

// Conditions d'insertion des blocs.
/*
- Il est possible d'ajouter des conditions à l'insertion d'un bloc de contenu. Les conditions doivent être du code PHP valide. Elles seront exécutées par la fonction PHP `eval()`. Un bloc sera inclus seulement si le code PHP retourne TRUE. Exemple:
    
        $conditionsBlocs['envoyer-amis'] = 'return strpos($url, "/dossier/") ? TRUE : FALSE;';
    
    Voici la même condition, écrite autrement:
    
        $conditionsBlocs['envoyer-amis'] = 'if (strpos($url, "/dossier/")) {return TRUE;} else {return FALSE;}';
    
    Dans cet exemple, le bloc «Envoyer à des amis» sera inclus seulement si l'URL contient `/dossier/`.
    
- Si aucune condition n'est donnée pour un bloc, le retour est automatiquement évalué à TRUE.
*/
$conditionsBlocs = array ();

// 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 des ancres.
$inclureAncres = TRUE; // TRUE|FALSE

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

// Inclusion du sous-titre.
$inclureSousTitre = TRUE; // TRUE|FALSE

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

// Activation par défaut de l'option «Envoyer à des amis».
$activerEnvoyerAmisParDefaut = TRUE; // TRUE|FALSE

// Activation par défaut du partage en passant par des marque-pages et des réseaux sociaux.
$activerPartageParDefaut = TRUE; // TRUE|FALSE

// Activation de la recherche Google.
/*
- Voir le bloc de contenu `recherche-google`.
*/
$activerRechercheGoogle = TRUE; // TRUE|FALSE

// Si `$activerRechercheGoogle` vaut TRUE, extension à utiliser.
/*
- Par exemple `ca` pour utiliser `google.ca`.
*/
$rechercheGoogleExtension = 'ca';

// 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 classés dans 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

// Affichage par défaut d'une suggestion de code pour un lien vers la page.
/*
- Le code propose un lien prêt à être intégré dans une page HTML. Si la variable `$afficherLienPage` est déclarée dans une page, c'est la valeur de cette dernière qui est utilisée.
*/
$afficherLienPageParDefaut = 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

// Options de la table des matières.
$tDmBaliseTable = 'ul'; // ol|ul
$tDmBaliseTitre = 'h2';
$tDmNiveauDepart = '2'; // de 1 à 6
$tDmNiveauArret = '6'; // de 1 à 6

// 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

// Code à exécuter après un clic sur une boîte déroulante.
/*
- Voir le deuxième paramètre de la fonction Javascript `boiteDeroulante()`.
*/
$aExecuterApresClicBd = "egaliseHauteur('interieurPage', 'surContenu', 'sousContenu', 87);";

// 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[0] = "$urlRacine/*#jsDirect#ajouteEvenementLoad(function(){egaliseHauteur('interieurPage', 'surContenu', 'sousContenu', 87);});";

// 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` `milieuInterieurContenu` 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 un peu de temps et de ressources.
- Voir les explications de la variable `$apercu` dans la documentation pour plus de détails.
*/
$inclureApercu = TRUE; // TRUE|FALSE

// Si `$inclureApercu` vaut TRUE, aperçu par défaut.
/*
- Voir les explications de la variable `$apercu` dans la documentation pour connaître les différentes valeurs possibles.
*/
$apercuParDefaut = "";

// S'il y a lieu, taille, en nombre de caractères, d'un aperçu généré automatiquement.
$tailleApercuAutomatique = 750;

// 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 articles classés dans la catégorie affichée.
*/
$genererTitrePageCategories = TRUE; // TRUE|FALSE

// Si `$genererTitrePageCategories` vaut TRUE, nom de la catégorie précédé de l'expression «Articles dans la catégorie» traduit dans la langue de la page.
/*
- Par exemple, le choix est d'afficher «Chiens» ou «Articles dans la catégorie Chiens».
*/
$titrePageCategoriesAvecMotCategorie = 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 (`site`) et les derniers ajouts aux galeries (`galeries`).
- Chaque valeur peut valoir TRUE ou FALSE.
- Par défaut, l'URL est `$urlRacine/categorie.php?id=(site|galeries)`.
*/
$activerCategoriesGlobales['site']     = TRUE;
$activerCategoriesGlobales['galeries'] = TRUE;

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

// S'il y a pagination, type de liens.
$typePaginationCategorie = 'texte'; // image|texte

// S'il y a pagination, insertion dans une boîte arrondie.
$paginationDansBoiteArrondie = TRUE; // TRUE|FALSE

/* ____________________ 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. NULL signifie que cette option ne s'applique pas au bloc en question.
- Voir la fonction `lienActif()`.
*/
$liensActifsBlocs['balise-h1']             = NULL;
$liensActifsBlocs['envoyer-amis']          = NULL;
$liensActifsBlocs['flux-rss']              = NULL;
$liensActifsBlocs['infos-publication']     = NULL;
$liensActifsBlocs['legende-image-galerie'] = FALSE; // S'il y a lieu (voir `$galerieLegendeEmplacement`).
$liensActifsBlocs['licence']               = NULL;
$liensActifsBlocs['lien-page']             = NULL;
$liensActifsBlocs['menu']                  = TRUE;
$liensActifsBlocs['menu-categories']       = TRUE; // S'il y a lieu (voir la section «Catégories» de la documentation).
$liensActifsBlocs['menu-langues']          = TRUE;
$liensActifsBlocs['partage']               = NULL;
$liensActifsBlocs['piwik']                 = NULL;
$liensActifsBlocs['recherche-google']      = NULL;

// Limite de la profondeur d'une liste dans un bloc.
/*
Pour chaque bloc, préciser par TRUE ou FALSE (ou NULL si cette option ne s'applique pas au bloc en question) 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['balise-h1']             = NULL;
$limiterProfondeurListesBlocs['envoyer-amis']          = NULL;
$limiterProfondeurListesBlocs['flux-rss']              = NULL;
$limiterProfondeurListesBlocs['infos-publication']     = NULL;
$limiterProfondeurListesBlocs['legende-image-galerie'] = FALSE;
$limiterProfondeurListesBlocs['licence']               = NULL;
$limiterProfondeurListesBlocs['lien-page']             = NULL;
$limiterProfondeurListesBlocs['menu']                  = TRUE;
$limiterProfondeurListesBlocs['menu-categories']       = TRUE; // S'il y a lieu (voir la section «Catégories» de la documentation).
$limiterProfondeurListesBlocs['menu-langues']          = FALSE;
$limiterProfondeurListesBlocs['partage']               = NULL;
$limiterProfondeurListesBlocs['piwik']                 = NULL;
$limiterProfondeurListesBlocs['recherche-google']      = NULL;

// 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['balise-h1'] = array (FALSE, FALSE, FALSE);
$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.
$contactActiverLimiteNombreLiens = FALSE; // TRUE|FALSE
$contactNombreLiensMax = 5; // Nombre maximal de liens dans un message

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

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

// Activation du Sitemap des galeries.
$activerSitemapGaleries = TRUE; // TRUE|FALSE

// 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 image).
*/
$galerieGenererTitrePages = TRUE; // TRUE|FALSE

// Si `$galerieGenererTitrePages` vaut TRUE, séparation du titre de l'image et du nom de la galerie.
/*
- Par défaut, le titre généré comprend dans la balise `h1` le titre de l'image et le nom de la galerie. Mettre à TRUE pour que le titre de l'image soit dans un `h1` et le nom de la galerie dans un `p`.
*/
$galerieSeparerTitreImageEtNomGalerie = FALSE; // TRUE|FALSE

// Si `$galerieGenererTitrePages` vaut TRUE, nom de la galerie précédé du mot «Galerie» traduit dans la langue de la page.
/*
- Par exemple, le choix est d'afficher «Chiens» ou «Galerie Chiens».
- `accueil` correspond à l'accueil d'une galerie, alors que `page-image` correspond à la page individuelle d'une image.
- Chaque élément peut valoir TRUE ou FALSE.
*/
$galerieTitreAvecMotGalerie['accueil']    = TRUE;
$galerieTitreAvecMotGalerie['page-image'] = TRUE;

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

// Couleur allouée pour les images JPG et GIF générées par le script.
/*
- Cette couleur est visible lorsque des bordures sont ajoutées aux vignettes générées automatiquement (`$galerieForcerDimensionsVignette` doit valoir TRUE). Par défaut, c'est du blanc.
- Les images PNG ont des bordures transparentes.
*/
$galerieCouleurAlloueeImage = array (
    'rouge' => '255',
    'vert'  => '255',
    'bleu'  => '255',
);

// 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 de couleur `$galerieCouleurAlloueeImage` (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;

// S'il y a pagination, type de liens.
$galerieTypePagination = 'texte'; // image|texte

// S'il y a pagination, insertion dans une boîte arrondie.
$galeriePaginationDansBoiteArrondie = TRUE; // TRUE|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

// Si `$galerieAccueilJavascript` vaut TRUE, couleur d'arrière-plan des flèches de navigation.
$galerieAccueilJavascriptCouleurNavigation = 'gris'; // blanc|gris

// Si `$galerieAccueilJavascript` vaut TRUE, ajout d'un lien de navigation sans Javascript.
$galerieAccueilLienSansJavascript = TRUE; // TRUE|FALSE

// Si `$galerieAccueilLienSansJavascript` vaut TRUE, choix de l'emplacement du lien.
/*
- Les choix possibles sont: haut, bas, info.
- Les emplacements `haut` et `bas` font référence au bloc de vignettes, alors que `info` fait référence aux informations au sujet de la galerie affichées lorsque `$galerieInfoAjout` vaut TRUE.
*/
$galerieAccueilLienSansJavascriptEmplacement = 'info';

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

// Choix de la navigation entre les images.
$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 image.
/*
- Il s'agit d'un résumé visuel de la galerie. Chaque image 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 d'une ancre de navigation.
/*
- L'ancre est ajoutée dans le lien d'une vignette ou d'une flèche de navigation, et permet de positionner la page à un endroit précis lors de la navigation entre les images d'une galerie.
- Les choix possibles sont:
  - `galerie`: `div` générale de la galerie;
  - `titre`: titre de premier niveau de la page, si ce dernier est généré automatiquement (voir la variable `$galerieGenererTitrePages` dans ce présent fichier de configuration);
  - `sousTitre`: titre de deuxième niveau de la page, si ce dernier est généré automatiquement (voir les variables `$galerieGenererTitrePages` et `$galerieSeparerTitreImageEtNomGalerie` dans ce présent fichier de configuration);
  - `info`: le paragraphe d'information au sujet de la galerie;
  - `minivignettes`;
  - `divImage`: la `div` comprenant l'image en version intermédiaire;
  - `image`: l'image en version intermédiaire.
- Laisser vide pour ne pas ajouter d'ancre.
*/
$galerieAncreDeNavigation = '';

// Ajout automatique d'une légende dans le cas où aucune légende n'a été précisée.
$galerieLegendeAutomatique = TRUE; // 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 de données 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 données Exif ne seront tout simplement pas affichées.
*/
$galerieExifAjout = TRUE; // TRUE|FALSE

// S'il y a lieu, choix des données Exif à afficher.
/*
- Chaque élément prend comme valeur TRUE ou FALSE.
*/
$galerieExifDonnees['DateTime']        = TRUE;
$galerieExifDonnees['ExposureTime']    = TRUE;
$galerieExifDonnees['FNumber']         = TRUE;
$galerieExifDonnees['FocalLength']     = TRUE;
$galerieExifDonnees['ISOSpeedRatings'] = TRUE;
$galerieExifDonnees['Make']            = TRUE;
$galerieExifDonnees['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 données 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 image 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'image 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']   = FALSE; // TRUE|FALSE
$adminActiverInfobulle['listeDesDossiers'] = FALSE; // 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 `$doctype` dans le fichier de configuration du site.
*/
$adminDoctype = 'XHTML 1.0 Strict';

// 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[0] = "$urlRacineAdmin/*#css#$urlRacineAdmin/css/admin.css";
$adminBalisesLinkScript[1] = "$urlRacineAdmin/*#css#$urlRacineAdmin/css/extensions-proprietaires.css";
$adminBalisesLinkScript[2] = "$urlRacineAdmin/*#csslteIE7#$urlRacineAdmin/css/ie6-7.css";
$adminBalisesLinkScript[3] = "$urlRacineAdmin/*#cssltIE7#$urlRacineAdmin/css/ie6.css";
$adminBalisesLinkScript[4] = "$urlRacineAdmin/*#css#$urlRacine/css/extensions-proprietaires.css";
$adminBalisesLinkScript[5] = "$urlRacineAdmin/*#js#$urlRacine/js/phpjs/php.min.js";
$adminBalisesLinkScript[6] = "$urlRacineAdmin/*#js#$urlRacine/js/squeletml.js";
$adminBalisesLinkScript[7] = "$urlRacineAdmin/*#js#$urlRacineAdmin/js/squeletml.js";
$adminBalisesLinkScript[8] = "$urlRacineAdmin/*#favicon#$urlRacine/fichiers/favicon.png";

$jsDirect = <<<JS
    $(function()
    {
        $('ul.triable').sortable();
    });
JS;

$adminBalisesLinkScript[9] = "$urlRacineAdmin/categories.admin.php*#js#$urlRacine/js/jquery/jquery.min.js";
$adminBalisesLinkScript[10] = "$urlRacineAdmin/categories.admin.php*#js#$urlRacineAdmin/js/jquery-ui/ui.core.js";
$adminBalisesLinkScript[11] = "$urlRacineAdmin/categories.admin.php*#js#$urlRacineAdmin/js/jquery-ui/ui.sortable.js";
$adminBalisesLinkScript[12] = "$urlRacineAdmin/categories.admin.php*#jsDirect#$jsDirect";
$adminBalisesLinkScript[13] = "$urlRacineAdmin/galeries.admin.php*#js#$urlRacine/js/jquery/jquery.min.js";
$adminBalisesLinkScript[14] = "$urlRacineAdmin/galeries.admin.php*#js#$urlRacineAdmin/js/jquery-ui/ui.core.js";
$adminBalisesLinkScript[15] = "$urlRacineAdmin/galeries.admin.php*#js#$urlRacineAdmin/js/jquery-ui/ui.sortable.js";
$adminBalisesLinkScript[16] = "$urlRacineAdmin/galeries.admin.php*#jsDirect#$jsDirect";
$adminBalisesLinkScript[17] = "$urlRacineAdmin/rss.admin.php*#js#$urlRacine/js/jquery/jquery.min.js";
$adminBalisesLinkScript[18] = "$urlRacineAdmin/rss.admin.php*#js#$urlRacineAdmin/js/jquery-ui/ui.core.js";
$adminBalisesLinkScript[19] = "$urlRacineAdmin/rss.admin.php*#js#$urlRacineAdmin/js/jquery-ui/ui.sortable.js";
$adminBalisesLinkScript[20] = "$urlRacineAdmin/rss.admin.php*#jsDirect#$jsDirect";
$adminBalisesLinkScript[21] = "$urlRacineAdmin/sitemap.admin.php*#js#$urlRacine/js/jquery/jquery.min.js";
$adminBalisesLinkScript[22] = "$urlRacineAdmin/sitemap.admin.php*#js#$urlRacineAdmin/js/jquery-ui/ui.core.js";
$adminBalisesLinkScript[23] = "$urlRacineAdmin/sitemap.admin.php*#js#$urlRacineAdmin/js/jquery-ui/ui.sortable.js";
$adminBalisesLinkScript[24] = "$urlRacineAdmin/sitemap.admin.php*#jsDirect#$jsDirect";

########################################################################
##
## Galeries.
##
########################################################################

// Commandes pour la rotation automatique et sans perte de qualité des images JPG.
/*
- Pour utiliser `exiftran`, mettre son chemin d'accès sur la machine.
- Pour utiliser `jpegtran`, mettre son chemin d'accès sur la machine et s'assurer que la fonction PHP `exif_read_data()` est utilisable.
- Voir les commentaires de la fonction `adminRotationJpegSansPerte()` pour plus de détails.
*/
$adminCheminExiftran = '/usr/bin/exiftran';
$adminCheminJpegtran = '/usr/bin/jpegtran';

########################################################################
##
## 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 = '?';

// 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 = '..';

/* ____________________ Accès aux dossiers. ____________________ */

// Filtre d'accès aux dossiers.
/*
- Il est possible d'appliquer un filtre d'accès aux dossiers du site. Un dossier inaccessible n'apparaît pas dans la liste des dossiers ni dans le contenu d'un dossier, et 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 aux dossiers.
/*
- 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 = '../.git';

/* ____________________ Liste des dossiers. ____________________ */

// Affichage des sous-dossiers dans la liste des dossiers.
$adminAfficherSousDossiersDansListe = TRUE; // TRUE|FALSE

// Filtre d'affichage de la liste des dossiers.
/*
- Il est possible d'appliquer un filtre d'affichage de la liste des dossiers. Un dossier dont l'affichage est désactivé est quand même accessible par le porte-documents et téléchargeable; il n'est simplement pas listé par défaut dans la liste des dossiers, 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:
  $adminTypeFiltreAffichageDansListe = '';
*/
$adminTypeFiltreAffichageDansListe = 'dossiersNonAffiches';

// Dossiers à prendre en compte dans le filtre d'affichage de la liste des dossiers.
/*
- Si la variable `$adminTypeFiltreAffichageDansListe` 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.
*/
$adminFiltreAffichageDansListe = '../admin/inc/pclzip|../admin/inc/tar|../admin/inc/UnsharpMask|../admin/inc/untar|../admin/js/bueditor|../admin/js/CodeMirror|../admin/js/jquery-ui|../admin/js/wz_dragdrop|../fichiers/coins|../fichiers/galeries|../inc/filter_htmlcorrector|../inc/htmlpurifier|../inc/mimedetect|../inc/node_teaser|../inc/pathauto|../inc/php-gettext|../inc/php-markdown|../inc/rolling-curl|../inc/simplehtmldom|../js/Gettext|../js/jquery|../js/phpjs|../js/slimbox2|../locale/en_US|../locale/fr_CA|../modeles/site|../piwik|../scripts|../src';

/* ____________________ Sous-dossiers dans le contenu d'un dossier. ____________________ */

// Lors de l'affichage du contenu d'un dossier, affichage du contenu des sous-dossiers.
$adminAfficherSousDossiersDansContenu = TRUE; // TRUE|FALSE

// Si `$adminAfficherSousDossiersDansContenu` vaut TRUE, filtre d'affichage du contenu des dossiers.
/*
- Il est possible d'appliquer un filtre d'affichage du contenu des dossiers. Un dossier dont l'affichage de son contenu est désactivé est quand même accessible par le porte-documents et téléchargeable; son contenu n'est simplement pas listé par défaut dans le porte-documents.
- Voir les explication de la variable `$adminTypeFiltreAffichageDansListe` dans le présent fichier de configuration pour la syntaxe à utiliser.
*/
$adminTypeFiltreAffichageDansContenu = 'dossiersNonAffiches';

// Dossiers à prendre en compte dans le filtre d'affichage du contenu des dossiers.
/*
- Si la variable `$adminTypeFiltreAffichageDansContenu` 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.
*/
$adminFiltreAffichageDansContenu = '../admin|../css|../doc|../fichiers|../inc|../js|../locale|../modeles|../piwik|../scripts|../site/admin/cache|../site/cache|../site/fichiers/galeries|../src|../xhtml';

/* ____________________ Ajout de fichiers. ____________________ */

// 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
?>


Faire un lien vers cette page

Ajoutez le code ci-dessous sur votre site:

<a href="http://www.squeletml.net/documentation.php">Documentation de Squeletml | Squeletml</a>