La dernière fois, nous avons abordé la composition de page par aggrégation de composants. Ce type de composition est particulierement bien adapté aux composants fonctionnels. Par exemple, une page d'accueil peut être composée des composants "Dernieres news", "Utilisateurs en lignes", "Bloc de publicite", "Edito", "Boite de connexion". Chacun de ces composants apporte une fonctionnalité a la page. Aujourd'hui, je vous propose d'aborder la mise en place d'un layout de page cohérent pour toutes les pages de votre site. Le problème: pouvoir ajouter facilement une page a votre site en gardant le layout general. La solution: utiliser la notion d'heritage de mason pour factoriser le layout global de votre site. L'héritage en mason. Mason permet de définir une chaine d'héritage entre composants. Le composant terminal de cette chaîne d'héritage doit être une page. En fait, la notion d'héritage en mason est un peu éloignée de la notion d'héritage classique que l'on connait dans les langages objets. Pour faire simple, il faudrait plutôt parler d'auto inclusion inversée automatique. Pour être plus clair, prenons un exemple basique: traditionnellement, une page est composée d'un layout global (incluant le header et le footer) et d'un contenu utile. Dans un système à base d'inclusion, on écrierait une page comme ceci:
- INCLUDE header
- Contenu utile
- INCLUDE footer
- %# layout.mas
- <html>
- <head>
- ...
- </head>
- <body>
- ...
- % $m->call_next()
- ...
- </body>
- </html>
- %# page.html
- <flags>
- inherit => '/layout.mas'
- </flags>
- <p>
- Contenu
- </p>
- %# autohandler
- <html>
- <head>
- ...
- </head>
- <body>
- ...
- % $m->call_next()
- ...
- </body>
- </html>
- %# page.html
- <p>
- Contenu
- </p>