Skip to content

MelisEngine

Fondation de données CMS partagée — modèle de page, sites, langues, classe de base des plugins de templating et cache de rendu. Paquet melisplatform/melis-engine.

Présentation

MelisEngine détient l'intégralité du modèle de base de données CMS (pages, arbre de pages, sites, templates, langues, domaines, SEO, styles) et l'expose via des table gateways, des services et un cache multi-niveaux. MelisFront (rendu front-end) et MelisCms (édition back-office) lisent et écrivent exclusivement via MelisEngine — aucun des deux ne possède de tables. MelisEngine définit également MelisTemplatingPlugin, la classe de base abstraite que tout plugin de contenu de la plateforme étend.

Activation

MelisEngine est chargé automatiquement en tant que dépendance. L'ordre de chargement dans config/melis.module.load.php est :

php
// config/melis.module.load.php
return [
    'MelisCore',
    'MelisFront',
    'MelisEngine',   // requires melis-core + melis-front
    'MelisCms',
];

Dépendances Composer : melisplatform/melis-core, melisplatform/melis-front, laminas/laminas-cache (adaptateurs filesystem et memory).

Services principaux

Enregistrés comme alias service_manager dans config/module.config.php :

Alias de serviceRôle
MelisEnginePage / MelisPageServiceRésoudre une page par id et mode (published / saved) : getDatasPage($idPage, $mode) — retourne l'arbre de page hydraté, les données de page, le SEO, le template et les objets de style
MelisEngineTree / MelisTreeServiceNavigation dans l'arbre de pages : getPageChildren(), getPageFather(), getPageBreadcrumb(), getPageLink(), recherche
MelisEngineTemplateServiceRecherche de template : getTemplate($tplId)
MelisEngineSiteServiceCatalogue des sites
MelisEngineSiteDomainServiceRésolution domaine → site : getSiteByDomain()
MelisEngineLang / MelisEngineLangServiceLangues : langues disponibles, locale ↔ id, langue du site
MelisEngineSEOServiceDonnées SEO par page : getSEOById()
MelisEnginePageDefaultUrlsServiceRecherches d'URL pré-calculées / canoniques
MelisEngineStyle / MelisEngineStyleServiceStyles du site et CSS par page
MelisEngineCacheSystemOrchestrateur de cache : getCacheByKey(), setCacheByKey(), deleteCacheByPrefix()
MelisSearchIndex de pages plein texte (style Lucene) utilisé par la recherche front-end
MelisEngineSendMailUtilitaire d'envoi d'e-mail
MelisGdprService / MelisGdprAutoDeleteServiceTextes de la bannière RGPD et framework de suppression automatique
MelisEngineComposerOpérations Composer / dépendances

Tous les services qui étendent MelisGeneralService déclenchent des événements *_start / *_end (ex. melisengine_service_get_available_languages_start / _end) que d'autres modules peuvent intercepter.

Back-office

MelisEngine ne dispose d'aucun outil destiné à l'utilisateur final. Il enregistre deux fabriques d'éléments de formulaire utilisées dans l'ensemble du back-office :

FabriqueUtilité
MelisEnginePluginTemplateSelectÉlément de sélection de template pour les formulaires de plugins
MelisEngineSiteSelectÉlément de sélection de site pour les formulaires de plugins

Des contrôleurs de configuration et de maintenance (MelisSetup*) sont également présents mais sont invoqués par l'installateur, et non par les éditeurs.

Front office

La classe de base de chaque plugin de contenu réside ici :

ÉlémentDescription
MelisEngine\Controller\Plugin\MelisTemplatingPluginBase abstraite pour tous les plugins de contenu. Définit front() (rendu live, abstrait), back() (vue conteneur/édition back-office), persistance XML de configuration (loadDbXmlToPluginConfig() / savePluginConfigToXml()), chargement GET/POST, mode prévisualisation et largeur responsive.

Chaque plugin de contenu de la plateforme (News, Slider, Menu, Breadcrumb, …) sous-classe cette classe. Implémentez front() pour la sortie live ; la classe de base gère back() automatiquement.

Deux listeners de micro-service interceptent melis_core_microservice_amend_data pour exposer les méthodes d'arbre et de page (getPageChildren, getPageFather, getDomainByPageId, getDatasPage) via la couche micro-service de la plateforme.

Tables de base de données

MelisEngine est la source de vérité unique pour le schéma CMS (install/sql/setup_structure.sql + deltas install/dbdeploy/) :

TableContenu
melis_cms_page_treeHiérarchie de pages (tree_father_page_id, ordre)
melis_cms_page_publishedVersion publiée (live) de chaque page
melis_cms_page_savedVersion sauvegardée / brouillon (éditée dans le back-office)
melis_cms_page_langLiens page ↔ langue
melis_cms_langLangues / locales CMS
melis_cms_siteSites (racine de l'arbre de pages)
melis_cms_templateTemplates (layout / contrôleur / action ou chemin PHP)
melis_cms_page_seoSEO par page (URL, redirection 301, meta title/description, canonical)
melis_cms_site_domainDomaines de site par environnement
melis_cms_site_301 / melis_cms_site_404Redirections 301 globales / mapping 404 par site
melis_cms_page_default_urlsURLs de page pré-calculées (table de cache)
melis_cms_style / melis_cms_page_styleStyles CSS et liens page ↔ style
melis_cms_platform_idsPlages d'allocation d'id de page par environnement
melis_cms_site_config / _home / _langsConfig du site, page d'accueil par langue, langues actives
melis_cms_site_robotrobots.txt par domaine
melis_cms_mini_tpl_*Catégories, templates et indicateurs de mini-templates
melis_cms_gdpr_textsTextes de la bannière RGPD par site / langue
melis_site_translation / _textChaînes de traduction globales au site

Table gateways

Chaque table est encapsulée par une passerelle MelisEngineTable* enregistrée dans le service manager (ex. MelisEngineTablePageTree, MelisEngineTablePagePublished, MelisEngineTablePageSeo). Les autres modules doivent toujours utiliser ces passerelles — jamais de SQL brut. La passerelle de base fournit getEntryById(), getEntryByField(), save(), deleteById(), fetchAll().

Exemple

Lire une page et naviguer dans l'arbre :

php
$pageSvc = $sm->get('MelisEnginePage');
$page    = $pageSvc->getDatasPage($idPage);            // 'published' (live) by default
$draft   = $pageSvc->getDatasPage($idPage, 'saved');   // working draft

$tree       = $sm->get('MelisEngineTree');
$children   = $tree->getPageChildren($idPage, 1);       // 1 = published only
$breadcrumb = $tree->getPageBreadcrumb($idPage);
$url        = $tree->getPageLink($idPage, true);        // true = absolute URL

Lire/écrire via une table gateway (jamais de SQL brut) :

php
$seoTable = $sm->get('MelisEngineTablePageSeo');
$seo      = $seoTable->getEntryByField('plang_page_id', $idPage)->current();
$seoTable->save(['seo_meta_title' => 'New title'], $existingSeoId);  // upsert

Mettre en cache un résultat calculé :

php
$cache = $sm->get('MelisEngineCacheSystem');
$cache->setCacheByKey('mykey', 'my_cache_config', $value);
$value = $cache->getCacheByKey('mykey', 'my_cache_config');
$cache->deleteCacheByPrefix('page_' . $idPage, 'meliscms_page');   // invalidate a page

Écouter un événement de service :

php
$sharedEvents->attach('MelisEngine', 'melisengine_page_getdatas_end', function ($e) {
    $p = $e->getParams();   // includes page id and 'results'
    // alter $p['results'] before it is returned
}, 50);

Construire un plugin de contenu :

php
// Subclass MelisTemplatingPlugin, implement front() for live render.
// The base class handles back() (BO container), config XML persistence and preview.
class MyPlugin extends MelisEngine\Controller\Plugin\MelisTemplatingPlugin
{
    public function front(): string
    {
        return $this->getView()->render('my-module/plugin/my-plugin', $this->pluginConfig);
    }
}

Fichiers clés

ÉlémentChemin
Alias de services et passerelles, cachesvendor/melisplatform/melis-engine/config/module.config.php
Service de données de pagevendor/melisplatform/melis-engine/src/Service/MelisPageService.php
Service arbre / liensvendor/melisplatform/melis-engine/src/Service/MelisTreeService.php
Orchestrateur de cachevendor/melisplatform/melis-engine/src/Service/ (MelisEngineCacheSystem*)
Classe de base des plugins de templatingvendor/melisplatform/melis-engine/src/Controller/Plugin/MelisTemplatingPlugin.php
Table gatewaysvendor/melisplatform/melis-engine/src/Model/Tables/
Schéma + migrations deltavendor/melisplatform/melis-engine/install/sql/

Voir aussi : MelisFront · MelisCms · MelisCore