<%importfile="../../../globals.dim#*"
%>
<%templatefile="<%%WCT_ROOT_PATH%%>proto/WCT_SYSTEM/templates.dim#WCT_SYSTEM::WCT_PATHES"
%>
<%set%WCT_SESSION::ID%
= "1" %>
<%importfile="<%%WCT_SRC_PATH%%>WCT_SESSION/templates.dim#*"
%>
<%%WCT_SESSION::Check()%%>
<html>
<head>
</head>
<TEMPLATE ID="TITRE" INLINE>
Didacticiel - Structure type d'une page Web
</TEMPLATE>
<BODY BGCOLOR=#FFFFFF MARGINWIDTH=0 MARGINHEIGHT=0 LEFTMARGIN=0 TOPMARGIN=0>
<%%FRAMEWORK%%>
<TEMPLATE ID="LOCAL_TOC">
<A class=t1 HREF="#BM1">Les grandes parties du document</A><BR>
<A class=t1 HREF="#BM2">Analyse sommaire de l'exemple 3</A><BR>
<A class=t2 HREF="#BM2_1">Les prédéclarations</A><BR>
<A class=t2 HREF="#BM2_2">La séquence principale</A><BR>
<A class=t2 HREF="#BM2_3">La carcasse DIML</A><BR>
<A class=t2 HREF="#BM2_4">Discussion</A><BR>
<A class=t1 HREF="#BM3">Les bibliothèques de templates DIML</A><BR>
<A class=t1 HREF="#BM4">Résumé</A>
</TEMPLATE>
<TEMPLATE ID="CONTENT_fr">
<TABLE WIDTH="95%">
<TD VALIGN=top><H2>Structure type d'une page Web</H2></TD><TD
Valign=top><%templatefile="../parcours1_<%%FORM::lang%%>.dim#coursestamp"
%></TD>
</TR>
</TABLE>
<P>Cette étape ne prétend pas vous donner un modèle absolu d'une page
Web. Il existe bien trop de variantes et de cas particuliers... autant que de
sites.
<P>Par contre, il est plus facile de vous faire profiter ici de mon expérience,
et de celle des développeurs DIML. Cette étape expose quelques bons réflexes
d'organisation du code d'une page DIML.
<A NAME="BM1"><H3>Les grandes parties du document</H3></A>
<P>En général, une page DIML comporte du HTML réparti dans une séquence
principale ou dans des templates. Puis on y trouvera trois formes de création
de variables :
<P><ul>
<li>des importations de templates externes (par exemple des templates
généraux) nécessaires à la construction du fichier
<li>des déclarations de variables par l'instruction <%set
<li>des appels à des scripts complémentaires appelés "scripts utilisateur"
ou "scripts d'alimentation"
</ul>
<P>Le plus souvent, on réserve la partie initiale du fichier à la déclaration
des variables, aux imports et aux invocations de scripts d'alimentation. Le
principe de tout cela est que le maximum de variables soient en place avant
de commencer à construire le document. Ceci permet aussi, par exemple, de pouvoir
changer complètement l'apparence du résultat par un choix initial, lorsque les
données attendues pour fabriquer normalement le document ne peuvent être obtenues.
<P>Puis viendra la séquence principale du document. Celle-ci peut être
un corps HTML linéaire si le document a une structure simple, dans laquelle
des templates peuvent être appelés. On utilisera plutôt une carcasse d'appels
DIML si le document est plus complexe et très paramétré. Ce document ci, ainsi
que tous les documents du tutorial sont du premier type.
<P>le fichier <A HREF="<%%SITE_ROOT_URL%%>services/viewsource.dim?source=support/tutorial/parcours1/ex3.dim"
TARGET="_blank">ex3.dim (exemple 3)</A> montre un exemple du deuxième
type. Ce fichier correspond à la carcasse type des fiches d'exercices et de
trucs et astuces présentes dans ce site. On y remarquera la fonction principale
du DIML qui est de décrire la logique de construction de la fiche, un peu comme
du XML, mais sans la complexité du XSL, et sans le formalisme d'une DTD.
<P>Vous pouvez également consulter le <A HREF="<%%SITE_ROOT_URL%%>services/viewsource.dim?source=support/tutorial/parcours1/09_webpage_<%%FORM::lang%%>.dim" TARGET="_blank">code source</A>
de cette même page pour voir un fichier caractéristique du premier type.
<A NAME="BM2"><H3>Analyse sommaire de l'exemple 3</H3></A>
<P>Le fichier de l'exemple 3 montre comment le DIML peut être utilisé
pour factoriser une carcasse, c'est à dire une règle de construction sommaire
d'un document. Ce document suit les préceptes énoncés ici, c'est à dire : une
première section réservée aux importations (il n'y a pas d'appel de script d'alimentation
et les déclarations des variables <B>%TITRE%</B> et <B>%SHOW_CONTROL%</B>
ont été reléguées plus loin), puis le début d'une séquence HTML réduite à l'en-tête,
et enfin une structure d'appels DIML.
<A NAME="BM2_1"><H4>Les prédéclarations</H4></A>
<P>Deux lignes importent respectivement les templates de contenu de la
fiche, définie par un paramètre CGI <B>%FORM::Nam%</B>, ainsi que
les templates généraux du site <I>diml.net</I>.
<P>Un peu plus loin, deux variables <B>%TITRE%</B> et <B>%SHOW_CONTROL%</B>
sont définies. On notera ici l'utilisation de la commande <FONT class=syntax><%eval</FONT>
qui permet d'interpréter le DIML contenu dans la valeur affectée à la variable
<B>%TITRE%</B>
<A NAME="BM2_2"><H4>La séquence principale</H4></A>
<P>Elle est réduite ici à la portion congrue, mais s'étend tout de même
du <html> initial à la fin du document. Cependant, on ne peut
réellement parler ici de séquence principale vu le peu de HTML littéral qui
y est présent.
<A NAME="BM2_3"><H4>La carcasse DIML</H4></A>
<P>Le document utilise un concept de "carcasse de structure", dans lequel
la structure de construction est décrite, et ordonnace l'appel de templates
qui sont sensés exister au moment de l'appel. La logique de construction en
est la suivante :
<P>Le document est organisé en paragraphes formatés dont la "glue" est
répartie en deux templates <B>%Paragraphe%</B> et <B>%FINParagraphe%</B>
définis dans le fichier <I>temp_tut.dim</I>.
<P>A y regarder de plus près, voilà le code de ces deux templates :
<P><PRE class=code>
<FONT class=template><TEMPLATE ID="Paragraphe"></FONT>
<table border=0 width=708>
<tr>
<td >
<FONT face=Verdana,Helvetica size=-1>
<dir><B> <FONT class=syntax><%
%TITREPARA% %></FONT></B></dir>
</FONT>
</td>
</tr>
<FONT class=syntax><%if (%CONTENU% ne "")%></FONT>
<tr>
<td>
<FONT face=Verdana,Helvetica size=-1>
<dir> <FONT class=syntax><%
%CONTENU% %></FONT></dir>
</FONT>
</td>
</tr>
<FONT class=syntax><%endif%></FONT>
<FONT class=template></TEMPLATE></FONT>
<FONT class=template><TEMPLATE ID="FINParagraphe"></FONT>
</table>
<FONT class=template></TEMPLATE></FONT>
</PRE>
<P>(La séparation en deux templates est due à l'existance d'autres types
de paragraphes que nous ne détaillons pas ici).
<P>La construction d'une instance de paragraphe suppose un appel au template
<B>%Paragraphe%</B> non sans avoir préparé des valeurs légitimes
pour les variables <B>%TITREPARA%</B> et <B>%CONTENU%</B>
<P>La carcasse DIML précemment écrite utilise cette logique voulue par
le concepteur et appelle quatre paragraphes standards et les alimente avec les
contenus importés en début de fichier.
<A NAME="BM2_4"><H4>Discussion</H4></A>
<P>Quel est l'avantage d'une telle construction ?
<P>La structure ci-avant a été construite en quelques minutes et est hautement
réutilisable. Il suffit de l'alimenter avec du contenu présentant les quatre
templates standards demandés (<B>%objectif%</B>, <B>%cours%</B>,
<B>%exemple%</B>, <B>%usages%</B>) par le biais d'un
paramètre CGI de clef "Nam" (pour simplifier).
<P>Pourquoi ne pas utiliser une base de données ?
<P>Parce que la base de données ne s'utilise pas systématiquement et encore
moins :
<p>
<ul>
<li>Lorsque le nombre de fiches est relativement faible
<li>Lorsque les données stockées sont des corpus de texte, auquel cas
il est nécessaire de manipuler des BLOBS ou des variables de grande taille.
<li>Lorsque les données sont très statiques, c'est à dire qu'il y a peu
de mouvement
<li>Lorsque la mise en oeuvre doit rester fiable et la disponibilité grande.
<li>Lorsque le temps d'accès doit être rapide, bien que le processus dynamique
lui-même consomme une partie du gain obtenu par l'emploi de fichiers plutôt
qu'une connexion à un SGBD.
</ul>
<P>Quel gain par rapport à XML ?
<P>XML est très rigoureux dans son approche bien que cette rigueur puisse
être assouplie par l'omission de la DTD. Le DIML n'est pas rigoureux et n'effectue
pas de vérification du bien fondé des appels de variable. C'est un outil pratique
et rapide de mise en structure.
<P>Le XML reste malgré tout statique dans sa description du document.
Même si le document est filtré par du XSL pour obtenir une mise en forme finale
en HTML, ou pour remplir un certain contenu, le concept du document reste statique
au contraire du DIML qui permet une approche aussi dynamique que du PHP ou du
perl natif.
<P>Malgré tout, sur le point de vue organisationnel, le XML est bien plus
puissant et général que le DIML, et nul n'est l'idée ici de concurrencer ce
dernier là où il a été jugé bon de l'utiliser.
<A NAME="BM3"><H3>Les bibliothèques de templates DIML</H3></A>
<P>Il existe des cas dans lequels on souhaite pouvoir rassembler les templates
DIML dans une même unité fichier, en général parce qu'ils sont les variantes
d'une même sémantique (base de données fichiers) ou qu'ils constituent des briques
complémentaires d'un mécanisme.
<P>Le DIML permet d'utiliser le concept de bibliothèques sous la forme
de fichiers DIML ne comportant <U>que des définitions de templates</U>.
Une requête sur un tel fichier ne produit pas de contenu puisque sa séquence
principale est vide. Il est en général utilisé comme cible d'un import de templates.
<P>Un exemple communément utilisé d'une bibliothèque DIML est le fichier
<A HREF="ex5.dim" TARGET="_blank">globals.dim</A> utilisé en racine
de site pour donner les variables globales à tous les fichiers DIML.
<A NAME="BM4"><H3>Résumé</H3></A>
<P>Un document DIML peut contenir
<P><ul>
<li>Une page Web dynamique DIML
<li>Une bibliothèque de templates DIML
</ul>
<P>Une page Web écrite en DIML est le plus souvent composée :
<p><ul>
<li>D'une première partie pour construire les données, par des importations,
des définitions, ou des invocations de scripts d'alimentation
<li>D'un corps principal de document qui peut être
<ul><li>une séquence de HTML paramétrée,
<li>une carcasse d'appels DIML
</ul>
<li>D'une succession de définition de templates
</ul>
<%templatefile="../parcours1_<%%FORM::lang%%>.dim#navcall"
%>
</TEMPLATE>
</body>
</html>
<%%WCT_SESSION::Add()%%>