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.
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.phpTodo 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.
Hay dos formas de engancharse:
pl_add_action): ejecutan tu código en un momento dado (por ejemplo, pintar algo en el panel).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
});| Hook | Tipo | Cuándo | Argumentos |
|---|---|---|---|
init | acción | en cada petición | - |
admin_menu | acción | al pintar el menú lateral | $user |
dashboard_after | acción | al final del panel de inicio | $isAdmin |
links_toolbar | acción | barra de botones de Enlaces | - |
link_form_fields | acción | en el formulario de enlace | $link |
link_row_actions | acción | acciones de cada fila | $link |
help_after | acción | al final de Ayuda | - |
link_created | acción | al crear un enlace | $slug, $url |
link_saved | acción | al guardar (crear/editar) | $id, $post |
link_clicked | acción | en cada clic | $link |
link_destination | filtro | transforma el destino al acortar | $url |
link_redirect | filtro | decide la redirección | $decision, $link, $ctx |
redirect_interstitial | filtro | HTML antes de redirigir | $html, $link, $target, $ctx |
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.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>';
});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');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.pl_mi_) para no chocar con otros complementos.Cuando funcione, comprime la carpeta de tu complemento en un .zip y súbelo desde el panel:
.zip y se instala al momento.