La description de la structure du site

Page en construction!

Présentation de la structure

Structure du site = la hiérarchie des pages du site. Le site est supposé composé d'une ou plusieurs arborescences de pages. Cette arborescence est typiquement reproduite dans le menu affiché sur les pages.

Exemple de mini-site avec une seule arborescence:

Accueil
 |-> Mon jardin
 |    |-> Photos
 |-> Me contacter

Exemple avec deux arborescences:

Français
 |-> Mon jardin
 |    |-> Photos
 |-> Me contacter
English
 |-> Maï gardène
 |    |-> Pikturze
 |-> Plize raite tou mi

On a ici deux nœuds racine, «Français» et «English».

Noter que dans la hiérarchie, chaque nœud joue un double rôle: celui de page et celui de «dossier» pour les sous-nœuds éventuels.

Les pages affichées dans le menu

Par défaut, le menu affiché sur une page donnée ne contient pas toutes les pages du site. Plus précisément, seuls sont visibles les nœuds ancêtres de la page courante en partant de la racine jusqu'à la page courante incluse, les nœuds frères de ces pages, et les nœuds fils immédiats de la page courante. Dans l'exemple de la structure avec deux arborescences décrite ci-dessus, si la page courante est «Me contacter», les parties non visibles sont indiquées ci-dessous en grisé:

Français
 |-> Mon jardin
 |    
 |-> Me contacter
English
 

En passant la flèche de la souris sur les différentes parties, vous devriez voir les raisons pour lesquelles elles sont affichées. Si la page courante «Me contacter» avait des pages filles, elles aussi seraient affichées.

Il est néanmoins possible de spécifier qu'une partie de l'arborescence ne sera jamais affichée. À l'inverse, on peut spécifier qu'un nœud soit toujours «déployé» dans le menu, c'est-à-dire que si ce nœud apparaît, ses fils apparaissent toujours.

Les codes des pages

Les libellés comme «Français», «Mon jardin», etc. servent à désigner les pages dans le menu; ils ne sont pas adaptés à la formation de l'adresse Web (URL) de la page, laquelle ne peut contenir de lettres accentuées, d'espaces, etc. À chaque nœud on associera donc un identifiant, dit code de la page, et qui servira à former son URL.

Exemple de choix de codes, désignés ici entre crochets [..]:

Français [fr]
 |-> Mon jardin [jardin]
 |    |-> Photos [photos]
 |-> Me contacter [contact]
English [en]
 |-> Maï gardène [garden]
 |    |-> Pikturze [pikturze]
 |-> Plize raite tou mi [contact]

Je n'ai pas vérifié la liste des caractères utilisables pour les codes; en tout cas, ça marchera si on s'en tient aux lettres majuscules et minuscules sans accents, aux chiffres et aux deux caractères '-' et '_' (tiret et souligné).

La seule contrainte d'unicité est que deux pages filles d'une même page ne peuvent avoir le même code. Dans l'exemple ci-dessus, le code contact est utilisé deux fois, sans violer cette contrainte.

L'URL d'une page est formée par la suite des codes de ses nœuds ancêtre, en cmmençant par la racine, séparés par des caractère «slash» ('/'), en terminant par le code de la page affichée et le suffixe .html. Par exemple, l'URL de la page «Pikturze» pourra être:

http://www.monsite.org/en/garden/pikturze.html

L'URL de la page «Maï gardène» sera alors:

http://www.monsite.org/en/garden.html

Noter que du point de vue du visiteur du site, le même code «garden» apparaît dans le premier cas comme le nom d'un dossier, et dans le second comme le nom de la page (avec suffixe .html). Cela est conforme à ce qui a été dit plus haut à propos du double rôle de chaque nœud.

Noter également que si «pikturze.html», «garden.html», etc. apparaissent à l'utilisateur comme des noms de fichiers statiques HTML, il ne s'agit pas de noms de fichiers réels; mais seulement d'URLs générés par le système Krk. Le contenu réel de chaque page se trouve bien dans un fichier, mais dont le nom et l'emplacement peuvent être choisis indépendamment des codes de page. Bien sûr, il peut être utile d'organiser ces fichiers en une hiérarchie correspondant plus ou moins à la hiérarchie du site, mais cela n'est pas nécessaire, et des adaptations peuvent être commodes. Il est aussi recommandé de nommer les fichiers de contenu avec un suffixe .inc.

Le breadcrumb

Le breadcrumb est l'indication, généralement placée en haut de la page, des pages ancêtres de la page courante. Chacune de ces pages ancêtre est pourvue d'un lien. Le visiteur peut ainsi rapidement remonter dans la hiérarchie.

À chaque page correspond un libellé de breadcrumb, texte généralement plus court que le libellé utilisé dans le menu. On peut aussi préferer ne pas le commencer par une majuscule.

Le fichier XML de description

La description de la structure du site se fait par un fichier XML nommé structure.xml (dossier common). L'élément fondamental de cette description est l'élément Page, correspondant à une page (nœud) du site.

Un nœud est caractérisé principalement par les informations suivantes:

Ces informations, sauf celles concernant le menu et les nœuds fils, sont fournies par des attributs de l'élément Page. Le libellé de menu est facultatif - s'il est omis, la page et ses sous-pages sont omises du menu - et peut être lui-même qualifié par plusieurs autres informations; il est donc indiqué par un sous-élément de l'élément Page.

Pour reprendre l'exemple ci-dessus, la page «Me contacter» peut être décrite par l'élément Page suivant:

<Page code="contact" breadcrumb="me contacter" file="dossier_fran/contacter.inc">
  <Menu label="Me contacter"/>
</Page>

L'arborescence «Français» tout entière peut ainsi être décrite par le texte XML suivant:

  <Page code="fr"
    breadcrumb="Accueil"
    file="dossier_fran/index.inc"
  >
    <Menu label="Français"/>

    <Page code="jardin"
      breadcrumb="mon jardin"
      file="dossier_fran/jardin.inc"
    >
      <Menu label="Mon jardin"/>

      <Page code="photos"
        breadcrumb="photos"
        file="dossier_fran/photos.inc"
      >
        <Menu label="Photos"/>
      </Page>

    </Page> <!-- Fermeture de la page jardin -->

    <Page code="contact"
      breadcrumb="me contacter"
      file="dossier_fran/contacter.inc"
    >
      <Menu label="Me contacter"/>
    </Page>

  </Page> <!-- Fermeture de la page fr -->

Noter que l'élément Menu, s'il est présent, doit être le premier élément du contenu de l'élément Page.

On aura une description analogue pour l'arborescence «English». La description complète du site sera formée de ces deux descriptions, encapsulées dans un élément Krk:

<Krk varName="rootPage_s">

  <!--========= Directives: =========-->

  <BeforeText>
    ...
  </BeforeText>

  <AfterText>
    ...
  </AfterText>

  <!--========= La section fr: =========-->

  <Page code="fr"
    breadcrumb="Accueil"
    file="dossier_fran/index.inc"
  >
    <Menu label="Français"/>

    ...

  </Page> <!-- Fermeture de la page fr -->

  <!--========= La section en: =========-->

  <Page code="en"
    breadcrumb="Home"
    file="dossier_angl/index.inc"
  >
    <Menu label="English"/>

    ...

  </Page> <!-- Fermeture de la page en -->

</Krk>

On verra plus loin le rôle de l'attribut varName et des directives BeforeText et AfterText.

L'élément Menu, on l'a dit, peut être omis. Dans ce cas, ni la page en question, ni aucune de ses sous-pages, n'apparaîtra dans le menu. (Il est inutile alors de spécifier des éléments Menu à ces sous-pages.) Les pages rendues ainsi inaccessibles par le menu restent accessibles en lien direct, avec l'URL formé à la manière habituelle à partir de leurs codes.

L'élément Menu, outre son attribut obligatoire label, peut recevoir les attributs facultatifs suivants:

La conversion de la description en PHP

Les scripts PHP chargés d'afficher les pages du site ne lisent pas directement le fichier common/structure.xml; cela parce que je ne sais pas interpréter (et valider) le XML en PHP, et aussi parce qu'une telle interprétation prendrait peut-être trop de temps à l'exécution (elle se referait lors de chaque accès au serveur).

Au lieu de cela, ces scripts PHP lisent un fichier common/structure.inc contentant une traduction sous forme PHP de la structure décrite dans le fichier XML common/structure.xml. Ce fichier common/structure.inc doit être généré à partir de common/structure.xml grâce à un petit programme utilitaire écrit en Java, appelé krkConverter. Il faudra lancer krkConverter en local (c'est-à-dire typiquement sur votre ordinateur personnel, pas sur le serveur) chaque fois que vous aurez modifié le fichier common/structure.xml, pour créer la version à jour de common/structure.inc.