Skip to content

MelisCmsBlog

Système de blog pour les sites Melis, avec gestion des articles en back-office et trois plugins d'affichage front office. Package melisplatform/melis-cms-blog.

Présentation

MelisCmsBlog fournit un outil Blog dans le back-office permettant aux éditeurs de créer et gérer des articles multilingues (titres, sous-titre, paragraphes en texte riche, images, documents, planification de publication/dépublication, un slider optionnel, ainsi qu'une URL SEO et des méta). Les articles sont exposés en front office via trois plugins de templating prêts à l'emploi : un teaser des derniers articles, une liste d'articles paginée et filtrable, et une vue de détail d'un article unique. Les URLs SEO-friendly, les balises méta par article et les redirections 301 automatiques vers l'URL canonique sont gérées par des écouteurs d'événements dédiés.

Activation

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

php
return [
    'MelisCmsBlog',
];

Nécessite melis-core et melis-cms (^5.2), PHP ^8.1|^8.3. Les intégrations optionnelles s'activent lorsque MelisCmsComments, MelisCmsSlider, MelisSmallBusiness ou MelisCmsUserAccount sont également installés.

Services principaux

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

Alias de serviceRôle
MelisCmsBlogServiceService principal CRUD/requêtes. Lecture, création, mise à jour et suppression d'articles ; requêtes par site, langue, plage de dates, statut, auteur, catégorie. Chaque méthode déclenche des événements *_start / *_end via MelisEngineGeneralService.

Alias des passerelles de tables : MelisCmsBlogTable, MelisCmsBlogTextsTable, MelisCmsBlogCategoryTable.

Back-office

L'outil Blog est accessible depuis le menu gauche sous MelisCms (icône fa-rss, melisKey meliscmsblog_left_menu). Il s'ouvre sur un DataTable filtrable des articles (ID, Statut, Titre, Créé, Publié, Dépublié, Site) avec des actions d'information, suppression et workflow par ligne. L'éditeur d'article est organisé en onglets :

OngletContenu
PropriétésDates de publication / dépublication, affectation de site, bascule de statut ; optionnellement : Slider, auteur via User Account, validation des commentaires, bouton Workflow
MédiasJusqu'à 3 images et 3 pièces jointes
TextesTitre, sous-titre et paragraphes en texte riche par langue ; champs URL SEO et méta
AperçuPrévisualisation en iframe de l'article sauvegardé
CommentairesInjecté par MelisCmsComments lorsqu'installé — liste des commentaires et validation

L'onglet Commentaires et le commutateur valider les commentaires sont injectés via config/comments.config.php lorsque MelisCmsComments est présent. Les actions Workflow (MelisSmallBusiness) apparaissent dans la ligne de liste et l'en-tête de l'éditeur lorsque ce module est installé.

Front office

Trois plugins de templating étendent MelisTemplatingPlugin, chacun disposant d'un plugin contrôleur et d'un fichier de configuration sous config/plugins/. Tous lisent l'identifiant de l'article actif depuis le paramètre de requête ?blogId.

Classe du pluginClé de configVueOnglets de config
MelisCmsBlogLatestBlogPluginMelisCmsBlogLatestBlogMelisCmsBlog/latest-blogPropriétés, Filtres
MelisCmsBlogListBlogPluginMelisCmsBlogListBlogMelisCmsBlog/blog-listPropriétés, Pagination, Filtres
MelisCmsBlogShowBlogPluginMelisCmsBlogShowBlogMelisCmsBlog/blog-detailsPropriétés

Paramètres de configuration des plugins : template_path, site_id, pageIdBlog (lien vers la page de détail), column, order, limit, date_min, date_max, search ; plus nbPerPage / nbPageBeforeAfter (liste Blog uniquement). Le plugin liste Blog filtre également par ?category et ?authorId. Le plugin détail Blog retombe sur l'article publié le plus récent lorsqu'aucun blogId n'est présent dans la requête, et supporte le mode prévisualisation (renderMode === 'previewtab').

Colonnes de tri disponibles : cblog_id, cblog_title, cblog_publish_date, cblog_creation_date.

Routage SEO

Les articles sont servis via une page de type BLOG_DETAIL portant le plugin détail Blog, à l'cblog_seo_url de l'article. Quatre écouteurs implémentent le pipeline SEO complet :

ÉcouteurÉvénementRôle
MelisCmsBlogSEOReformatToRoutePageUrlListenerEVENT_ROUTECorrespond à l'URL SEO et construit une route vers la page BLOG_DETAIL
MelisBlogSEODispatchRouterRegularUrlListenerEVENT_DISPATCHRedirige en 301 une URL non canonique vers l'cblog_seo_url de l'article
MelisCmsBlogRedirect301Listenermeliscmsblog_redirect_pageDéfinit les méta SEO de la page à partir des champs méta de l'article
MelisCmsBlogSEOMetaPageListenerEVENT_FINISHRéécrit le <title> / <meta description> rendu avec les méta SEO de l'article

MelisCmsBlogPreviewTypeListener enregistre le type de page BLOG_DETAIL dans le formulaire de propriétés de page (événement modify_page_properties_form_config).

Tables de base de données

Structure de base dans install/sql/setup_structure.sql ; migrations dans install/dbdeploy/.

TableContenu
melis_cms_blogLigne principale de l'article : statut, dates de publication/dépublication, id du site, image1-3, documents1-3, id du slider, catégorie
melis_cms_blog_textsTextes par langue : titre, sous-titre, paragraphes 1-4, id de langue, URL SEO, titre/description méta SEO, compte auteur

Exemple

php
$blog = $this->getServiceManager()->get('MelisCmsBlogService');

// Latest 10 published posts for site 1, newest first:
$list = $blog->getBlogList([
    'siteId'   => 1,
    'langId'   => 1,
    'limit'    => 10,
    'orderBy'  => 'cblog_publish_date',
    'orderDir' => 'DESC',
]);

// Fetch one post (with its texts for a given language):
$post = $blog->getBlogById($blogId, $langId);
$txt  = $blog->getPostText($blogId);

// Create / update / delete:
$id = $blog->saveBlog(['cblog_site_id' => 1, 'cblog_status' => 1, ...], $blogId); // $blogId null → create
$blog->deleteBlogById($blogId);  // also removes its texts

// Utility:
$pages  = $blog->getBlogDetailsPagesBySite($siteId);       // BLOG_DETAIL-type pages for a site
$isDupe = $blog->checkSeoUrlDuplication($seoUrl, $blogId); // SEO URL uniqueness check
$slug   = $blog->cleanURL($title);                         // slugify (handles accents)

// Posts by a front-account author:
$posts  = $blog->getBlogListByAuthorId($authorId);

Autres écouteurs

ÉcouteurÉvénementRôle
MelisCmsBlogSliderDeletedListenermeliscmsslider_delete_slider_endEfface un slider supprimé des articles (cblog_slider_id)
MelisCmsBlogGdprAutoDeleteActionDeleteListenermelis_cms_user_account_gdpr_auto_delete_action_deleteRGPD : met à null cblog_author_account pour un compte utilisateur supprimé
MelisCmsBlogServiceMicroServiceListenermelis_core_microservice_amend_dataConvertit les chemins d'images en URLs absolues dans les résultats de getBlogList pour la sortie API/microservice
SiteMenuBlogDataListenerMelisFrontMenuPlugin_melistemplating_plugin_endInjecte les articles (regroupés par mois/année) dans le plugin de menu front
MelisCmsBlogFlashMessengerListenermeliscmsblog_delete_blog_end, meliscmsblog_save_blog_*_endRetours flash-messenger pour les actions du blog

Fichiers clés

ÉlémentChemin
Configuration du module (services, passerelles, plugins, MelisCmsBlogSelect)vendor/melisplatform/melis-cms-blog/config/module.config.php
Arbre de l'outil back-office et onglets de l'éditeurvendor/melisplatform/melis-cms-blog/config/app.interface.php
Configuration du DataTable de la listevendor/melisplatform/melis-cms-blog/config/app.tools.php
Injection de l'onglet commentairesvendor/melisplatform/melis-cms-blog/config/comments.config.php
Configurations des pluginsvendor/melisplatform/melis-cms-blog/config/plugins/
Service principalvendor/melisplatform/melis-cms-blog/src/Service/MelisCmsBlogService.php
Contrôleurs (liste, éditeur, front)vendor/melisplatform/melis-cms-blog/src/Controller/
Plugins frontvendor/melisplatform/melis-cms-blog/src/Controller/Plugin/
Écouteurs (SEO, RGPD, slider, menu, flash)vendor/melisplatform/melis-cms-blog/src/Listener/
Passerelles de tablesvendor/melisplatform/melis-cms-blog/src/Model/Tables/
SQL d'installationvendor/melisplatform/melis-cms-blog/install/sql/setup_structure.sql
Migrations BDDvendor/melisplatform/melis-cms-blog/install/dbdeploy/

Voir aussi : melis-cms, melis-front, melis-engine, melis-core, melis-cms-slider, melis-small-business