Wiki » Plugins » Fonctionnalités avancées
D'autres fonctionnalités que les plugins peuvent utiliser sont disponibles, mais pour les utiliser vous devrez tester et fouiller un peu les fichiers pour comprendre.
Le plugin peut être affiché en "plein écran", c'est à dire que seul le contenu de votre plugin sera affiché: ni en-tête, ni navbar, ni sidebar, etc..
Pour ce faire, rien de plus simple:
if (!defined('FULL_PAGE')) { define('FULL_PAGE', true); }
N'oubliez pas d'afficher un bouton pour retourner au site. Par exemple:
<a href="{ROOT}" class="btn btn-primary btn-lg" style="position: absolute; left: 10px; top: 10px;">« {@BACK}</a>
Vous pouvez aussi masquer la sidebar, pour avoir toute la largeur de la page. Même principe:
if (!defined('WIDE')) { define('WIDE', true); }
Les dépendances ont 2 utilités:
- Indiquer au CMS que vous avez besoin d'autre plugin pour fonctionner
- Inclure ces autres plugins si besoin avant le votre
Vous devez ajouter un block depend
dans la configuration de votre plugin. Ensuite, vous devez préciser si le plugin est requis pour que votre plugin fonctionne, c'est à dire que si le plugin dépendant n'est pas installé, le votre ne sera jamais exécuté et l'utilisateur sera invité à installer les plugins manquants.
Vous devez aussi préciser si le plugin doit être inclus, si oui alors le CMS inclura le fichier api.php
dans le dossier du plugin avant d'inclure votre plugin (fichier core.php
). De plus, lorsque votre plugin sera inclus, une variable $depend
sera créée pour indiquer si les dépendances existent (voir exemple plus bas).
Et enfin, il faut préciser la version du plugin, cela servira à déterminer si le plugin dépendant est compatible avec le votre.
D'ailleurs, si votre plugin propose une API, vous devez préciser la version minimum pour que votre plugin soit une dépendance dans la configuration avec plugin.api_compatible
.
Pour comprendre, prenons un exemple:
Le plugin "WebRequest", en version 2.0, propose une API pour exécuter des requêtes HTTP. Le plugin retourne un objet contenant la classe pour faire les requêtes:
De plus, le plugin WebRequest a changé le fonctionnement de son API dans la version 1.2, ainsi pour éviter que de vieux plugin utilise mal l'API, dans la configuration il faut préciser:
{ "plugin": { "name": "WebRequest", "type": "custom", "version": "2.0", "require": { "cms": "1.0.0" }, "api_compatible": "1.2" } }
Le plugin "MyWeather" récupère les données météo, pour cela il a besoin du plugin WebRequest et de son API. Ainsi dans sa config il indique:
{ "plugin": { "name": "MyWeather", "type": "page", "version": "1.3.2", "require": { "cms": "1.0.0" } }, "depend": { "WebRequest": { "required": true, "version": "1.4", "include": true } } }
Ainsi, lorsque le plugin MyWeather sera inclus, juste avant api.php
de WebRequest sera appelé. Vous pouvez récupérer ce que l'API a retourner dans la variable $depend
. Ainsi, le fichier core.php
de MyWeather pourra être construit comme ceci:
<?php defined('IN_ENV') or die; // Si le plugin WebRequest n'a pas été trouvé, $depend['WebRequest'] = false // Si le plugin WebRequest a bien été inclus, $depend['WebRequest'] = true // Si le plugin WebRequest a bien été inclus, et qu'en plus le plugin a retourné quelque chose, // (dans notre cas la classe WebRequest), alors $depend['WebRequest'] = ce qu'a retourné le plugin $api = $depend['WebRequest']; if ($api instanceof WebRequest) { // L'API a été trouvé, et l'objet est disponible } else { // L'API n'a pas été trouvé // Mais ça n'arrive que si "required" est à false // Car si une de vos dépendance est requise, et qu'elle n'a pas été trouvée, // votre plugin ne sera pas inclus }
Utiliser le système de dépendance permet d'être bien plus flexible, et permet d'indiquer clairement à l'utilisateur quel plugin est requis. Un autre moyen de récupérer des informations d'autres plugins, et d'utiliser le système d'événement.
Vous pouvez ajouter des pages dans le panel d'administration, ainsi seul le gérant du CMS peut voir/modifier ces informations.
Dans la configuration du CMS, ajoutez un block admin
. Vous pouvez alors préciser le titre de l'onglet, l'icône (parmi celles ci):
"admin": { "title": "SLIDER.ADMIN", "icon": "cloud", }
Vous pouvez aussi avoir des pages en sous menu, il suffit de les préciser:
"admin": { "title": "SLIDER.ADMIN_TITLE", "icon": "cloud", "pages": { "<slug de la page>": "<titre de la page>", "edit": "SLIDER.ADMIN_EDIT_TITLE" } },
Ensuite, il suffit de créer un dossier admin/
dans votre plugin, puis créez un fichier pour chaque page, et un fichier nommé "default.php" pour la page principale.
Ainsi, pour la configuration ci dessus, il faut créer ces fichiers:
Ensuite, pour comprendre comment utiliser les différentes fonctions, ouvrez les fichiers dans le dossier admin/page/users/
par exemple.
Page suivante: Publier mon plugin