.obj : Définition des objets utilisables dans les modèles ou dans les fichiers sources

Deux exemples : un fichier .obj principal, et celui d'un sous repertoire.

Les objets ManyPage sont utilisés dans les fichiers .dress pour être finalement remplacés par du code HTML. Il s'agit d'objets dans le sens de la Programmation Orientée Objet : un objet peut être défini en utilisant un ou plusieurs autres objets, et la valeur d'un objet peut être modifiée dans certains sous répertoires et même pour certains fichiers.

Un objet peut être utilisé (c'est à dire qu'il serra remplacé par sa valeur), dans un fichier .dress, dans la définition d'un autre objet dans un fichier .obj, ou même dans un fichier HTML source. Cette dernière possibilité permet au webmaster de proposer à l'équipe éditoriale une galerie d'objets pour agrémenter le design d'un site au sein même de ses pages (par exemple des barres de séparation graphiques, ou des icônes pour illustrer les numéros de téléphone). Ceci peut par exemple être fait par l'intermédiaire d'une palette Dreamweaver dédiée.

Un objet est un tag à la mode XML dont le nom commence par MP ou PM suivant sa catégorie

Objets définis dans les fichier .obj : <MP.YYY>

Le webmaster peut définir autant d'objets qu'il le désire dans les fichiers .obj en plaçant du code HTML entre un tag ouvrant et un tag fermant.

Syntaxe :

<MP.nom.objet>
   Valeur de l'objet
</MP.nom.objet>

Exemple :

<MP.RED.POINT>
   <IMG SRC="/icon/red.gif">
</MP.RED.POINT>

Il est souvent intéressant de séparer une partie qui pourrait être utilisée dans différents objets et/ou qui pourrait être modifiée dans certains sous répertoires. Vous pouvez en fait diviser la définition de votre objet en utilisant un ou plusieurs objets à l'intérieur de la définition d'un autre pour composer ainsi un objet complexe.

Exemple la définition du premier objet :

<MP.ICON.PATH>
   /icon/
</MP.ICON.PATH>
... permet ensuite de définir :

<MP.RED.POINT>
   <IMG SRC="<MP.ICON.PATH>red.gif">
</MP.RED.POINT>

... qui définit en fait exactement le même objet que dans le premier exemple.

A noter que les espace de début et de fin ne sont pas retenus dans la valeur d'un objet.

Si vous placez le fichier suivant dans le répertoire source...

<HTML>
<HEAD>
<TITLE>example 1</TITLE>
</HEAD>

<BODY>
<MP.RED.POINT>a<BR>
<MP.RED.POINT>b<BR>
</BODY>
</HTML>


Vous obtiendrez le même résultat avec les deux définitions, sous la forme du fichier suivant écrit dans le répertoire Destination :

<HTML>
<HEAD>
<TITLE>example 1</TITLE>
</HEAD>

<BODY>
<IMG SRC="/icon/red.gif">a<BR>
<IMG SRC="/icon/red.gif">b<BR>
</BODY>
</HTML>

Rappelez vous toutefois que malgré cette exemple, les objets ManyPage sont principalement utilisés dans les fichiers .dress

Héritage

Il s'agit d'une des caractéristiques principales de ManyPage. C'est cet héritage qui vous encouragera à découper correctement vos objets en morceaux indépendants.
Vous pouvez définir un objet générique à la racine de votre site web, et le particulariser ensuite en changeant certains éléments pour les adapter à chaque partie du site. Il même possible de le modifier pour simplement quelques fichiers. C'est pourquoi il y a en général un gros fichier .obj à la racine du site et de petits dans les sous répertoires.

Rappelez vous qu'un fichier .obj s'applique aux fichiers du répertoire dans lequel il se trouve ainsi qu'aux fichiers des répertoires fils. Par ailleurs, on applique un fichier .obj à un fichier unique en le nommant par le préfixe du nom du fichier et le suffixe 'obj' (exemple : index.obj ou nomDuFichier.obj ).

Imaginons que nous ayons la définition d'objet suivante dans le fichier .obj de la racine :

<MP.ICON.PATH>
   /icon/
</MP.ICON.PATH>

<MP.POINT.FILE>
   red.gif
</MP.POINT.FILE>
<MP.POINT>
   <IMG SRC="<MP.ICON.PATH><MP.POINT.FILE>">
</MP.POINT>

et simplement le fichier .obj suivant dans le sous répertoire "Ciel"
<MP.POINT.FILE>
	blue.gif 
</MP.POINT.FILE>

Alors tous les objets POINT seront rouges, excepté dans le répertoire "Ciel" ou ils seront bleus. Et il suffit de "surcharger" un seul petit objet pour obtenir le changement, pas chacun d'eux.

On peut aussi décider de ne pas utiliser d'image pour l'objet POINT et cela seulement pour les fichiers terne.fr.html et terne.en.html. Il suffit pour cela de créer un fichier terne.obj dans lequel on replace directement toute la définition de l'objet :

<MP.POINT>(o)</MP.POINT>

Il faut noter à ce niveau que tous les objets qui ont été défini au niveau de la racine et qui n'ont pas été modifié peuvent encore être utilisé à ce niveau.

 

Objets définis par ManyPage : <PM.XXX>

Les objets suivants sont produits par ManyPage, à partir de l'analyse des fichiers sources et parfois des fichiers dépendants associés par les fichiers .link. Ils seront remplacés par les valeurs de remplacement indiquées.

Tag ManyPage Valeur de remplacement Exemple pour cette propre page

3 objets principaux

<PM.HEAD> Ce qui se trouve entre les tags HEAD du fichier source. Non significatif. Ce tag ne peut être utilisé dans un fichier source.
<PM.BODY.ATTRIBUT> Tous les attributs du tag BODY du fichier source Non significatif. Ce tag ne peut être utilisé dans un fichier source.
<PM.BODY> Ce qui se trouve entre les tags BODY du fichier source. Non significatif. Ce tag ne peut être utilisé dans un fichier source.
 

Les autres objets de type PM

<PM.KEYWD.FILENAME> Nom du fichier source, sans son suffixe (.fr.html ...). obj
<PM.KEYWD.BACK> Lien (URL) vers la page Précédente. Cet objet n'est correctement remplacé que dans un contexte d'URL (comme valeur d'un attribut HREF par exemple). dress.+
<PM.KEYWD.UP> Lien (URL) vers la page Sommaire (table des matières). Cet objet n'est correctement remplacé que dans un contexte d'URL (comme valeur d'un attribut HREF par exemple). template.+
<PM.KEYWD.NEXT> Lien (URL) vers la page Suivante. Cet objet n'est correctement remplacé que dans un contexte d'URL (comme valeur d'un attribut HREF par exemple). link.+
<PM.KEYWD.TITLEBACK> Titre (entre les tags TITLE dans la partie HEAD) de la page Précédente. .dress : the main template : the target web page structure
<PM.KEYWD.TITLEUP> Titre de la page Sommaire. 2 fichiers de configuration centrale et 3 types de fichiers pour décrire l´habillage
<PM.KEYWD.TITLENEXT> Titre de la page Suivante. .link : l´arbre de navivation
<PM.KEYWD.LANG> Suffixe de langue de la page générée. fr
<PM.KEYWD.DATE.MODIF> Date de Modification du Fichier (J/M/AAAA). A placer bien en vue dans l'habillage pour mettre en valeur la régularité de mise à jour du site. 25/3/2002
<PM.KEYWD.DATE.HAB> Date de production (exécution de ManyPage) au format normalisé. A utiliser comme valeur du tag META "Date". Exemple : <META Name="date" Content="Thu, 08 Feb 2001 17:11:05 GMT"> Fri, 18 Apr 2008 22:44:32 GMT
<PM.KEYWD.DATE> Même valeur que PM.KEYWD.DATE.HAB, mais dans un format plus court : (JJ/MM/AAAA) 18/04/2008
 

Possibles développements futurs (Non disponible dans la version 0.9)

<PM.TITLE> Pas encore disponible (oubli) PM.TITLE
<PM.KEYWD.TITLE> Pas encore disponible (idem PM.TITLE) PM.KEYWD.TITLE

Voir les explications concernant le fichier .link ou la présentation du modèle de navigation pour plus de détails au sujet des objets de type BACK, UP et NEXT.

Objets définis dans les fichiers .obj avec un comportement spécifique.

Site Web Multilingue

Les suffixes de langue sont définis à l'intérieur du tag <PM.LANGAGE>.

<PM.LANGAGE> est une sorte d'objet abstrait qu'il faut implémenter pour définir les langues que vous voulez utiliser dans votre site multilingue. Par exemple, le code suivant, placé à l'intérieur de votre fichier .obj racine, définira les deux suffixes de langue 'fr' et 'en'.

<PM.LANGAGE>
   <PM.LANG TYPE=fr>Fran&ccedil;ais</PM.LANG>
   <PM.LANG TYPE=en>English</PM.LANG> 
</PM.LANGAGE>


A noter que l'ordre de définition correspond à l'ordre de recherche des fichiers sources.

Cette définition présente 4 conséquences...

Le suffixe des pages produites

Cette définition précise d'abord l'ensemble des pages qui seront produites par ManyPage pour un nom préfixe donné, ainsi que les pages qu'il doit rechercher dans l'arborescence Source.
Par exemple, à partir d'un fichier index.fr.html, ManyPage cherchera le fichier index.en.html correspondant. S'il le trouve, il produira les deux fichiers correspondant dans l'arborescence Destination. S'il ne le trouve pas, il copiera le fichier index.fr.html existant et changera tous les liens de manière à maintenir la navigation dans l'arborescence "Anglaise".

Transformation des suffixes génériques

Quand on utilise un ".+" (à la place de .fr.html par exemple) à la fin d'un URL ou à l'intérieur d'un fichier ".link", ManyPage le remplace avec le suffixe correcte dans chaque page produite. Ainsi un lien "/Lien/fichier.+" dans un fichier index.fr.html serra transformé en "/Lien/fichier.fr.html". Attention, ManyPage considère qu'un lien existe uniquement comme valeur de l'un des attributs HTML suivants : 'HREF', 'SRC', 'BACKGROUND' et 'CODE'.

Objets ManyPage Multilingue

Il est possible de définir des objets différents suivant la langue de la page ou ils apparaissent. Il est proposé deux manière de faire.

D'abord, vous pouvez définir autant d'objets que vous avez listé de langue dans le tag 'LANGAGE'. Ils auront tous le même nom avec un suffixe correspondant à la langue de l'objet. Vous placez alors tous ces objets dans un autre qui serra celui à utiliser. A l'exécution de ManyPage, seul l'objet avec le suffixe adéquat apparaîtra dans un fichier donné (celui avec le même suffixe de langue que le fichier). Par exemple, seul "Salut la planète" dans ce fichier obj.fr.html : Salut la planète !

<MP.HELLOWORLD.FR>
	Salut la plan&egrave;te !
</MP.HELLOWOLRD.FR>

<MP.HELLOWORLD.EN>
	Hello World
</MP.HELLOWOLRD.EN>

<MP.HELLOWORLD>
	<MP.HELLOWORLD.FR><MP.HELLOWORLD.EN>
</MP.HELLOWOLRD>


La seconde méthode consiste à définir un seul objet en insérant des délimiteurs de langue dans chaque partie de sa définition. Ces délimiteurs de langue sont du type <PM.suffixeDeLangue> et </PM.suffixeDeLangue>.
A noter que pour cause de compatibilité ascendante, les tags MP.suffixeDeLangue sont des tags réservés de ManyPage et ne devraient pas être utilisés par les webmasters.

L'exemple précédent peut ainsi directement être obtenu par la définition d'objet suivante :

<MP.HELLOWORLD>
	<PM.FR>Salut la plan&egrave;te !</PM.FR>
	<PM.EN>Hello World</PM.EN>
</MP.HELLOWOLRD>


L'objet spécial : WARNING.LANG

WARNING.LANG est un autre objet que peut définir le webmaster, et qui bénéficiera d'un comportement particulier : l'objet <MP.WARNING.LANG.EN> n'apparaîtra dans le fichier de Destination toto.en.html que si le fichier source toto.en.html n'existe pas (mais que le fichier toto.fr.html existe). Dans ce cas le contenu du fichier toto.fr.html aura été préalablement copié dans le fichier Destination toto.en.html. Ce tag est à utiliser quand vous travaillez sur un site multilingue et que vous désirez développer certaines parties du site sans les traduire immédiatement.

Voici un exemple d'utilisation du tag WARNING.LANG. Cet objet est définit dans le fichier racine de ce site est utilisé dans tous les fichiers .dress du site, mais il n'est visible que dans certaines parties, où je n'est pas encore eu le temps de finir le travail :-).

<MP.WARNING.LANG.FR>
	<CENTER>
		<B>Cette Page n'est pas traduite, d&eacute;sol&eacute;.</B>
	</CENTER> 
</MP.WARNING.LANG.FR>

<MP.WARNING.LANG.EN>
	<CENTER>
		<B>This page is not translated, sorry.</B>
	</CENTER> 
</MP.WARNING.LANG.EN>

<MP.WARNING.LANG>
	<MP.WARNING.LANG.FR><MP.WARNING.LANG.EN>
</MP.WARNING.LANG>

 

La structure de programmation minimal : le PM.IF

Vous pouvez décider de définir des objets génériques, qui seront différents suivant le contexte dans lequel ils sont utilisés (existence ou non d'une page suivante par exemple).

Voici la structure principale à utiliser : si A est un tag défini et non vide, alors la valeur de l'expression serra C sinon, elle serra D ou vide si l'attribut ELSE n'a pas été utilisé (optionnel).

<PM.IF EXIST=`A` THEN=`C` ELSE=`D`>

Il est possible d'utiliser cette structure avec l'un des tags suivants qui existent uniquement dans certaines circonstances : <MP.WARNING.LANG.anyLanguageSuffix>, <PM.KEYWD.BACK>, <PM.KEYWD.UP>, <PM.KEYWD.NEXT>

Autres structures

Structure Test Exemple positif
<PM.IF EXIST=`A` THEN=`C` ELSE=`D`> Existence de A <PM.KEYWD.UP> quand un parent a été défini dans le fichier .link
<PM.IF NOEXIST=`A` THEN=`C` ELSE=`D`> Non existence de A <MP.WARNING.LANG.FR> quand le fichier "fr" n'existe pas
<PM.IF TEST=`A PM.EQ B` THEN=`C` ELSE=`D`> Égalité de A et B

A contient le même code HTML que B
A=fool and B=fool

<PM.IF TEST=`A PM.NE B` THEN=`C` ELSE=`D`> Non égalité de A et B A=toto and B=tata
<PM.IF TEST=`A PM.LT B` THEN=`C` ELSE=`D`> A plus petit que B A=alphabet and B=wysiwyg
<PM.IF TEST=`A PM.GT B` THEN=`C` ELSE=`D`> A plus grand que B A=wysiwyg and B=Alphabet
<PM.IF TEST=`A PM.CT B` THEN=`C` ELSE=`D`> A contient B A=anticonstitutionnellement and B = constitution
<PM.IF TEST=`A PM.NC B` THEN=`C` ELSE=`D`> A ne contient pas B A=bonjour B=hello

 

Les paramètres des objets ManyPage

Pour modifier les parties des objets complexes, vous avez besoin d'accéder au fichier .obj. Si vous voulez fournir des objets paramétrables à votre équipe éditoriale, sans l'autoriser à modifier les fichiers objets ou si vous voulez dériver plusieurs objets d'un objet complexe, et tout cela dans un unique fichier .obj, alors vous aurez besoin d'utiliser les paramètre des objets ManyPage.

Par exemple, vous pourrez utiliser le tag suivant <MP.OBJECTNAME attribut1="value1" attribut2="value2"> à l'intérieur d'un fichier .dress ou d'un fichier source, si vous avez pris soin de placer les expressions PM.ATTRIBUT.attribut1 et PM.ATTRIBUT.attribut2 quelquepart à l'intérieur de la définition de l'objet OBJECTNAME

Par exemple, avec la définition d'objet suivante :

<MP.ENCADRE>
	<MP.RED.POINT>
	PM.ATTRIBUT.TEXT
	<MP.RED.POINT>
</MP.ENCADRE>

Vous pouvez utiliser le tag ENCADRE dans un fichier source ou .dress de la manière suivante

<MP.ENCADRE TEXT="Salut la plan&egrave;te">

Vous obtiendrez alors le code HTML suivant dans le fichier Destination :

<IMG SRC="/icon/red.gif">Salut la plan&egrave;te<IMG SRC="/icon/red.gif">

Vous pouvez par ailleurs vouloir proposer des valeurs par défaut pour ces paramètres. Elles apparaîtront dans le tag d'ouverture de la définition :

<MP.HR WIDTH="500" HEIGHT="3">
	<CENTER><IMG SRC="/Icon/Serveur/MP/hr.jpg" WIDTH=PM.ATTRIBUT.WIDTH 
				HEIGHT=PM.ATTRIBUT.HEIGHT></CENTER>
</MP.HR>


Avec cet exemple, si vous utilisez <MP.HR WIDTH="100">

Vous obtiendrez : <CENTER><IMG SRC="/Icon/Serveur/MP/hr.jpg" WIDTH=100 HEIGHT=3></CENTER>

Commentaires

Vous devriez placer autant de commentaires que possible pour décrire et faciliter la réutilisation de vos objets ManyPage. Ils disparaîtront des fichiers Destination au moment de la production de ces fichiers. Un commentaire dans un fichier .obj à le même format que les commentaires du format HTML :

<!-- Ceci est un commentaire qui disparaitra -->

Si vous voulez vraiment conserver un commentaire dans les fichiers HTML produits, vous pouvez le mettre dans le fichier .dress ou placer un tiret (-) au début de votre commentaire .obj :

<!-- - Ceci est un commentaire qui ne disparaitra pas -->

Débugage

Quand on exploite pleinement les possibilités de ManyPage, les fichiers .obj finissent par grossir, et l'on y introduit parfois des bugs difficiles à pister (tag mal fermés, nom de tag ouvrant différents du nom du tag fermant...). Ces bugs peuvent parfois même ralentir l'exécution de ManyPage, sans le bloquer complètement. Afin de vous aider à nettoyer vos fichiers .obj, vous pouvez utiliser le script check_obj.pl fourni avec la distribution de ManyPage.

Il suffit de le lancer avec le fichier .obj à vérifier en argument et il vous renvoie la liste des objets définis avec des messages d'erreur le cas échéant.

 

Copyright 1994-2007
Pascal Vuylsteker

Page modifiée le:
25/3/2002

Contact:
<pvk@vuylsteker.net>

Si vous trouvez ce site util (MiniHoo de la RV ou outil open source ManyPage), aidez à son financement (hébergement) par un don (Cf bouton PayPal)...