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.

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

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

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

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/