###################################################################### # # ManyPage : Moteur de Publication de site Web # ManyPage : Web site Management tools # # # Auteur/Author : Pierre Cordani # Collaborateur/Contributor : Pascal Vuylsteker, MediaPort team # # Documentation : http://www.vrarchitect.net/ManyPage # Question : manypage@vuylsteker.net # # Creation : 1/1/00 # Modification : 1/12/00 # Version : 0.9 # SoftVersion : Perl 5 ###################################################################### # # This file contain row documentation in french on how to use ManyPage # Please consult the manual at # http://www.vrarchitect.net/ManyPage/index.en.html # # Ce fichier est principalement un memo sur la manire d'utiliser ManyPage # Pour une aide plus dtaille, voir # http://www.vrarchitect.net/ManyPage/index.fr.html # ###################################################################### # # Copyright (C) 2000 Pierre Cordani - Pascal Vuylsteker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier conformment # aux dispositions de la Licence Publique Gnrale GNU, telle que publie par la Free Software # Foundation ; version 2 de la licence, ou encore ( votre choix) toute version ultrieure. # ################### Commentaires concernant le script d'habillage ManyPage * Utilisation Ce script permet d'habiller des fichiers HTML d'une facon modulaire, en utilisant un squelette, une arborescence virtuelle et ce que l'on va appeler des objets ManyPage, la mode SGML. Le squelette de l'habillage sera contenu dans le fichier .dress, ce sera le modele utilise pour la creation des clones. Ces clones etant le resultat de l'habillage. Une notion de programmation objet a ete introduite pour permettre un plus grand controle de l'habillage avec un minimum de code grace a la notion d'heritage. Cette programmation sera effectue grace a des objets ManyPage qui seront decrits dans le fichier .obj. L'arborescence virtuelle est utilisee pour proposer a l'utilisateur une navigation plus conventionnelle, tel un livre, et elle sera decrite dans le fichier .link. * Fonctionnement Le script d'habillage est entierement ecrit en Perl. Plusieurs informations sont necessaires a son bon fonctionnement. Pour commencer, il lui faut un fichier decrivant la structure du serveur: -Partie source (fichiers non habilles) -Partie destination (fichiers habilles) Le fichier comportant cette description est nomme "config", et il doit etre place dans le meme repertoire que les fichiers perls. En voici la syntaxe: /usr1/people/cordani/WWW_Test/Src /usr1/people/cordani/WWW_Test/Docs Pour continuer il lui faut un fichier source ecrit en HTML, tout autre fichier ne correspondant pas a la syntaxe HTML sera automatiquement ecarte du traitement. ex du format: La troisieme information capitale est l'existence d'un fichier dont le nom doit etre ".dress" qui est le modele qui permetra au script de creer les differentes pages habillees. Sans ce fichier, le resultat de l'habillage est une page vide (Une nouvelle fonctionalite serait de creer une copie conforme de la page HTML dans le cas ou le fichier .dress serait inexistant). Le fichier .dress devra etre ecrit en HTML avec la contrainte suivante: Deux objet particuliers seront utilises pour la creation des clones: : information concernant la partie HEAD du fichier HTML source : le corps du fichier HTML source Ces deux objets pourront bien evidement etre places n'importe ou dans le fichier .dress, laissant ainsi la possibilite d'habiller la page comme on le souhaite. ex classique d'un fichier .dress: L'objet peut etre utilise dans le tag BODY pour permettre l'utilisation des options du tag de la page source. ex: > D'autres objets predefinis existent egalement: : nom du fichier source sans suffixe : lien BACK (url) : lien UP (url) : lien NEXT (url) : Champ titre de la page BACK : Champ titre de la page UP : Champ titre de la page NEXT : langue du fichier html en train d'etre ecrit : date de modification du fichier --> : date d'habillage du fichier --> : date courante au format jour/mois/annee ex: 18/05/1998 --> : seul le titre du header Remarque: Tout objet commencant par PM, est un objet particulier au programme * Objets simples. Maintenant, on va s'interesser a la conception des objets SGML. Ces objets seront les ensembles plus ou moins elementaires qui nous permetteront de concevoir l'habillage des nos pages HTML. Tout objet doit avoir la syntaxe suivante : description de l'objet Et doit se trouver dans un fichier appele ".obj". Ce fichier contiendra la description de tous les objets utilises pour l'habillage. La description d'un objet simple contient du texte HTML, du Javascript, ... Disons qu'on veut creer un objet representant une boule de couleur rouge, dont le fichier au format gif se trouve a la racine (/rouge.gif), et qu'on appellera BOULE.ROUGE. Voici la syntaxe a utiliser: Ces objets peuvent etre utilises aussi bien dans le fichier .dress que dans le fichier HTML source. ex du fichier HTML source: exemple 1 a
b
Une fois le fichier habille, on obtiendra ceci: exemple 1 a
b
*Objets complexes Un objet complexe est definit par un ensemble des sous-objets (simples ou complexes). On essayera d'eviter d'incorporer du HTML dans un objet complexe, de facon a rendre cet objet aussi modulable que possible. Exemple de definition d'un objet complexe: Objets simples:
Objets complexes: *Notion d'heritage Bon, c'est la que la chose se complique un peu. Pour pouvoir garder une modularite importante, le script utilise des objets qui ont une notion d'heritage. Disons par exemple que nous avons cree un objet utilisant 10 sous-menus (, , ...), et que dans chaque sous menu, on utilise l'objet etant defini de la facon suivante: Donc, chaque instance de l'objet sera remplace par une boule rouge. Nous avons un fichier .dress:
Et nous avons 30 fichiers a habiller. Nous aurons comme resultat, 30 fichiers avec chacun un menu contenant des boules rouges. Disons que nous voulons maintenant differencier l'un de ces 30 fichiers en utilisant des boules bleues dans son menu. Comment faire? La procedure la plus simple est de ne pas utiliser l'objet dans le fichier .dress, mais dans chaque fichier source, de facon a creer un deuxieme menu dans le fichier .obj et l'utiliser dans le fichier source souhaite. Mais cela nous oblige a editer 30 fichiers a la main. Et en plus, on a du recreer un objet menu de toutes pieces pour simplement modifier la couleur des boules (Nous avons donc deux objets identiques a une couleur pres). On va donc reflechir autrement. On sait que la seule chose qui nous pose probleme est l'objet . Dans ce cas, nous n'avons rien d'autre a faire que proposer au script de changer sa valeur pour le fichier souhaite. Pour cela, on va creer un fichier objet dont le nom sera le meme que celui du fichier source a modifier (ex: index.html -> index.obj), et dans ce fichier on redefinira l'objet . ex pour index.obj: Nous avons donc, en trois lignes, cree un objet particulier au fichier source. L'objet va heriter l'objet du fichier index.obj, et de ce fait, va remplacer l'ancien lui etant associe. Il est possible de creer autant de fichiers particuliers que de fichiers sources. La meme chose peut etre effectue pour le fichier .dress, a la difference que celui-ci remplacera la totalite du .dress precedant. Passons maintenant au cas de l'habillage d'une arborescence. Nous pouvons utiliser un seul .dress et un seul .obj pour l'ensemble de l'arborescence. Bien evidement, tout les fichier auront le meme look. Par contre, si nous desirons donner un look different a chaque branche de l'arborescence, il ne nous reste plus qu'a creer un fichier .dress et un fichier .obj par branche, sachant que tout fichier .obj heritera des objets du niveau superieur. C'est la que rentre en jeu la notion d'objet simple ou complexe. Le but du jeu etant de creer des objets aussi elementaires que possible pour ne devoir modifier que le stricte necessaire. Prennons par exemple le cas d'un menu qui doit se retrouver sur toutes les pages du serveur, dont l'une des icones doit referencer une page differente selon le repertoire dans lequel on se trouve. On devrait pouvoir simplement modifier la reference vers cette page dans le .obj de chaque repertoire, sans devoir toucher au reste. Exemple (.obj principal): /equipe.+ /Icon/Menu/MP/contact.gif Dans le .obj suivant (sous-repertoire): /nom_rep/equipe.+ Remarque: Il est recommande de definir tout les objets en commun, en une seule fois, et dans le fichier .obj qui se trouve a la racine de l'arborescence a habiller. *Notion d'attribut Disons que maintenant, je voudrai creer l'objet qui prend en parametre un texte, et place une boule rouge au debut et une autre a la fin. Je parle donc d'un objet utilisant deux fois l'objet . Pour cela rien de plus simple. Dans le fichier .obj je definis l'objet de la facon suivante: Bien entendu, l'objet doit exister, sans quoi, l'objet serait vide. (L'utilisateur a la possibilite de definir l'objet n'importe ou dans le fichier .obj sans que cela pose un probleme a la traduction). Le probleme qui reste a resoudre est le suivant; comment utiliser cet objet pour afficher un texte qu'il ne connait pas encore entre les deux boules rouges? #Rien de plus simple#, il suffit d'utiliser la notion d'attribut. Dans le langage HTML classique, il existe des tags qui utilisent des attributs, comme par exemple le tag IMG, avec les attributs SRC, WIDTH, HEIGHT, ... Le jeu consiste donc, a pouvoir creer des objets avec un nombre voulu d'attributs qui lui seront associes. La syntaxe a employer est la suivante: Pour les attributs: PM.ATTRIBUT.nom_attribut1 PM.ATTRIBUT.nom_attribut2 ... Pour l'objet: PM.ATTRIBUT.TEXT Maintenant, si on veux le mot "salut" encadre de deux boules rouges, il suffira d'utiliser l'objet de la maniere suivante: ex du fichier HTML source: exemple 2 Une fois le fichier habille, on obtiendra ceci: exemple 2 salut On peut egalement definir une valeur par default pour un attribut donne. Supposons que nous avons l'objet definit de la maniere suivante:
Cet objet permet d'afficher une ligne de separation de taille fixe. Supposons maintenant, que nous voulons laisser le choix de la taille a l'utilisateur, pour cela, on va utiliser les attributs:
On peut maintenant donner la taille voulue a l'objet, en utilisant les attributs de la maniere suivante: Or, il y a un petit probleme. Quelle est la taille de l'objet si l'utilisateur n'utilise pas les attributs WIDTH et HEIGHT ? Pour les objets comme , l'utilisation de l'attribut n'est pas obligatoire, car a default d'une valeur pour l'attribut TEXT, l'objet sera traduit par deux boules de couleur rouge. Par contre, pour l'objet , la non initialisation des attributs WIDTH et HEIGHT, se traduira par un objet dont la syntaxe HTML sera incorrecte: ->
C'est la que rentre la notion de valeur par default pour les attributs de l'objet en question. Disons que nous voulons que la taille par default soit la suivante: WIDTH="500" et HEIGHT="3". Pour cela la syntaxe suivante doit etre employe:
->
*Test d'existance Il arrive parfois qu'un objet ne doit pas etre constamment affiche. Prenons par exemple le cas d'un menu qui se retrouve dans chaque page, dans lequel, des fleches sont utilisees pour permettre une navigation transversale entre les pages d'un mme niveau (NEXT et BACK). Or, il se peut que pour une page donnee, la page precedante, ou la page suivante soit inexistante. Il serait donc illogique de se retrouver avec une fleche dont la reference n'existe pas. L'habillage fournit un objet special pour ce type de situation, cet objet est: PM.IF Sa syntaxe est la suivante: --> existence de a --> non existence de a --> egalite de a et b --> non egalite de a et b --> a plus petit que b --> a plus grand que b --> a contient b --> a ne contient pas b L'attribut ELSE etant facultatif. Nous avons vu que pour connaitre le nom du fichier suivant, il existait le mot cle . Il ne reste plus qu'a tester si ce fichier existe pour savoir si notre fleche doit etre affichee ou pas. Ex: (On suppose l'existence de l'objet ) ` THEN=``> Un autre exemple peut etre le fait de vouloir afficher le titre de la page suivante dans le cas ou celleci existe. Pour ce faire, on va utiliser le mot cle . Si le titre existe on affichera la phrase: Next : titre_page_suivante Si le titre n'existe pas, on affichera: page Suivante Ex: ` THEN=`Next : ` ELSE=`Page Suivante`> -Notion de la langue Le script d'habillage peut gerer une bdd multilangue, mais pour cela, il faudra lui specifier quelles sont les langues utilisees dans le fichier .obj L'objet permettant de definir la bdd langue dans le fichier .obj est : Sa syntaxe est la suivante : nom de la langue Ex d'utilisation: Français English De cette facon, nous avons defini une bdd bilingue francaise-anglaise. La consequence directe de cette definition, est que tout les objet dont le nom se termine par un suffixe appartenant a la bdd des langues, ne sera utilise que dans la page de la meme langue. Ex: ne sera utilise que dans une page .fr.html ne sera utilise que dans une page .en.html *Habillages paralleles Il arrive parfois que le pages soient trop charges en graphisme, et que malheureusement, toutes les version des navigateurs ne suivent pas, ou simplement que les gens trouvent ca beau, mais lourd pour pouvoir acceder au contenu. Dans ce cas, on peut prevoir, pour un meme fichier source, plusieurs habillages differents. Pour ce faire, il suffira de definir un habillage parallele avec des nouveaux objets. La syntaxe des fichiers d'habillage sera la suivante: .obj_nom_d_un_autre_habillage .dress_nom_d_un_autre_habillage nom_d_un_autre_habillage prendra la valeur de votre choix Ex: .obj_leger .dress_leger le .link reste le meme Il faudra apres specifier quelle est la partie concernee par cet nouvel habillage. (Il se peut que simplement une sous-partie du site ait besoin d'un double habillage) il faudra pour ce faire, editer le fichier dont le nom est : autre_habillage Et utiliser la syntaxe suivante : nom_d_un_autre_habillage partie_concernee partie_concernee2 partie_non_concernee partie_non_concernee2 Et ceci pour chaque habillage suplementaire. Ex pour un seul habillage parallele pour la partie /NEWS: leger /NEWS Ex pour un seul habillage parallele pour la partie /NEWS, sauf la partie /NEWS/Spring: leger /NEWS /NEWS/Spring si le fichier source est nomme index.fr.html, le fichier destination prendra comme nom index.leger.fr.html, et toutes les references a l'interieur du fichier seront modifies por rester dans l'habillage parallele. La seule facon de proteger une reference du changement est de l'encadrer entre les commentaires suivants: Autrement, tout les liens a l'exterieur de la partie concernee , ou dans la partie protegee, ne seront pas modifies. Il faut lancer le script d'habillage avec l'option "p" pour que le double habillage soit prit en compte. *Creation de la navigation interne Si on desire creer une navigation interne, connaitre ainsi les pages precedente, suivante et pere, il faut s'y prendre en deux etapes. D'abord l'utilisation des objets , et pour connaitre le nom de ces pages. ex: creation d'un objet pour le lien vers la page suivante: Ensuite la creation du fichier .link contenant l'arborescence virtuelle des pages. Ce fichier .link est propre au repertoire dans lequel il se trouve. Sa syntaxe est la suivante (les espaces sont des tabulations): fichier1.html ../pere.html fichier2.html :fichier2_1.html :fichier2_2.html : :fichier2_2_1.html :fichier2_3.html fichier3.html resultat: pere.html / | \ _________/ | \________ / | \ fichier1.html fichier2.html fichier3.html / | \ __________/ | \__________ / | \ fichier2_1.html fichier2_2.html fichier2_3.html | | fichier2_2_1.html On peut egalement creer des clones pour certains fichiers. Disons par exemple que nous avons un fichier nomme welcome.fr.html et qu'on veux aussi avoir un fichier nomme index.fr.html avec le meme contenu (idem pour la version anglaise). Dans ce cas, plutot que copier dans la partie source le contenu de welcome dans index, on definit dans le fichier .link que le fichier welcome va etre duplique. Ex de fichier .link: welcome.+ index.+ le .+ implique que le fichier welcome.fr.html sera copie en index.fr.html et que le fichier welcome.en.html sera copie en index.en.html. (le .+ est un joker pour toutes les langues de la bdd langues decrite dans le fichier .obj) Execution du Programme Pour lancer un habillage simple sur des pages html, il suffira d'utiliser le script "main.pl". Autrement, si un habillage parallele veut etre effectue, utiliser le script "habille.pl" qui va prendre en compte la description du fichier "autre_habillage". Le lancement du programme sans aucune option donne la liste complete des options disponibles