<!-- <http://www.squeletml.net/documentation.php> -->

				<!-- ____________________ #contenu ____________________ -->
				<div id="contenu">
					<div id="interieurContenu">
												
						<div id="milieuInterieurContenu">
																													
							
<h2>Dépendances</h2>

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

<h3>Notes</h3>

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

<li><p>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 <code>php5-gd</code> est installé).</p></li>
<li><p>Pour afficher les données Exif dans les galeries, la fonction PHP <code>exif_read_data()</code> doit être disponible.</p></li>
<li><p>La détection du type MIME peut se faire par <code>Fileinfo</code> de PHP ou par la commande <code>file</code> sur le système.</p></li>

<li><p>La rotation automatique et sans perte de qualité des images JPG peut se faire avec la commande <code>exiftran</code> sur le système, ou bien avec la commande <code>jpegtran</code> sur le système et la fonction PHP <code>exif_read_data()</code>.</p></li>
<li><p>La suppression sans perte de qualité des données Exif des images JPG peut se faire avec la commande <code>jpegtran</code> sur le système.</p></li>
<li><p>La récupération de contenu externe se fait par <code>cURL</code> si disponible (par exemple, sous Ubuntu 10.10, vérifier que le paquet <code>php5-curl</code> est installé), sinon par <code>file_get_contents()</code>. À ce sujet, il semble que <strong>Free.fr</strong> 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, <code>file_get_contents('http://www.squeletml.net/');</code> retourne ceci:</p>

<pre><code>HTTP/1.0 403 Forbidden
</code></pre>

<p>Selon la <a href="http://les.pages.perso.chez.free.fr/index.php?post/2010/01/22/FAQ">FAQ du site «Les Pages Perso Chez Free»</a>, il faut demander sur le forum d'aide de Free.fr de mettre sur la liste blanche les URL que l'on souhaite atteindre.</p>

<p>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.</p></li>
</ul>

<h2>Installation</h2>

<p>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 <a href="http://www.squeletml.net/telechargement.php">page de téléchargement du logiciel</a>, extraire cette archive et placer les fichiers sur votre serveur, par exemple par ftp.</p>

<h3>Mise en situation</h3>

<p>On télécharge et extrait l'archive, ce qui crée le dossier <code>squeletml</code>.</p>

<ul>
<li><p>Pour avoir un site situé dans un répertoire, copier le dossier <code>squeletml</code> sur le serveur et le renommer comme désiré, ce qui nous donne l'adresse <code>http://www.nomDeDomaine.ext/monSiteSqueletml/</code>.</p></li>

<li><p>Pour avoir un site situé à la racine d'un nom de domaine, transférer sur le serveur le contenu du dossier <code>squeletml</code>, ce qui nous donne l'adresse <code>http://www.nomDeDomaine.ext/</code>.</p>

<p><strong>Important:</strong> à 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 <em>Affichage</em> et en cochant <em>Afficher les fichiers cachés</em>. En ligne de commande, <code>ls</code> accepte l'argument <code>-a</code>:</p>

<pre><code>ls -a
</code></pre></li>
</ul>

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

<h3>Installation automatisée</h3>

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

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

<h4>Mise en situation</h4>

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

<h3>Installation à la main</h3>

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

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

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

<h4>Le fichier <code>init.inc.php</code></h4>

<p>Avec la méthode de votre choix (par exemple en vous connectant par ftp au serveur hébergeant votre site), trouver le fichier <code>modeles/init.inc.php.modele</code>, le copier et le coller sous le nom <code>init.inc.php</code> (il faut donc enlever le <code>.modele</code> final du nom) à la racine du site.</p>

<p>Ce fichier contient deux variables obligatoires à renseigner:</p>

<ul>
<li><p><code>$urlRacine</code>: il s'agit de l'adresse URL vers votre site Squeletml. Par exemple, <code>http://www.nomDeDomaine.ext/monSiteSqueletml</code> ou <code>http://www.nomDeDomaine.ext</code>.</p></li>
<li><p><code>$accueil</code>: il s'agit d'un tableau contenant l'adresse url de l'accueil pour chaque langue de votre site.</p>

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

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

<p>Exemple d'un site n'utilisant que le français:</p>

<pre><code>$accueil['fr'] = $urlRacine;
#$accueil['en'] = $urlRacine . '/en';
</code></pre>

<p>Exemple d'un site utilisant le français et l'anglais:</p>

<pre><code>$accueil['fr'] = $urlRacine;
$accueil['en'] = $urlRacine . '/en';
</code></pre>

<p>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 <code>$urlRacine/en</code>, ou y mettre un fichier <code>.htaccess</code> (donc <code>$urlRacine/en/.htaccess</code>) contenant ceci:</p>

<pre><code>Deny from all
</code></pre>

<p>D'ailleurs, un tel fichier <code>.htaccess</code> est ajouté par l'installateur automatisé dans chaque dossier d'accueil d'une langue inactive.</p></li>
</ul>

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

<pre><code>http://www.nomDeDomaine.ext/admin/acces.admin.php

</code></pre>

<p>pour:</p>

<pre><code>http://www.nomDeDomaine.ext/$dossierAdmin/acces.admin.php
</code></pre>

<h5>Cas des serveurs de Free.fr</h5>

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

<ul>
<li>trouver la variable <code>$serveurFreeFr</code> et modifier sa valeur pour <code>TRUE</code>.</li>

</ul>

<h4>Protection de l'administration (fichiers <code>.htaccess</code> et <code>.acces</code>)</h4>

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

<pre><code>http://www.nomDeDomaine.ext/admin/acces.admin.php
</code></pre>

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

<h5>Cas des serveurs de Free.fr</h5>

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

<h5>Chemin des pages d'erreur</h5>

<p>Le fichier <code>.htaccess</code> 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 <code>.htaccess</code>, trouvez la ligne:</p>

<pre><code>ErrorDocument 404 /404.php
</code></pre>

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

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

<h4>Déclaration de l'installation terminée</h4>

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

<pre><code>site/inc/squeletml-est-installe.txt
</code></pre>

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

<h4>Le fichier <code>robots.txt</code></h4>

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

<p>Vous pouvez personnaliser ce fichier ou le laisser tel quel.</p>

<h2>Architecture de Squeletml</h2>

<h3>Dossiers</h3>

<p>L'arborescence de Squeletml est la suivante:</p>

<ul>
<li><code>admin</code> (le cas échéant, modifier le nom du dossier d'administration)</li>

<li><code>css</code></li>
<li><code>doc</code></li>
<li><code>en</code></li>
<li><code>fichiers</code></li>
<li><code>inc</code></li>
<li><code>js</code></li>
<li><code>locale</code></li>
<li><code>modeles</code></li>
<li><strong><code>site</code></strong></li>

<li><code>xhtml</code></li>
</ul>

<p>Tous les dossiers, à part <code>site</code>, 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.</p>

<p><strong>Toute modification apportée à la configuration par défaut doit donc être effectuée dans le dossier <code>site</code>.</strong></p>

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

<p>Pour ajouter des images, mettez vos fichiers dans <code>site/fichiers</code>. Pour ajouter des fichiers à inclure, créez des fichiers dans <code>site/inc</code>. Vous aurez compris, le dossier <code>site</code> 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.</p>

<h4>Le dossier <code>inc</code></h4>

<p>Le dossier <code>inc</code> 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.</p>

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

<ul>
<li><p><code>blocs.inc.php</code>: 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 <code>$blocs</code> est prête à être utilisée. Vous pouvez modifier cette variable en créant le fichier <code>site/inc/blocs.inc.php</code>, qui sera inséré à la fin de celui par défaut.</p></li>

<li><p><code>categorie.inc.php</code>: construit et analyse la liste des articles classés dans la catégorie demandée. Après son inclusion, la variable <code>$categorie</code> est prête à être utilisée. Vous pouvez modifier cette variable en créant le fichier <code>site/inc/categorie.inc.php</code>, qui sera inséré à la fin de celui par défaut.</p></li>
<li><p><code>config.inc.php</code>: 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 <code>site/inc/config.inc.php</code> 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.</p>

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

<ul>
<li><code>$urlFichiers</code></li>
<li><code>$urlRacineAdmin</code></li>
<li><code>$urlSite</code></li>
</ul>

<p>Voir la section «Variables et constantes utiles» pour une description de ces variables.</p></li>
<li><p><code>constantes.inc.php</code>: contient les constantes PHP utilisées dans Squeletml. Vous pouvez ajouter vos propres constantes en créant le fichier <code>site/inc/constantes.inc.php</code>. S'il existe, ce fichier sera inséré après celui par défaut.</p></li>

<li><p><code>contact.inc.php</code>: construit et analyse le formulaire de contact. Après son inclusion, la variable <code>$contact</code> 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 <code>site/inc/contact.inc.php</code>, qui sera inséré à différentes étapes du script:</p>

<ul>
<li><p>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 <code>$erreurFormulaire</code>, qui annule l'envoi du message si elle vaut <code>TRUE</code>, et <code>$messagesScript</code>, qui contient les explications affichées après le traitement du formulaire;</p></li>

<li><p>juste avant l'envoi du message, ce qui permet de modifier le corps du message, l'objet, etc.;</p></li>
<li><p>à la fin du fichier par défaut.</p></li>
</ul></li>
<li><p><code>dernier.inc.php</code>: 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:</p>

<ul>
<li>vous pouvez créer le fichier <code>site/inc/dernier-pre.inc.php</code>, qui sera inséré au début de <code>inc/dernier.inc.php</code>;</li>
<li>vous pouvez également créer le fichier <code>site/inc/dernier.inc.php</code>, qui sera inséré à la fin de celui par défaut.</li>

</ul></li>
<li><p><code>envoyer-amis.inc.php</code>: 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 <code>site/inc/envoyer-amis.inc.php</code>, qui sera inséré à la fin de celui par défaut.</p></li>
<li><p><code>fonctions.inc.php</code>: contient les fonctions utilisées dans Squeletml. Vous pouvez créer vos propres fonctions dans le fichier <code>site/inc/fonctions.inc.php</code>, qui sera inséré après celui par défaut.</p></li>
<li><p><code>galerie.inc.php</code>: 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 <code>site/inc/galerie.inc.php</code>, qui sera inséré à la fin de celui par défaut.</p></li>
<li><p><code>premier.inc.php</code>: 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:</p>

<ul>
<li>vous pouvez créer le fichier <code>site/inc/premier-pre.inc.php</code>, qui sera inséré dans <code>inc/premier.inc.php</code> après la deuxième série d'inclusions, donc juste avant les affectations en masse;</li>
<li>vous pouvez également créer le fichier <code>site/inc/premier.inc.php</code>, qui sera inséré à la fin de celui par défaut.</li>
</ul></li>
</ul>

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

<h4>Le dossier <code>modeles</code></h4>

<p>Le dossier <code>modeles</code> 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).</p>

<h4>Le dossier <code>xhtml</code></h4>

<p>Le dossier <code>xhtml</code> 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 <code>inc</code>, et elles seront utilisées dans les fichiers du dossier <code>xhtml</code>.</p>

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

<p>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 <code>site/xhtml/</code>. Par exemple, un menu commun à toutes les langues se trouvera dans <code>site/xhtml/menu.inc.php</code>.</p>

<h5>Liste des fichiers</h5>

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

<ul>
<li><p><code>form-contact.inc.php</code>: modèle du formulaire de contact. Vous pouvez utiliser votre propre modèle en créant le fichier <code>site/xhtml/(LANGUE/)form-contact.inc.php</code>, 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 <code>site/xhtml/(LANGUE/)form-contact.inc.php</code> n'existe pas, des champs supplémentaires sous le champ <code>nom</code> peuvent être inclus dans le modèle par défaut grâce au fichier <code>site/xhtml/(LANGUE/)form-contact-champs-apres-nom.inc.php</code>, et des champs supplémentaires sous le message peuvent être inclus grâce au fichier <code>site/xhtml/(LANGUE/)form-contact-champs-apres-message.inc.php</code>.</p>

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

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

<pre><code>&lt;p&gt;&lt;label for="inputCodePostal"&gt;Votre code postal:&lt;/label&gt;&lt;br /&gt;

&lt;input id="inputCodePostal" class="champInfo" type="text" name="codePostal" size="7" maxlength="7" value="&lt;?php echo $codePostal; ?&gt;" /&gt;&lt;/p&gt;
</code></pre>

<p>Ensuite, il faut ajouter le traitement de ce nouveau champ dans le fichier <code>site/inc/contact.inc.php</code>. 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:</p>

<pre><code>&lt;?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 .= "&lt;li class=\"erreur\"&gt;Vous n'avez pas inscrit de code postal.&lt;/li&gt;\n";
    }
    elseif (!preg_match('/([A-Z]\d){3}/', $codePostal))
    {
        $erreurFormulaire = TRUE;
        $messagesScript .= "&lt;li class=\"erreur\"&gt;Le code postal ne semble pas avoir une forme valide. Veuillez l'inscrire sous la forme &lt;em&gt;A1A1A1&lt;/em&gt;.&lt;/li&gt;\n";
    }

    // Envoi du message
    if ($formulaireValide)
    {
        if (!empty($infosCourriel['message']))
        {
            $infosCourriel['message'] = rtrim($infosCourriel['message']) . "\n\n=========================\n\n";
        }

        $infosCourriel['message'] .= "Code postal: $codePostal";
    }
}
?&gt;

</code></pre></li>
<li><p><code>page.dernier.inc.php</code>: modèle de page suivant le contenu ajouté directement par l'utilisateur. Vous pouvez utiliser votre propre modèle en créant le fichier <code>site/xhtml/(LANGUE/)page.dernier.inc.php</code>, qui sera utilisé à la place du modèle par défaut.</p></li>
<li><p><code>page.premier.inc.php</code>: 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 <code>site/xhtml/(LANGUE/)page.premier.inc.php</code>, qui sera utilisé à la place du modèle par défaut.</p></li>
</ul>

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

<ul>

<li><code>fr/ancres.inc.php</code></li>
<li><code>fr/bas-de-page.inc.php</code></li>
<li><code>fr/menu.inc.php</code></li>
<li><code>fr/menu-langues.inc.php</code></li>
<li><code>fr/sous-titre.inc.php</code></li>
<li><p><code>fr/sur-titre.inc.php</code></p>

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

</ul>

<p>Il y a enfin les fichiers des pages par défaut:</p>

<ul>
<li><code>fr/page.401.inc.php</code></li>
<li><code>fr/page.404.inc.php</code></li>
<li><code>fr/page.contact.inc.php</code></li>
<li><p><code>fr/page.index.inc.php</code></p>

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

<p><strong>Il s'agit des pages livrées par défaut avec Squeletml.</strong> 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. <strong>Toute autre page créée dans le site n'aura pas à utiliser ce système d'inclusion.</strong> Pour personnaliser une page livrée par défaut, par exemple la page d'accueil, créer le fichier <code>site/xhtml/fr/page.index.inc.php</code>, qui sera inclus à la place du fichier par défaut.</p>

<p>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 <code>$contactCourrielParDefaut</code> dans le fichier de configuration.</p></li>
</ul>

<h6>Fichier <code>piwik.inc.php</code></h6>

<p>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 <code>piwik.inc.php</code> existe dans le dossier <code>site/xhtml</code>, 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»).</p>

<h4>Dossiers inutiles pour une configuration donnée</h4>

<p>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 <code>en</code> peut être supprimé. C'est également le cas des pages <code>exemple.php</code> et <code>galerie-demo.php</code> à la racine du site si ces dernières ne sont pas utilisées.</p>

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

<h3>Structure XHTML par défaut</h3>

<p>Voici un modèle simplifié d'une page de Squeletml <strong>par défaut</strong>:</p>

<pre><code>Doctype XHTML 1.0 Strict..
&lt;html ...&gt;&lt;!-- Langue de la page en cours. --&gt;
    &lt;!-- ____________________ &lt;head&gt; ____________________ --&gt;

    &lt;head&gt;
        &lt;!-- Titre. --&gt;
        &lt;title&gt;...&lt;/title&gt;

        &lt;!-- Métabalises. --&gt;
        Encodage UTF-8.
        Description.
        Robots.

        &lt;!-- Balises `link` et `script`. --&gt;

        Feuilles de style et scripts Javascript.
    &lt;/head&gt;
    &lt;!-- ____________________ &lt;body&gt; ____________________ --&gt;
    &lt;body class="..."&gt;
        &lt;!-- ____________________ #ancres ____________________ --&gt;
        &lt;div id="ancres"&gt;

            ...
        &lt;/div&gt;&lt;!-- /#ancres --&gt;

        &lt;!-- ____________________ Message pour IE6. ____________________ --&gt;
        &lt;!--[if lt IE 7]&gt;
            &lt;div id="messageIe6"&gt;
                ...
            &lt;/div&gt;&lt;!-- /#messageIe6 --&gt;

        &lt;![endif]--&gt;

        &lt;!-- ____________________ #page ____________________ --&gt;
        &lt;div id="page"&gt;
          &lt;div id="interieurPage"&gt;
            &lt;!-- ____________________ #enTete ____________________ --&gt;
                &lt;div id="enTete"&gt;

                    &lt;div id="titre"&gt;
                        Titre du site dans un `h1` s'il s'agit de la page d'accueil, sinon dans un `p`.
                    &lt;/div&gt;&lt;!-- /#titre --&gt;

                    &lt;div id="sousTitre"&gt;
                        ...
                    &lt;/div&gt;&lt;!-- /#sousTitre --&gt;

                &lt;/div&gt;&lt;!-- /#enTete --&gt;

                &lt;!-- ____________________ #surContenu ____________________ --&gt;
                &lt;div id="surContenu"&gt;
                    Vide par défaut, donc `div` pas incluse.
                &lt;/div&gt;&lt;!-- /#surContenu --&gt;

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

                        &lt;div id="milieuInterieurContenu"&gt;
                            Contenu entré directement par l'utilisateur.
                        &lt;/div&gt;&lt;!-- /#milieuInterieurContenu --&gt;

                        &lt;div id="finInterieurContenu"&gt;
                            Vide par défaut, donc `div` pas incluse.
                        &lt;/div&gt;&lt;!-- /#finInterieurContenu --&gt;

                    &lt;/div&gt;&lt;!-- /#interieurContenu --&gt;
                &lt;/div&gt;&lt;!-- /#contenu --&gt;

                &lt;!-- ____________________ #sousContenu ____________________ --&gt;
                &lt;div id="sousContenu"&gt;
                    &lt;div id="menuLangues" class="bloc"&gt;

                        ...
                    &lt;/div&gt;&lt;!-- /#menuLangues --&gt;

                    &lt;div id="menu" class="bloc"&gt;
                        ...
                    &lt;/div&gt;&lt;!-- /#menu --&gt;

                    &lt;div id="envoyerAmis" class="bloc"&gt;

                        ...
                    &lt;/div&gt;&lt;!-- /#envoyerAmis --&gt;

                    &lt;div id="fluxRss" class="bloc"&gt;
                        ...
                    &lt;/div&gt;&lt;!-- /#fluxRss --&gt;
                &lt;/div&gt;&lt;!-- /#sousContenu --&gt;

                &lt;!-- ____________________ #basDePage ____________________ --&gt;
                &lt;div id="basDePage"&gt;
                    ...
                &lt;/div&gt;&lt;!-- /#basDePage --&gt;
            &lt;/div&gt;&lt;!-- /#interieurPage --&gt;
        &lt;/div&gt;&lt;!-- /#page --&gt;

        Balises `script` finales.
    &lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>D'autres <code>div</code> peuvent apparaître à la suite de <code>&lt;div id="interieurContenu"&gt;</code> selon le module en cours d'utilisation, par exemple <code>&lt;div id="galerie"&gt;</code> lorsque nous visitons la page d'une galerie. Aussi, certaines <code>div</code> 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 <code>xhtml</code>».</p>

<h4>Nombre de colonnes et blocs de contenu</h4>

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

<p>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): <code>enTete</code>, <code>surContenu</code>, <code>debutInterieurContenu</code>, <code>finInterieurContenu</code>, <code>sousContenu</code> ou <code>basDePage</code>. Chaque nom de région correspond à une <code>div</code> du modèle de page.</p>

<p>Selon le style affecté (voir la section «Style CSS» du fichier de configuration), les <code>div</code> <code>surContenu</code> et <code>sousContenu</code> 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:</p>

<ul>
<li>aucune colonne, les blocs étant positionnés au-dessus ou au-dessous du contenu selon leur configuration;</li>
<li>une seule colonne à gauche;</li>

<li>une seule colonne à droite;</li>
<li>deux colonnes dont celle de gauche est remplie par les blocs de <code>surContenu</code> et celle de droite par les blocs de <code>sousContenu</code>;</li>
<li>deux colonnes dont celle de gauche est remplie par les blocs de <code>sousContenu</code> et celle de droite par les blocs de <code>surContenu</code>.</li>
</ul>

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

<h3>Schéma des inclusions lors de la construction d'une page</h3>

<p><em>Note: le schéma doit se lire ainsi:</em></p>

<ul>
<li><code>fichier</code>: le fichier existe et il sera inséré;</li>
<li><em><code>fichier</code></em>: le fichier sera inséré seulement s'il existe;</li>

<li><em><code>fichier1</code></em> <strong>||</strong> <em><code>fichier2</code></em>: une seule insertion au maximum aura lieu, le premier fichier existant, vérifié de gauche à droite, sera inséré.</li>
</ul>

<hr />

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

<ul>
<li><code>inc/premier.inc.php</code>

<ul>
<li><code>init.inc.php</code></li>
<li><em><code>inc/devel.inc.php</code></em></li>
<li><em><code>site/inc/devel.inc.php</code></em></li>
<li><code>inc/fonctions.inc.php</code></li>
<li><em><code>site/inc/fonctions.inc.php</code></em></li>
<li><code>inc/config.inc.php</code></li>
<li><em><code>site/inc/config.inc.php</code></em></li>
<li><code>inc/constantes.inc.php</code></li>

<li><em><code>site/inc/constantes.inc.php</code></em></li>
<li><em><code>site/inc/premier-pre.inc.php</code></em></li>
<li>Si <code>$idCategorie</code> n'est pas vide: <code>inc/categorie.inc.php</code>

<ul>
<li><em><code>site/inc/categorie.inc.php</code></em></li>
</ul></li>
<li>Si <code>$idGalerie</code> n'est pas vide: <code>inc/galerie.inc.php</code>

<ul>
<li><em><code>site/inc/galerie.inc.php</code></em></li>
</ul></li>
<li><code>inc/blocs.inc.php</code>

<ul>
<li><code>inc/envoyer-amis.inc.php</code>

<ul>
<li><em><code>site/inc/envoyer-amis.inc.php</code></em></li>
</ul></li>
<li>Inclusions selon les blocs configurés. Exemple pour le menu des langues:<br />

<em><code>site/xhtml/$langueDeLaPage/menu-langues.inc.php</code></em> <strong>||</strong> <em><code>xhtml/$langueDeLaPage/menu-langues.inc.php</code></em> <strong>||</strong> <em><code>site/xhtml/$langueParDefaut/menu-langues.inc.php</code></em> <strong>||</strong> <em><code>xhtml/$langueParDefaut/menu-langues.inc.php</code></em> <strong>||</strong> <em><code>site/xhtml/menu-langues.inc.php</code></em> <strong>||</strong> <em><code>xhtml/menu-langues.inc.php</code></em></li>

<li><em><code>site/inc/blocs.inc.php</code></em></li>
</ul></li>
<li><em><code>site/inc/premier.inc.php</code></em></li>
<li><em><code>site/xhtml/(LANGUE/)page.premier.inc.php</code></em> <strong>||</strong> <code>xhtml/(LANGUE/)page.premier.inc.php</code></li>
</ul></li>
<li>Contenu de la page</li>
<li><code>inc/dernier.inc.php</code>

<ul>
<li><em><code>site/inc/dernier-pre.inc.php</code></em></li>
<li><code>inc/blocs.inc.php</code> (voir les détails plus haut)</li>
<li><code>inc/contact.inc.php</code>

<ul>
<li><code>inc/envoyer-amis.inc.php</code> (voir les détails plus haut)</li>
<li><em><code>site/inc/contact.inc.php</code></em> après le traitement des champs par défaut</li>

<li><em><code>site/inc/contact.inc.php</code></em> avant l'envoi du message</li>
<li><code>inc/envoyer-amis.inc.php</code> (voir les détails plus haut)</li>
<li><em><code>site/inc/contact.inc.php</code></em> avant l'inclusion du code XHTML du formulaire</li>
<li><em><code>site/xhtml/(LANGUE/)form-contact.inc.php</code></em> <strong>||</strong> (<code>xhtml/(LANGUE/)form-contact.inc.php</code> &amp;&amp; <em><code>site/xhtml/(LANGUE/)form-contact-champs-apres-nom.inc.php</code></em> &amp;&amp; <em><code>site/xhtml/(LANGUE/)form-contact-champs-apres-message.inc.php</code></em>)</li>

<li><em><code>site/inc/contact.inc.php</code></em> à la fin du fichier</li>
</ul></li>
<li><em><code>site/inc/dernier.inc.php</code></em></li>
<li><em><code>site/xhtml/(LANGUE/)page.dernier.inc.php</code></em> <strong>||</strong> <code>xhtml/(LANGUE/)page.dernier.inc.php</code></li>
</ul></li>
</ul>

<h2>Style de Squeletml</h2>

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

<p>Voici quelques exemples:</p>

<ul>
<li>ajout de coins arrondis aux blocs de contenu;</li>
<li>nombre de colonnes;</li>
<li>emplacement d'une colonne unique;</li>
<li>arrière-plan d'une colonne;</li>
<li>contenu affichable ou masquable par un clic sur le titre;</li>

<li>ajout d'une classe <code>actif</code> aux liens pointant vers la page en cours dans les blocs de contenu;</li>
<li>limite de la profondeur d'une liste dans les blocs de contenu (classe <code>masquer</code> ajoutée aux sous-listes inactives);</li>
<li>etc.</li>
</ul>

<h2>Traduction de Squeletml</h2>

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

<ul>
<li><code>admin/versions-solo.admin.php</code> (le cas échéant, modifier le nom du dossier d'administration)</li>
<li><code>xhtml/fr/ancres.inc.php</code></li>
<li><code>xhtml/fr/bas-de-page.inc.php</code></li>
<li><code>xhtml/fr/menu.inc.php</code></li>
<li><code>xhtml/fr/menu-langues.inc.php</code></li>

<li><code>xhtml/fr/sous-titre.inc.php</code></li>
<li><code>xhtml/fr/sur-titre.inc.php</code></li>
<li><code>xhtml/fr/page.401.inc.php</code></li>
<li><code>xhtml/fr/page.404.inc.php</code></li>
<li><code>xhtml/fr/page.contact.inc.php</code></li>
<li><code>xhtml/fr/page.galerie.inc.php</code></li>
<li><code>xhtml/fr/page.index.inc.php</code></li>
<li><code>doc/documentation.mdtxt</code></li>
<li><code>doc/LISEZ-MOI.mdtxt</code></li>

<li><code>maintenance.php</code></li>
</ul>

<h2>Mise à jour de Squeletml</h2>

<p><strong>Note: lisez toute cette section avant d'effectuer une mise à jour.</strong></p>

<p>Pour mettre à jour Squeletml:</p>

<ul>
<li><p>Visitez la page <code>http://www.nomDeDomaine.ext/admin/acces.admin.php</code> 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.</p>

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

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

<p><strong>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.</strong></p></li>
<li><p>Téléchargez l'archive de la dernière version et extrayez son contenu. Vous allez obtenir un dossier dont le nom est <code>squeletml</code>.</p></li>
<li><p>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.</p>

<pre><code>**Important**: ne pas oublier d'afficher les fichiers cachés pour bien les sélectionner. Voir la section «Installation» pour plus de détails.
</code></pre></li>
</ul>

<p>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 à <strong>ne pas supprimer</strong> les quelques fichiers de configuration à la racine (<code>.acces</code>, <code>.htaccess</code>, <code>init.inc.php</code> et <code>robots.txt</code>), le dossier <code>site</code>, 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 <code>en</code>) ainsi que les pages que vous avez vous-même ajoutées.</p>

<p><strong>Notes:</strong></p>

<ul>
<li>si vous avez modifié le nom du dossier d'administration, ne pas oublier de supprimer l'ancien dossier et de renommer le nouveau;</li>
<li>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;</li>
<li>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.</li>
</ul>

<h2>Création de pages</h2>

<p>Il y a plusieurs manières de créer une page:</p>

<ol>
<li>Créer un fichier vide et reproduire la structure d'une page.</li>
<li>Copier le fichier <code>exemple.php</code> et le coller avec le nom désiré.</li>
<li>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».</li>
</ol>

<p>Voici l'anatomie d'une page:</p>

<ol>

<li>variables PHP</li>
<li>inclusion du premier fichier PHP</li>
<li>contenu de la page</li>
<li>inclusion du dernier fichier PHP</li>
</ol>

<h3>Variables PHP</h3>

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

<ul>

<li><p><code>$apercu</code>: aperçu de la page en cours, si la valeur est différente de <code>$apercuParDefaut</code> du fichier de configuration du site. Le contenu de <code>$apercu</code> est inséré en tant que commentaire HTML au début de la <code>div</code> <code>milieuInterieurContenu</code> s'il n'est pas vide et si <code>$inclureApercu</code> du fichier de configuration du site vaut TRUE.</p>

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

<pre><code>&lt;div id="milieuInterieurContenu"&gt;
    &lt;p&gt;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In sapien ante; dictum id, pharetra ut, malesuada&lt;!-- /aperçu --&gt; 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.&lt;/p&gt;
</code></pre>

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

<ul>
<li><code>&lt;!-- /aperçu --&gt;</code></li>
<li><code>&lt;!--/aperçu--&gt;</code></li>
<li><code>&lt;!-- /apercu --&gt;</code></li>
<li><code>&lt;!--/apercu--&gt;</code></li>
</ul>

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

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

<li><p><code>$auteur</code>: nom ou noms à inclure dans la métabalise <code>author</code>, si la valeur est différente de <code>$auteurParDefaut</code> 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.</p></li>
<li><p><code>$baliseH1</code>: contenu de la balise <code>h1</code>. Il s'agit donc du titre de premier niveau pour la page courante. Exemple:</p>

<pre><code>$baliseH1 = "Titre de premier niveau de la page courante";
</code></pre>

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

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

<li><p>de pouvoir manipuler le titre de premier niveau comme un bloc de contenu (<code>balise-h1</code>), 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 <code>finInterieurContenu</code>. En créant un bloc <code>balise-h1</code>, 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.</p></li>
</ul></li>
<li><p><code>$baliseTitle</code>: contenu de la balise <code>title</code>. Si cette variable est vide, elle se verra assigner la valeur de la variable <code>$baliseH1</code> si cette dernière n'est pas vide, sinon l'URL de la page en cours.</p></li>

<li><p><code>$boitesDeroulantes</code>: permet d'activer les boîte déroulantes pour du contenu présent dans la page en cours. Voir les commentaires de la variable <code>$boitesDeroulantesParDefaut</code> dans le fichier de configuration du site pour une description détaillée de la syntaxe à utiliser.</p></li>
<li><p><code>$boitesDeroulantesAlaMain</code>: prend la valeur <code>TRUE</code> ou <code>FALSE</code>, si la valeur est différente de <code>$boitesDeroulantesAlaMainParDefaut</code> du fichier de configuration du site. Si vaut <code>TRUE</code>, les fichiers nécessaires à la gestion d'une boîte déroulante (Javascript et CSS) seront inclus, mais l'appel à la fonction Javascript <code>boiteDeroulante()</code> 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.</p></li>

<li><p><code>$classesBody</code>: permet d'ajouter des classes à la balise <code>body</code>. Voici un exemple:</p>

<pre><code>$classesBody = 'maClasse1 maClasse2';
</code></pre>

<p>Prendre note que la balise <code>body</code> 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:</p>

<ul>
<li><code>accueil</code>: ajoutée aux pages d'accueil de chaque langue du site.</li>

<li><code>article</code>: ajoutée aux pages étant classées dans au moins une catégorie.</li>
<li><code>categorie</code>: ajoutée aux pages listant les articles appartenant à une catégorie.</li>
<li><code>galerie</code>: ajoutée aux pages d'une galerie, que ce soit la page d'accueil de la galerie ou une page individuelle d'une image.</li>
<li><code>galerieAccueil</code>: ajoutée aux pages d'accueil de chaque galerie.</li>
<li><code>galeriePageImage</code>: ajoutée à chaque page individuelle d'une image dans une galerie.</li>
<li><code>pageStandard</code>: ajoutée aux pages n'étant ni un formulaire de contact, ni une galerie, ni une page listant les articles appartenant à une catégorie.</li>

<li><code>pageStandardSansCategorie</code>: 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.</li>
</ul></li>
<li><p><code>$classesContenu</code>: permet d'ajouter des classes à la <code>div</code> <code>contenu</code>. Voir <code>$classesBody</code> pour un exemple d'utilisation.</p></li>
<li><p><code>$courrielContact</code>: 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 <code>$courrielContact</code>.</p>

<p>Note: dans le formulaire de contact livré par défaut avec Squeletml, cette variable vaut simplement <code>@</code>. 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 <code>$courrielContact</code> n'est pas une adresse réelle. Toutefois, si la variable <code>$contactCourrielParDefaut</code> est renseignée dans le fichier de configuration du site, toutes les variables <code>$courrielContact</code> valant exactement <code>@</code> prendront la valeur de <code>$contactCourrielParDefaut</code>, 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.</p></li>

<li><p><code>$dateCreation</code>: date de création de la page, sous la forme <em>AAAA-MM-JJ</em>, incluse dans la métabalise <code>date-creation-yyyymmdd</code>. 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.</p></li>
<li><p><code>$dateRevision</code>: date de dernière révision de la page, sous la forme <em>AAAA-MM-JJ</em>, incluse dans la métabalise <code>date-revision-yyyymmdd</code>. 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 <code>$dateCreation</code> n'existe pas, dans le classement des items des flux RSS.</p></li>

<li><p><code>$description</code>: contenu de la métabalise <code>description</code>. Si cette variable est vide, la métabalise <code>description</code> ne sera pas incluse dans l'en-tête de la page.</p></li>
<li><p><code>$envoyerAmis</code>: prend la valeur <code>TRUE</code> ou <code>FALSE</code>, selon qu'on veut activer ou non cette option pour la page courante, si la valeur est différente de <code>$activerEnvoyerAmisParDefaut</code> du fichier de configuration du site.</p></li>

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

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

<li><p><code>$infosPublication</code>: prend la valeur <code>TRUE</code> ou <code>FALSE</code>, 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 <code>$afficherInfosPublicationParDefaut</code> du fichier de configuration du site.</p></li>
<li><p><code>$langue</code>: langue de la page courante, si la valeur est différente de <code>$langueParDefaut</code> du fichier de configuration du site.</p></li>

<li><p><code>$licence</code>: licence de la page courante, si la valeur est différente de <code>$licenceParDefaut</code> 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:</p>

<pre><code>$licence = 'art-libre cc-by-sa';
</code></pre>

<p>Voir la fonction <code>licence()</code> pour connaître tous les choix possibles.</p></li>
<li><p><code>$lienPage</code>: prend la valeur <code>TRUE</code> ou <code>FALSE</code>, 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 <code>$afficherLienPageParDefaut</code> du fichier de configuration du site.</p></li>

<li><p><code>$motsCles</code>: contenu de la métabalise <code>keywords</code>. Si cette variable est vide ou inexistante, elle sera générée automatiquement à partir du contenu de la variable <code>$description</code>. Prenez note que si <code>$inclureMotsCles</code> vaut <code>FALSE</code> 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 <code>$motsCles</code> n'est pas vide.</p></li>
<li><p><code>$partage</code>: prend la valeur <code>TRUE</code> ou <code>FALSE</code>, selon qu'on veut activer ou non cette option pour la page courante, si la valeur est différente de <code>$activerPartageParDefaut</code> du fichier de configuration du site.</p></li>

<li><p><code>$robots</code>: contenu de la métabalise <code>robots</code>, si la valeur est différente de <code>$robotsParDefaut</code> du fichier de configuration du site.</p></li>
<li><p><code>$rssCategorie</code>: prend la valeur <code>TRUE</code> ou <code>FALSE</code>, 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 <code>$activerFluxRssCategorieParDefaut</code> du fichier de configuration du site.</p></li>

<li><p><code>$rssGalerie</code>: prend la valeur <code>TRUE</code> ou <code>FALSE</code>, selon qu'on veut activer ou non la syndication de contenu individuelle pour la galerie en question, si la valeur est différente de <code>$galerieActiverFluxRssParDefaut</code> du fichier de configuration du site.</p></li>
<li><p><code>$tableDesMatieres</code>: prend la valeur <code>TRUE</code> ou <code>FALSE</code>, 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 <code>$afficherTableDesMatieresParDefaut</code> du fichier de configuration du site. La table des matières est générée par Javascript.</p>

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

<p>Par défaut, tous les titres de niveaux 2 à 6 présents à l'intérieur de la <code>div</code> 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.</p></li>
</ul>

<h3>Inclusion du premier fichier PHP</h3>

<p>Il suffit d'inclure le fichier <code>inc/premier.inc.php</code>.</p>

<h4>Cas de l'installation par défaut de Squeletml</h4>

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

<pre><code>include 'inc/premier.inc.php';
</code></pre>

<p>Pour une page dans un dossier:</p>

<pre><code>include '../inc/premier.inc.php';
</code></pre>

<p>Pour une page dans un sous-dossier (dossier d'un dossier):</p>

<pre><code>include '../../inc/premier.inc.php';

</code></pre>

<p><strong>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é.</strong></p>

<h4>Cas avec insertion automatique du fichier <code>init.inc.php</code></h4>

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

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

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

<pre><code>&lt;FilesMatch "\.(php)$"&gt; 
    php_value auto_prepend_file "/var/www/serveur_local/squeletml/init.inc.php"
&lt;/FilesMatch&gt;
</code></pre>

<p>Ne pas oublier de modifier le chemin d'inclusion du fichier <code>init.inc.php</code>.</p>

<h3>Contenu</h3>

<p><a href="http://www.squeletml.net/documentation.php">Lire la suite de la documentation de Squeletml.</a></p>
													</div><!-- /#milieuInterieurContenu -->
						
													<div id="finInterieurContenu">
								<div id="lienPage" class="bloc">

	<div class="contenuBloc">
<h2>Faire un lien vers cette page</h2>

<p>Ajoutez le code ci-dessous sur votre site:</p>
<pre><code>&lt;a href=&quot;http://www.squeletml.net/documentation.php&quot;&gt;Documentation de Squeletml | Squeletml&lt;/a&gt;</code></pre>

	</div><!-- /.contenuBloc -->
</div><!-- /#lienPage -->
							</div><!-- /#finInterieurContenu -->
											</div><!-- /#interieurContenu -->
				</div><!-- /#contenu -->
