Construire un site (CMS)
Melis est avant tout un CMS. Cette page explique le modèle de contenu — sites, pages, templates et plugins — et comment une page est rendue sur le front office. C'est le modèle mental à avoir avant d'éditer des templates ou de construire un module de site.
Le modèle de contenu
| Concept | Ce que c'est | Table(s) principale(s) |
|---|---|---|
| Site | Un site web. Possède une page d'accueil, des langues et un ou plusieurs domaines par environnement. | melis_cms_site, melis_cms_site_domain |
| Page | Un nœud de l'arbre de pages du site. A un type (site/dossier/page), un template et du contenu. | melis_cms_page_tree, melis_cms_page_published, melis_cms_page_saved |
| Template | La mise en page utilisée — il pointe vers un contrôleur/action/vue d'un module de site. | melis_cms_template |
| SEO | Slug d'URL et meta tags par page. | melis_cms_page_seo |
| Langue | Une page peut avoir des traductions liées entre elles. | melis_cms_lang, melis_cms_page_lang |
Les pages sont versionnées
Chaque page existe en deux versions :
- Saved (
melis_cms_page_saved) — le brouillon de travail que vous éditez dans le backoffice. - Published (
melis_cms_page_published) — la version live servie sur le front office.
Vous éditez le brouillon, puis vous publiez quand c'est prêt. Le contenu éditable de la page (voir zones et plugins ci-dessous) est stocké sur l'enregistrement de la page.
Les templates
Un template (melis_cms_template) est le pont entre une page et le code qui la rend. Pour le type de template courant ZF2, il stocke :
tpl_zf2_website_folder— le module de site (p. ex.MelisDemoCms),tpl_zf2_controller,tpl_zf2_action— quel contrôleur/action rend la page,tpl_zf2_layout— le layout dans lequel l'envelopper.
Donc une page → référence un template → qui route vers une vue .phtml dans un module de site.
Contenu éditable : zones & plugins
Les templates exposent deux types de zones éditables, via des view helpers :
MelisTag — zones éditables simples
Une zone HTML/texte/média nommée qu'un éditeur modifie en ligne (TinyMCE) dans le backoffice :
<?= $this->MelisTag($this->idPage, 'home-html-1', 'html', '<h1>Titre par défaut</h1>') ?>Le contenu par défaut s'affiche tant qu'un éditeur ne l'a pas remplacé ; la valeur enregistrée est stockée sur la page. Helper : vendor/melisplatform/melis-front/src/View/Helper/MelisTagsHelper.php.
MelisDragDropZone — plugins de templating
Une zone de dépôt où les éditeurs glissent des plugins de templating — des blocs de contenu réutilisables (un slider, une liste d'actualités, un formulaire de contact) :
<?= $this->MelisDragDropZone($this->idPage, 'dragdropzone_home_1') ?>Helper : vendor/melisplatform/melis-front/src/View/Helper/MelisDragDropZoneHelper.php.
Un plugin de templating étend MelisEngine\Controller\Plugin\MelisTemplatingPlugin et implémente :
front()— renvoie les données/la vue rendues sur le site live,back()— le formulaire de configuration affiché dans l'éditeur du backoffice.
MelisCmsSlider et MelisCmsNews sont de bons plugins de référence ; utilisez MelisTemplatingPluginCreator pour scaffolder les vôtres.
Comment une page se rend sur le front office
Le front office est servi par MelisFront (le moteur qui affiche les sites) au-dessus de MelisEngine (services de pages/données). En gros :
- Le vhost définit
MELIS_MODULE→ sélectionne le module de site à servir. - Une URL du type
…/id/5résout vers la page id 5 (route dansvendor/melisplatform/melis-front/config/module.config.php). Les URLs SEO pointent aussi vers des ids de page. - MelisEngine charge la page + son template (
vendor/melisplatform/melis-engine/src/Service/MelisPageService.php). - Le contrôleur/action
ZF2du template rend la vue.phtmldu module de site. - Les zones
MelisTaget les pluginsMelisDragDropZonesont remplis depuis le contenu publié. - Le résultat est enveloppé dans le layout du site.
Modes édition / aperçu
La même page peut être demandée dans différents modes : …/id/5 (live), …/id/5/preview (brouillon), …/id/5/renderMode/melis (édition dans le backoffice).
Anatomie d'un module de site
Un module de site est un module Laminas normal qui contient les templates, vues et assets d'un site. La référence est vendor/melisplatform/melis-demo-cms/ ; les sites custom vivent généralement sous module/MelisSites/<VotreSite>/ :
MelisDemoCms/
├── config/
│ ├── module.load.php # modules nécessaires au site (MelisEngine, MelisFront, plugins…)
│ ├── module.config.php # routes / contrôleurs / services
│ ├── assets.config.php # CSS & JS du front office
│ └── melis.plugins.config.php # plugins de templating disponibles pour les templates
├── src/Controller/ # Home, Contact… (rendent les vues du template)
├── view/
│ ├── layout/ # layouts du site
│ └── melis-demo-cms/home/index.phtml # un template de page (utilise MelisTag / MelisDragDropZone)
└── public/ # css / js / imagesCréer un nouveau site (vue d'ensemble)
À haut niveau :
- Créez le site dans le backoffice (tool Sites) — nom, langues, page d'accueil.
- Fournissez un module de site sous
module/MelisSites/<VotreSite>/(contrôleurs + templates.phtml+ assets). - Déclarez des templates (
melis_cms_template) pointant vers le contrôleur/action de votre module. - Construisez l'arbre de pages et assignez les templates ; ajoutez
MelisTag/MelisDragDropZoneà vos vues. - Faites pointer un vhost vers
public/avecSetEnv MELIS_MODULE "<VotreSite>"(voir Installation). - Publiez et parcourez le front office.
Commencez par lire
vendor/melisplatform/melis-demo-cms/de bout en bout — c'est l'exemple canonique et fonctionnel de chaque concept de cette page.
Fichiers clés
| Sujet | Chemin |
|---|---|
| Services CMS (pages/sites) | vendor/melisplatform/melis-cms/src/Service/ |
| Service de page (engine) | vendor/melisplatform/melis-engine/src/Service/MelisPageService.php |
| Rendu front | vendor/melisplatform/melis-front/ |
| Helpers de zones éditables | vendor/melisplatform/melis-front/src/View/Helper/ |
| Base plugin de templating | vendor/melisplatform/melis-engine/src/Controller/Plugin/MelisTemplatingPlugin.php |
| Site démo de référence | vendor/melisplatform/melis-demo-cms/ |