Skip to content

MelisFront

Le système de rendu front-office qui transforme une URL en page complète et alimente l'aperçu éditable en direct. Paquet melisplatform/melis-front.

Présentation

MelisFront est le runtime qui résout une adresse web en page Melis, exécute le pipeline de rendu (routage, SEO, plugins de templating, layout, cache, minification des assets) et délivre la réponse HTML au visiteur. Il alimente également l'aperçu éditable en direct dans le back-office (MelisCms) en restituant n'importe quelle page en mode melis. MelisFront ne possède aucune table de base de données — toutes les données de page/site/template/SEO sont lues depuis melis-engine, qui est la source de vérité unique.

MelisFront fait partie d'un trio étroitement couplé : melis-engine (couche de données), melis-front (rendu front), melis-cms (back-office). Les modifications ou questions concernant l'un de ces modules impliquent régulièrement les deux autres.

Activation

Ajouter dans config/melis.module.load.php :

php
return [
    'MelisFront',
];

Dépendance Melis déclarée : melisplatform/melis-core. À l'exécution, il consomme également les services de MelisEngine. Ordre de chargement : melis-coremelis-frontmelis-enginemelis-cms.

Services principaux

Alias de serviceRôle
MelisFrontHeadGère le <title>, la méta description, le canonical et injecte les assets CSS/JS des plugins.
MelisSiteConfigServiceLit la configuration par site à partir d'une clé, d'une page ou d'une langue — prend en charge la fusion fichier + base de données.
MelisSiteTranslationServiceRecherche et CRUD de clés/textes de traduction par site, mis en cache par site.
MelisTranslationServiceTraductions module/locale (chaînes back-office), mises en cache.
MinifyAssetsConstruit bundle.css / bundle.js par site en utilisant matthiasmullie/minify.
MelisFrontNavigationFabrique de navigation qui construit un arbre Laminas\Navigation à partir de l'arbre de pages du moteur.

Front office

Routage

La route front principale est un modèle Regex correspondant à .../id/{idpage} — distribué vers MelisFront\Controller\Index::index. Deux routes enfants l'étendent :

  • /renderMode/melis — mode édition back-office (utilisé par MelisCms pour restituer une page en vue de son édition).
  • /preview — aperçu de la version enregistrée (renderMode: melis, preview: true).

Routes spéciales : sitemap(.xml), /css/plugin-width.css, /melissearchindex/…, /melispluginrenderer (rendu AJAX d'un plugin seul), /minify-assets.

Pipeline de rendu (listeners)

Câblés dans src/Module.php sur EVENT_DISPATCH et EVENT_FINISH (~19 listeners au total) :

PhaseListeners
EVENT_LOAD_MODULES_POSTMelisFrontSEORouteListener (routes SEO depuis la base de données), MelisFrontSiteConfigListener, MelisFrontMiniTemplateConfigListener
EVENT_DISPATCHMelisFrontXSSParameterListener, MelisFrontHomePageRoutingListener / …HomePageIdOverrideListener, MelisFrontSEODispatchRouterRegularUrlListener (validation de page, 404/301, déclenche melisfront_site_dispatch_ready), MelisFront404To301Listener, MelisFront404CatcherListener
EVENT_FINISHMelisFrontPluginsToLayoutListener (CSS/JS des plugins), MelisFrontSEOMetaPageListener (titre/description/canonical), MelisFrontAttachCssListener (CSS de la page), MelisFrontLayoutListener (layout front ou layout BO + TinyMCE en mode melis), MelisFrontPageCacheListener, MelisFrontMinifiedAssetsCheckerListener

Plugins de templating (controller plugins)

Tous étendent MelisEngine\Controller\Plugin\MelisTemplatingPlugin. Enregistrés sous controller_plugins :

Alias du pluginBloc
MelisFrontTagHtmlPluginZone HTML / texte riche éditable en place.
MelisFrontTagTextareaPluginZone de texte brut.
MelisFrontTagMediaPluginImage / fichier depuis la médiathèque.
MelisFrontMenuPluginMenu de navigation construit à partir de l'arbre des pages.
MelisFrontBreadcrumbPluginFil d'Ariane (Accueil › … › Page courante).
MelisFrontShowListFromFolderPluginListe automatiquement les sous-pages d'un dossier sélectionné.
MelisFrontDragDropZonePluginConteneur de layout (zone de dépôt pour d'autres plugins).
MelisFrontBlockSectionPluginConteneur bloc/section réutilisable.
MelisFrontGenericContentPluginBloc de contenu générique.
MelisFrontGdprBannerPluginBandeau de consentement aux cookies / RGPD.
MelisFrontGdprRevalidationPluginRedemande le consentement lors d'une modification de la politique RGPD.
MelisFrontSearchResultsPluginAffiche les résultats de la recherche interne du site.
MiniTemplatePluginInsère un mini-template pré-construit en un clic.

View helpers

Utilisés dans les templates .phtml d'un site (enregistrés sous view_helpers) :

Alias du helperUsage
MelisTagDéclare une zone éditable (HTML ou média) que les éditeurs remplissent en place.
MelisLinkGénère l'URL SEO-friendly d'une page (reste correct si la page est déplacée).
MelisMenuAffiche un menu de navigation à partir de l'arbre des pages.
MelisDragDropZoneAffiche une zone de glisser-déposer hébergeant d'autres plugins.
siteTranslateRetourne une chaîne de traduction du site par clé.
SiteConfigLit une valeur de configuration du site.

Des helpers de langue/accueil pour les liens vers les versions linguistiques et le lien vers la page d'accueil sont également disponibles.

MelisFrontNavigation (src/Navigation/Factory/) étend la fabrique de navigation Laminas pour construire un objet Laminas\Navigation à partir de l'arbre de pages du moteur (MelisEnginePage / MelisEngineTree), que les helpers Menu et Breadcrumb utilisent pour le rendu.

Minification des assets

MinifyAssetsService (basé sur matthiasmullie/minify) construit bundle.css / bundle.js par site. MelisFrontMinifiedAssetsCheckerListener les injecte (avec cache-busting) lorsqu'ils sont présents. Déclencher une construction via la route /minify-assets.

Tables de base de données

MelisFront ne possède aucune table de base de données. Toutes les données de page, site, langue, SEO et traduction appartiennent à melis-engine et melis-cms.

Exemple

Usage typique dans un template .phtml de site et appels de services PHP :

php
// Inside a site page template (.phtml)
<?= $this->MelisMenu($idPage); ?>                         // navigation menu from the page tree
<a href="<?= $this->MelisLink($targetPageId); ?>"></a>  // SEO-friendly page link
<?= $this->MelisTag($idPage, 'zone_main', 'html'); ?>    // editable HTML zone
<?= $this->siteTranslate('btn_send'); ?>                  // site translation string
<?= $this->SiteConfig('contact_email'); ?>               // site config value
php
// Reading site config and translations in PHP
$siteConfig = $serviceManager->get('MelisSiteConfigService');
$email = $siteConfig->getSiteConfigByKey('contact_email', $siteId);

$tr = $serviceManager->get('MelisSiteTranslationService')
        ->getEntryByTextAndSiteId('btn_send', $siteId, $langId);
php
// Hooking the render pipeline (after page validation, before render)
$sharedEvents->attach('MelisFront', 'melisfront_site_dispatch_ready', function ($e) {
    $params = $e->getParams(); // page id, site, renderMode…
    // e.g. force a redirect, add data to the layout, A/B-test…
}, 50);

Fichiers clés

ÉlémentChemin
Bootstrap du module + câblage des listenersvendor/melisplatform/melis-front/src/Module.php
Routes, services, plugins, helpers, cachesvendor/melisplatform/melis-front/config/module.config.php
Listeners du pipeline de renduvendor/melisplatform/melis-front/src/Listener/
Services (Head, SiteConfig, Translations, Minify)vendor/melisplatform/melis-front/src/Service/
Plugins de templating (blocs de contenu)vendor/melisplatform/melis-front/src/Controller/Plugin/
View helpersvendor/melisplatform/melis-front/src/View/Helper/
Fabrique de navigationvendor/melisplatform/melis-front/src/Navigation/Factory/
Contrôleurs frontvendor/melisplatform/melis-front/src/Controller/

Voir aussi : melis-engine, melis-cms, melis-core