Skip to content

Plugins : templating & dashboard

Melis a deux types de plugins, et ce sont deux choses différentes :

  • Plugins de templating — des blocs de contenu réutilisables déposés dans une zone MelisDragDropZone d'une page, sur le front office (un slider, une liste de produits, un formulaire de contact).
  • Plugins de dashboard — des widgets affichés sur le dashboard du backoffice.

Les deux disposent d'un scaffolder GUI (melis-templating-plugin-creator, melis-dashboard-plugin-creator) — utilisez-le pour générer le boilerplate, puis lisez la suite pour comprendre et personnaliser. Dans Melis v6, ces scaffolders sont des assistants nativement React dans le backoffice /melis-react (chacun conserve un bascule New / Old vers l'outil classique en iframe). Le framework, l'ensemble de modules et le PHP généré sont inchangés — seule l'UI que vous pilotez est désormais en React.

Plugins de templating (front office)

Un plugin de templating étend MelisEngine\Controller\Plugin\MelisTemplatingPlugin et implémente :

MéthodeRôle
front() (requis)Renvoie le tableau de variables passé au .phtml front du plugin.
back()Rend l'aperçu + l'éditeur backoffice (un défaut raisonnable est fourni).
createOptionsForms()Construit les onglets de formulaire backoffice depuis la config.
loadDbXmlToPluginConfig() / savePluginConfigToXml($params)Décode/encode les paramètres enregistrés du plugin (stockés en XML dans le contenu de la page).

Le constructeur relie le plugin à sa config :

php
use MelisEngine\Controller\Plugin\MelisTemplatingPlugin;

class MonBlocPlugin extends MelisTemplatingPlugin
{
    public function __construct($updatesPluginConfig = [])
    {
        $this->configPluginKey = 'mymodule';      // clé dans le fichier de config du plugin
        $this->pluginXmlDbKey  = 'monBloc';       // nom de l'élément XML enregistré dans la page
        parent::__construct($updatesPluginConfig);
    }

    public function front()
    {
        $id = $this->pluginFrontConfig['someParam'] ?? null;
        // … récupérer des données via un service …
        return ['pluginId' => $this->pluginFrontConfig['id'], 'items' => $items];
    }
}

Le fichier de config du plugin

Chaque plugin fournit un config/plugins/<Name>.config.php avec une section front (config de rendu : template_path, un id, des params custom, css/js) et une section melis (UI backoffice : nom, thumbnail, et les onglets/champs modal_form). Référence : vendor/melisplatform/melis-cms-slider/config/plugins/MelisCmsSliderShowSliderPlugin.config.php.

Enregistrez le plugin comme controller plugin dans module.config.php :

php
'controller_plugins' => ['invokables' => [
    'MonBlocPlugin' => \MyModule\Controller\Plugin\MonBlocPlugin::class,
]],

Comment il arrive sur une page

Un éditeur glisse le plugin dans une MelisDragDropZone (voir Construire un site). Les paramètres configurés sont sérialisés en XML dans le contenu de la page ; au rendu, le moteur front appelle le front() du plugin et rend son .phtml. MelisCmsSlider et MelisCmsNews sont les exemples canoniques.

Structure minimale

MyModule/
├── config/plugins/MonBlocPlugin.config.php
├── src/Controller/Plugin/MonBlocPlugin.php
└── view/my-module/mon-bloc.phtml             # template front
    view/my-module/mon-bloc/melis/form.phtml  # formulaire backoffice

Le scaffolder dans /melis-react

Ouvrez Templating Plugin Creator depuis son entrée dans le menu de gauche — il s'ouvre en onglet supérieur avec une barre à 6 étapes et le bascule New / Old en haut à droite (à côté de Restart). La vue New est un véritable assistant React ; l'ensemble est persistent, vous pouvez donc quitter l'onglet et y revenir sans perdre votre étape ni vos saisies. (Tout le vrai travail reste côté serveur — la validation réutilise les formulaires Laminas existants et la génération appelle MelisTemplatingPluginCreatorService, qui écrit les mêmes fichiers PHP/vue/config/langue qu'auparavant.)

Templating Plugin Creator — Étape 1 (Nom du plugin + destination)

Les six étapes :

  1. Plugin — nom du plugin + destination (New module, ou un Existing site module que vous choisissez dans une liste déroulante). Le serveur calcule le template_path imposé à partir de ce choix.
  2. Menu Texts & Display — titre/description par langue affichés dans la liste des plugins de l'éditeur de page, plus le thumbnail requis (GIF/JPG/PNG, ~190×100, ≤500 ko).
  3. Main Properties — les champs éditables du plugin (1–25, template_path inclus). Le champ 1 est le template_path verrouillé ; les champs 2..N reçoivent chacun un nom technique, un type d'affichage (text, Dropdown, DatePicker, NumericInput, Switch, Textarea, texte enrichi…), un indicateur « requis » et une valeur par défaut.
  4. Properties' Translation — un label + une infobulle par propriété, par langue (plus un label par option de Dropdown).
  5. Summary — un récapitulatif en lecture seule de tout ce qui précède ; rien n'est écrit ici.
  6. Finalization — choisissez un Site sur lequel activer (optionnel), laissez Activate plugin after creation activé, puis Finish and create the plugin. L'activation déclenche un rechargement de la plateforme (l'assistant compte à rebours et recharge).

Templating Plugin Creator — Étape 6 (Finalisation)

Bascule New / Old. New est l'assistant React (par défaut) ; Old rend l'outil jQuery classique en iframe. Passer sur Old réinitialise le brouillon de session partagé, l'assistant vous avertit donc au préalable.

Plugins de dashboard (backoffice)

Un widget de dashboard étend MelisCore\Controller\DashboardPlugins\MelisCoreDashboardTemplatingPlugin. Il définit son module dans le constructeur et expose une méthode d'action qui renvoie un ViewModel avec setTemplate() :

php
use MelisCore\Controller\DashboardPlugins\MelisCoreDashboardTemplatingPlugin;
use Laminas\View\Model\ViewModel;

class MonWidgetPlugin extends MelisCoreDashboardTemplatingPlugin
{
    public function __construct()
    {
        $this->pluginModule = 'mymodule';
        parent::__construct();
    }

    public function monwidget()   // l'action référencée par la config du plugin
    {
        $view = new ViewModel();
        $view->setTemplate('my-module/dashboard-plugin/mon-widget');
        return $view;
    }
}

Le widget est déclaré sous l'interface melis_dashboardplugin (nom, icône, thumbnail, grille width/height, et un forward vers module / plugin / function), et enregistré dans module.config.php sous controller_plugins. Référence : vendor/melisplatform/melis-core/src/Controller/DashboardPlugins/MelisCoreDashboardBubbleNewsMelisPlugin.php.

Structure minimale

MyModule/
├── config/module.config.php                 # déclare le plugin dashboard + l'enregistre
├── src/Controller/DashboardPlugins/MonWidgetPlugin.php
└── view/my-module/dashboard-plugin/mon-widget.phtml

Le scaffolder dans /melis-react

Ouvrez Dashboard Plugin Creator depuis son entrée dans le menu de gauche — un onglet supérieur avec une barre à 5 étapes et le même bascule New / Old. Comme son homologue templating, c'est un assistant React persistent adossé à MelisDashboardPluginCreatorService, si bien que le PHP généré est identique à la sortie de l'outil classique.

Dashboard Plugin Creator — Étape 1 (nom, type de vue, destination)

Les cinq étapes :

  1. Plugin — nom, View type (carte Single ou Multi-tabs, 2–25 onglets) et destination (New module ou une liste déroulante Existing module).
  2. Menu Texts & Display — titre/description de menu par langue + le thumbnail requis.
  3. Dashboard Texts & Display — le titre de carte par langue et l'icône du plugin (et, pour les plugins multi-onglets, une icône par onglet).
  4. Summary — récapitulatif en lecture seule.
  5. Finalization — laissez Activate plugin after creation activé, puis Finish and create the plugin ; l'activation recharge la plateforme.

Dashboard Plugin Creator — Étape 3 (titre de carte + icônes)

Templating vs dashboard — en un coup d'œil

Plugin de templatingPlugin de dashboard
Classe de baseMelisTemplatingPluginMelisCoreDashboardTemplatingPlugin
Se trouve danssrc/Controller/Plugin/src/Controller/DashboardPlugins/
Méthode cœurfront() → tableau de variablesune action → ViewModel
Affiché surles pages front (zones drag-drop)le dashboard backoffice
Config enregistréeXML dans le contenu de pageconfig d'interface du dashboard
Assistant scaffolder6 étapes (melis-templating-plugin-creator)5 étapes (melis-dashboard-plugin-creator)

Fichiers clés

SujetChemin
Classe de base templatingvendor/melisplatform/melis-engine/src/Controller/Plugin/MelisTemplatingPlugin.php
Exemple templatingvendor/melisplatform/melis-cms-slider/src/Controller/Plugin/MelisCmsSliderShowSliderPlugin.php
Classe de base dashboardvendor/melisplatform/melis-core/src/Controller/DashboardPlugins/MelisCoreDashboardTemplatingPlugin.php
Exemple dashboardvendor/melisplatform/melis-core/src/Controller/DashboardPlugins/MelisCoreDashboardBubbleNewsMelisPlugin.php
Scaffoldersvendor/melisplatform/melis-templating-plugin-creator/, vendor/melisplatform/melis-dashboard-plugin-creator/

Pour les pages de référence des modules, voir melis-templating-plugin-creator et melis-dashboard-plugin-creator.