Documentación

Cómo crear un complemento

Amplía Linsei con tu propio código (sin tocar el núcleo) usando el sistema de hooks. Guía completa con un ejemplo que funciona.

1. Qué es un complemento

Un complemento es una carpeta dentro de plugins/ con un archivo plugin.php. Linsei lo carga solo al arrancar. Tu código se «engancha» a puntos concretos del programa (los hooks) para añadir funciones, sin modificar el núcleo. Así tu complemento sobrevive a las actualizaciones de Linsei.

plugins/ └─ mi-complemento/ └─ plugin.php

2. Estructura mínima

Todo plugin.php empieza con esta línea de seguridad (evita que se ejecute si se abre directamente):

<?php if(!defined("PL_APP")){http_response_code(403);exit;} /* Complemento: Mi primer complemento */ pl_add_action('dashboard_after', function ($isAdmin) { echo '<div class="card">¡Hola desde mi complemento!</div>'; });

Copia esa carpeta en plugins/ y, al recargar el panel, verás tu tarjeta. Eso es todo: ya tienes un complemento.

3. Acciones y filtros

Hay dos formas de engancharse:

  • Acciones (pl_add_action): ejecutan tu código en un momento dado (por ejemplo, pintar algo en el panel).
  • Filtros (pl_add_filter): reciben un valor, lo transforman y lo devuelven (por ejemplo, cambiar la URL de destino).
// Acción: hacer algo pl_add_action('link_created', function ($slug, $url) { // p. ej. avisar a un webhook }); // Filtro: transformar un valor (devuélvelo siempre) pl_add_filter('link_destination', function ($url) { return $url; // aquí podrías modificar la URL });

4. Hooks disponibles

HookTipoCuándoArgumentos
initacciónen cada petición-
admin_menuacciónal pintar el menú lateral$user
dashboard_afteracciónal final del panel de inicio$isAdmin
links_toolbaracciónbarra de botones de Enlaces-
link_form_fieldsacciónen el formulario de enlace$link
link_row_actionsacciónacciones de cada fila$link
help_afteracciónal final de Ayuda-
link_createdacciónal crear un enlace$slug, $url
link_savedacciónal guardar (crear/editar)$id, $post
link_clickedacciónen cada clic$link
link_destinationfiltrotransforma el destino al acortar$url
link_redirectfiltrodecide la redirección$decision, $link, $ctx
redirect_interstitialfiltroHTML antes de redirigir$html, $link, $target, $ctx
Página propia en el panel: con pl_add_plugin_menu(título, url, icono, ruta) añades una entrada al menú, y en init respondes a esa ruta. Los iconos son de Bootstrap Icons.

5. Ejemplo completo

Este complemento pinta cada enlace de la lista según sus clics: rojo si tiene pocas visitas, ámbar si va regular y verde si tiene muchas. Ajusta $pocas y $muchas a tu gusto:

<?php if(!defined("PL_APP")){http_response_code(403);exit;} /* Complemento: Semáforo de visitas */ pl_add_action('link_row_actions', function ($link) { $clics = (int)($link['click_count'] ?? 0); $pocas = 10; // menos de 10 clics: rojo $muchas = 100; // más de 100 clics: verde if ($clics < $pocas) { $color = '#dc2626'; } // rojo elseif ($clics > $muchas) { $color = '#16a34a'; } // verde else { $color = '#f59e0b'; } // ámbar echo '<span style="background:' . $color . ';color:#fff;' . 'border-radius:999px;padding:1px 8px;font-size:.75rem">' . $clics . '</span>'; });

Que los umbrales se pongan desde el panel

Para no dejar los números fijos, léelos del almacén de ajustes (el mismo que usa el core para el SMTP) con pl_app_setting() y dale al complemento una página propia donde el administrador los cambie:

<?php if(!defined("PL_APP")){http_response_code(403);exit;} /* Complemento: semáforo configurable */ // 1) En el semáforo, lee los umbrales del almacén (con valores por defecto) $pocas = (int) pl_app_setting('semaforo_pocas', 10); $muchas = (int) pl_app_setting('semaforo_muchas', 100); // 2) En la página del complemento, guarda lo que envíe el administrador if (($_POST['guardar'] ?? '') !== '') { pl_app_settings_save([ 'semaforo_pocas' => (int)($_POST['pocas'] ?? 10), 'semaforo_muchas' => (int)($_POST['muchas'] ?? 100), ]); } // 3) Añade su entrada al menú del panel (solo administrador) pl_add_plugin_menu('Semáforo', '/admin/semaforo', 'bi-sliders', '/admin/semaforo');
Dónde viven los valores: en data/settings.json, vía pl_app_setting() y pl_app_settings_save() (el mismo almacén que el SMTP del core). Así el administrador cambia los umbrales sin tocar el código.
Usa un prefijo propio en tus funciones (p. ej. pl_mi_) para no chocar con otros complementos.

6. Empaquetar y compartir

Cuando funcione, comprime la carpeta de tu complemento en un .zip y súbelo desde el panel:

  1. Entra en Complementos.
  2. Pulsa «Subir complemento» (arriba a la derecha).
  3. Elige tu .zip y se instala al momento.
Un complemento ejecuta código en tu servidor: sube solo los de confianza. Solo el administrador puede subirlos.