Documentation

Créer une extension

Étendez Linsei avec votre propre code (sans toucher au cœur) grâce au système de hooks. Guide complet avec un exemple qui marche.

1. Qu'est-ce qu'une extension

Une extension est un dossier dans plugins/ avec un fichier plugin.php. Linsei la charge seule au démarrage. Votre code s'« accroche » à des points précis du programme (les hooks) pour ajouter des fonctions, sans modifier le cœur. Ainsi votre extension survit aux mises à jour de Linsei.

plugins/ └─ mon-extension/ └─ plugin.php

2. Structure minimale

Chaque plugin.php commence par cette ligne de sécurité (elle empêche l'exécution directe) :

<?php if(!defined("PL_APP")){http_response_code(403);exit;} /* Extension : Ma première extension */ pl_add_action('dashboard_after', function ($isAdmin) { echo '<div class="card">Bonjour depuis mon extension !</div>'; });

Copiez ce dossier dans plugins/ et, en rechargeant le panneau, vous verrez votre carte. C'est tout : vous avez une extension.

3. Actions et filtres

Deux façons de s'accrocher :

  • Actions (pl_add_action) : exécutent votre code à un moment donné (p. ex. afficher quelque chose dans le panneau).
  • Filtres (pl_add_filter) : reçoivent une valeur, la transforment et la renvoient (p. ex. changer l'URL de destination).
// Action : faire quelque chose pl_add_action('link_created', function ($slug, $url) { // p. ex. notifier un webhook }); // Filtre : transformer une valeur (toujours la renvoyer) pl_add_filter('link_destination', function ($url) { return $url; // ici vous pourriez modifier l'URL });

4. Hooks disponibles

HookTypeQuandArguments
initactionà chaque requête-
admin_menuactionau rendu du menu latéral$user
dashboard_afteractionà la fin du tableau de bord$isAdmin
links_toolbaractionbarre de boutons des Liens-
link_form_fieldsactiondans le formulaire de lien$link
link_row_actionsactionactions de chaque ligne$link
help_afteractionà la fin de l'Aide-
link_createdactionà la création d'un lien$slug, $url
link_savedactionà l'enregistrement$id, $post
link_clickedactionà chaque clic$link
link_destinationfiltretransforme la destination$url
link_redirectfiltredécide la redirection$decision, $link, $ctx
redirect_interstitialfiltreHTML avant de rediriger$html, $link, $target, $ctx
Votre propre page : avec pl_add_plugin_menu(titre, url, icône, route) vous ajoutez une entrée au menu, et dans init vous gérez cette route. Les icônes viennent de Bootstrap Icons.

5. Exemple complet

Cette extension colore chaque lien de la liste selon ses clics : rouge si peu de visites, ambre si moyen et vert si beaucoup. Ajustez $peu et $beaucoup :

<?php if(!defined("PL_APP")){http_response_code(403);exit;} /* Extension : Feu de visites */ pl_add_action('link_row_actions', function ($link) { $clics = (int)($link['click_count'] ?? 0); $peu = 10; // moins de 10 clics : rouge $beaucoup = 100; // plus de 100 clics : vert if ($clics < $peu) { $color = '#dc2626'; } // rouge elseif ($clics > $beaucoup) { $color = '#16a34a'; } // vert else { $color = '#f59e0b'; } // ambre echo '<span style="background:' . $color . ';color:#fff;' . 'border-radius:999px;padding:1px 8px;font-size:.75rem">' . $clics . '</span>'; });

Laisser l'administrateur régler les seuils

Pour ne pas coder les nombres en dur, lisez-les depuis le magasin de réglages (celui que le cœur utilise pour le SMTP) avec pl_app_setting() et donnez à l'extension sa propre page où l'administrateur les modifie :

<?php if(!defined("PL_APP")){http_response_code(403);exit;} /* Extension : feu tricolore configurable */ // 1) Dans le feu tricolore, lisez les seuils depuis le magasin (avec valeurs par défaut) $peu = (int) pl_app_setting('semaforo_peu', 10); $beaucoup = (int) pl_app_setting('semaforo_beaucoup', 100); // 2) Sur la page de l'extension, enregistrez ce que soumet l'administrateur if (($_POST['enregistrer'] ?? '') !== '') { pl_app_settings_save([ 'semaforo_peu' => (int)($_POST['peu'] ?? 10), 'semaforo_beaucoup' => (int)($_POST['beaucoup'] ?? 100), ]); } // 3) Ajoutez son entrée au menu du panneau (administrateur uniquement) pl_add_plugin_menu('Feu tricolore', '/admin/feu', 'bi-sliders', '/admin/feu');
Où vivent les valeurs : dans data/settings.json, via pl_app_setting() et pl_app_settings_save() (le même magasin que le SMTP du cœur). L'administrateur change les seuils sans toucher au code.
Utilisez votre propre préfixe dans vos fonctions (p. ex. pl_mon_) pour éviter les conflits.

6. Empaqueter et partager

Quand ça marche, compressez le dossier de votre extension en .zip et téléversez-le depuis le panneau :

  1. Allez dans Extensions.
  2. Cliquez sur « Téléverser un module » (en haut à droite).
  3. Choisissez votre .zip et il s'installe aussitôt.
Une extension exécute du code sur votre serveur : ne téléversez que celles de confiance. Seul l'administrateur peut le faire.