Les BlocsConfigurables permettent de creer facilement des ModelesDeMiseEnPage configurables.
Avantages
Par rapport a l'approche d'origine des ModelesDeMiseEnPage, les Blocs Configurables apportent des avantages dans les domaines suivants :
Creation facile :
- L'auteur du modele de mise en page n'a pas besoin de programmer chaque TypeDeBlocsConfigurables. Il n'a pas besoin de connaitre les objets et attributs correspondant aux boites de session, de recherche, de blablas, du calendrier etc.
- La mise en page des blocs configurables utilise les Macros pour eviter que des portions tres similaires de code soient repetees pour chaque bloc. Comme le code n'est pas repete de multiples fois, il est tres facile de le changer.
Configuration flexible :
- C'est l'utilisateur du modele de mise en page (et non son auteur) qui decide des blocs qui seront affiches ou non sur chaque type de page. Ce choix est effectue via un formulaire, aucune programmation ou edition du modele n'est requise.
Extensibilite :
- Lorsque de nouveaux types de blocs sont introduits, il n'est pas necessaire de modifier le modele de mise en page pour pouvoir les utiliser.
Mise en place
Pour ajouter le support des Blocs Configurables a un Modele De Mise En Page, il faut :
- Definir les emplacements de blocs utilisables
- Ajouter les Macros indiquant le code a generer pour chaque bloc
- Choisir pour chaque emplacement de bloc l'emplacement du code genere
1. Definition des emplacements de blocs utilisables
Un emplacement de bloc configurable permet a l'utilisateur d'un modele de mise en page d'afficher ou non un bloc de n'importe quel type a cet emplacement.
Les emplacements de blocs doivent etre definis dans l'entete du modele de mise en page, apres la definition des couleurs configurables (lignes commencant par smartcolor) et avant les directives (lignes commencant par pragma).
Chaque emplacement est defini avec la syntaxe suivante:
smartblock [classe de l'emplacement].[identifiant de l'emplacement] "[description de l'emplacement]" [TypeDeBlocConfigurable par defaut] [TypeDePage par defaut]
exemple :
smartblock sb.right1 "Bloc de droite 1" calendar index
- [classe de l'emplacement] : il est possible de definir plusieurs classes d'emplacements et generer pour chacune un code different. Par exemple, chaque classe d'emplacement pourrait avoir une classe CSS differente et ainsi etre presentee differemment. Dans la plupart des cas, une seule classe est utilisee. A chaque classe d'emplacement correspond un jeu de Macros permettant de specifier le code genere.
- [identifiant de l'emplacement] : cet identifiant doit etre unique. Il permet de specifie a quel endroit le code doit etre genere.
- [description de l'emplacement] : decrit a quel endroit se trouve l'emplacement et comment le bloc sera presente.
- [TypeDeBlocConfigurable par defaut] : precise le type du bloc qui correspond a cet emplacement. Il peut etre change par l'utilisateur du modele.
- [TypeDePage par defaut] : precise le type des pages pour lesquelles le bloc sera affiche. Il peut etre change par l'utilisateur du modele.
2. Ajout des macros
Lorsque l'utilisateur d'un modele de mise en page choisi d'afficher un bloc configurable dans un emplacement de bloc, du code HTML est genere a cet emplacement. Le code depend du TypeDeBlocConfigurable, mais il a toujours une structure similaire, articulee autour de Macros.
Par exemple, voici le code genere par le BlocDiscussionsActives :
<object class=active_summaries>
<macro name="<NAME>_start"><arg name="type">active_summaries</arg></macro>
<macro name="<NAME>_title"><arg name="title"><TITLE></arg></macro>
<macro name="<NAME>_list_start"></macro>
<object class=active_summary count=<COUNT>>
<macro name="<NAME>_link">
<arg name="text"><attribute title></arg>
<arg name="url"><attribute url></arg>
<arg name="extra_text">(<attribute nb_comments>)<object sub_class=active_summary_new_comments> N</object></arg>
</macro>
</object>
<macro name="<NAME>_list_end"></macro>
<macro name="<NAME>_end"></macro>
</object>
Le champ <NAME> est remplace par le nom de la classe de l'emplacement, le champ <TITLE> par le titre choisi par l'utilisateur pour ce bloc, et le champ <COUNT> par le nombre d'elements choisi par l'utilisateur pour ce bloc.
Les macros suivantes sont utilisees par les blocs configurables :
- [classe de l'emplacement]_start : appelee au debut de chaque bloc
- [classe de l'emplacement]_title : contient le titre du bloc
- [classe de l'emplacement]_list_start : appelee au debut de chaque liste comportant des elements
- [classe de l'emplacement]_text : appelee a la fin de chaque bloc
- [classe de l'emplacement]_link : appelee pour chaque element qui a la forme d'un lien
- [classe de l'emplacement]_text : appelee pour chaque element qui a la forme d'une ligne de texte
- [classe de l'emplacement]_link_text : appelee pour chaque element qui a la forme d'un lien + un ligne de texte.
- [classe de l'emplacement]_link_link : appelee pour chaque element qui a la forme d'un lien + un autre lien
- [classe de l'emplacement]_anything : appelee pour le contenu d'un bloc qui n'est pas une liste de liens.
- [classe de l'emplacement]_list_end : appelee a la fin de chaque liste comportant des elements
Pour chaque classe d'emplacement, vous pouvez definir les macros ci-dessus. Par exemple, voici un exemple classique de macros, avec une classe d'emplacement dont le nom serait sb :
<define_macro name="sb_start">
<div class="<arg name="type">">
</define_macro>
<define_macro name="sb_end">
</div>
</define_macro>
<define_macro name="sb_list_start">
<ul>
</define_macro>
<define_macro name="sb_list_end">
</ul>
</define_macro>
<define_macro name="sb_title">
<h3>arg name="title"></h3>
</define_macro>
<define_macro name="sb_text">
<li><arg name="text"> <arg name="extra_text"></li>
</define_macro>
<define_macro name="sb_link">
<li><a href="<arg name="url">"><arg name="text"></a> <arg name="extra_text"></li>
</define_macro>
<define_macro name="sb_link_link">
<li><a href="<arg name="url1">"><arg name="text1"></a> :
<a href="<arg name="url2">"><arg name="text2"></a> <arg name="extra_text"></li>
</define_macro>
<define_macro name="sb_link_text">
<li><a href="<arg name="url1">"><arg name="text1"></a> : <arg name="text2"> <arg name="extra_text"></li>
</define_macro>
<define_macro name="sb_anything">
<div class="anything">
<arg name="anything">
</div>
</define_macro>
Et apres instanciation des macros, le code genere pour le BlocDiscussionsActives ressemblerait a :
<object class=active_summaries>
<div class="active_summaries">
<h3><TITLE></h3>
<ul>
<object class=active_summary count=<COUNT>>
<li>
<a href="<attribute url>"><attribute title></a> (<attribute nb_comments>)<object sub_class=active_summary_new_comments> N</object>
</li>
</object>
</ul>
</div>
</object>
3. Choix des emplacements du code genere
[a rediger]