Pour la création de page d'un site, Infoglue propose une interface de construction par bloc. Comme avec des Légos, on construit sa page en ajoutant des blocs (appelés composants), le premier blocs étant (dans le cas d'une page web) un fragment HTML contenant la balise racine de la page <html>

Dans ce fragment HTML, on va insérer des balises spécifiques à Infoglue : les slots (slot signifiant emplacement en anglais). Un slot est représenté par la balise <ig:slot id="menuGauche"></ig:slot> (on vient de créer ici un emplacement identifié par menuGauche. Il est ensuite possible de rajouter d'autres composants à cet emplacement, ces composants pouvant eux aussi contenir des slots. Un structure arborescente de composants est alors définies et représentera les différents blocs de la page. Pour simplifier, on peut voir ces slots comme des emplacements où l'on aurait réalisé une inclusion de code avec un include en jsp par exemple.

Chaque niveau de cet arbre sera interprété par le constructeur de la page (appelé invoker) du niveau le plus bas vers le niveau le plus élevé c'est à dire le composant racine. Il est donc possible de faire un composant de niveau n+1 qui génère du code qui sera interprété lors du traitement du niveau n =P. L'avantage de cette interprétation par bloc est la possibilité de définir ces composants dans des langages différents. Il est possible d'écrire ces composants en JSP ainsi qu'en velocity ou en freemarker. Le velocity se prète très bien à l'écriture de composant simple de remontée de contenu. Cependant, ce langage montre rapidement ces faiblesses lors de traitements récurssifs malgrè l'usage de "fonctions" macros. A ce moment, la définition en JSP, bien que plus lourde en définition de variable, est plus robuste.

Chaque composant peut se voir paramétrés : par des liens vers des contenus ou des pages du CMS, par des champs texte, des cases à cocher, ... Ces informations sont ensuite récupérables dans les composant pour être traitées. De cette façon, on peut rendre dynamique de nombreux composants et surtout les rendre générique. Par exempl, on peut imaginer un composant qui affiche la liste des article dans un dossier de contenu, les paramètres pourraient donc être un lien vers le dossier de contenu et le nombre d'article à afficher. Je reviendrez dans un autre billet sur le paramétrage des composants et notamment la notion d'héritage de propriétés.