Amplie o Linsei com o seu próprio código (sem tocar no núcleo) usando o sistema de hooks. Guia completo com um exemplo que funciona.
Um complemento é uma pasta dentro de plugins/ com um ficheiro plugin.php. O Linsei carrega-o sozinho ao arrancar. O seu código «liga-se» a pontos concretos do programa (os hooks) para acrescentar funções, sem modificar o núcleo. Assim o seu complemento sobrevive às atualizações do Linsei.
plugins/
└─ meu-complemento/
└─ plugin.phpCada plugin.php começa com esta linha de segurança (evita a execução direta):
<?php if(!defined("PL_APP")){http_response_code(403);exit;}
/* Complemento: O meu primeiro complemento */
pl_add_action('dashboard_after', function ($isAdmin) {
echo '<div class="card">Olá do meu complemento!</div>';
});Copie essa pasta para plugins/ e, ao recarregar o painel, verá o seu cartão. É tudo: já tem um complemento.
Há duas formas de se ligar:
pl_add_action): executam o seu código num dado momento (ex. mostrar algo no painel).pl_add_filter): recebem um valor, transformam-no e devolvem-no (ex. mudar a URL de destino).// Ação: fazer algo
pl_add_action('link_created', function ($slug, $url) {
// ex. avisar um webhook
});
// Filtro: transformar um valor (devolva-o sempre)
pl_add_filter('link_destination', function ($url) {
return $url; // aqui poderia modificar a URL
});| Hook | Tipo | Quando | Argumentos |
|---|---|---|---|
init | ação | em cada pedido | - |
admin_menu | ação | ao desenhar o menu lateral | $user |
dashboard_after | ação | no fim do painel inicial | $isAdmin |
links_toolbar | ação | barra de botões de Links | - |
link_form_fields | ação | no formulário de link | $link |
link_row_actions | ação | ações de cada linha | $link |
help_after | ação | no fim da Ajuda | - |
link_created | ação | ao criar um link | $slug, $url |
link_saved | ação | ao guardar (criar/editar) | $id, $post |
link_clicked | ação | em cada clique | $link |
link_destination | filtro | transforma o destino ao encurtar | $url |
link_redirect | filtro | decide o redirecionamento | $decision, $link, $ctx |
redirect_interstitial | filtro | HTML antes de redirecionar | $html, $link, $target, $ctx |
pl_add_plugin_menu(título, url, ícone, rota) acrescenta uma entrada ao menu, e em init responde a essa rota. Os ícones são do Bootstrap Icons.Este complemento pinta cada link da lista pelos seus cliques: vermelho se tem poucas visitas, âmbar se médio e verde se muitas. Ajuste $poucos e $muitos:
<?php if(!defined("PL_APP")){http_response_code(403);exit;}
/* Complemento: Semáforo de visitas */
pl_add_action('link_row_actions', function ($link) {
$cliques = (int)($link['click_count'] ?? 0);
$poucos = 10; // menos de 10 cliques: vermelho
$muitos = 100; // mais de 100 cliques: verde
if ($cliques < $poucos) { $color = '#dc2626'; } // vermelho
elseif ($cliques > $muitos) { $color = '#16a34a'; } // verde
else { $color = '#f59e0b'; } // âmbar
echo '<span style="background:' . $color . ';color:#fff;'
. 'border-radius:999px;padding:1px 8px;font-size:.75rem">'
. $cliques . '</span>';
});Para não deixar os números fixos, leia-os do armazém de ajustes (o mesmo que o núcleo usa para o SMTP) com pl_app_setting() e dê ao complemento a sua própria página onde o administrador os altera:
<?php if(!defined("PL_APP")){http_response_code(403);exit;}
/* Complemento: semáforo configurável */
// 1) No semáforo, leia os limites do armazém (com valores padrão)
$poucos = (int) pl_app_setting('semaforo_poucos', 10);
$muitos = (int) pl_app_setting('semaforo_muitos', 100);
// 2) Na página do complemento, salve o que o administrador enviar
if (($_POST['salvar'] ?? '') !== '') {
pl_app_settings_save([
'semaforo_poucos' => (int)($_POST['poucos'] ?? 10),
'semaforo_muitos' => (int)($_POST['muitos'] ?? 100),
]);
}
// 3) Adicione a sua entrada ao menu do painel (apenas administrador)
pl_add_plugin_menu('Semáforo', '/admin/semaforo', 'bi-sliders', '/admin/semaforo');data/settings.json, via pl_app_setting() e pl_app_settings_save() (o mesmo armazém do SMTP do núcleo). O administrador muda os limites sem tocar no código.pl_meu_) para não colidir com outros complementos.Quando funcionar, comprima a pasta do seu complemento num .zip e carregue-o pelo painel:
.zip e instala-se de imediato.