Brugerdefinerede plugins
Et brugerdefineret plugin er en klasse af typen PHP, der implementerer TailwindPHP\Plugin\PluginInterface. Den modtager en instans af PluginAPI og bruger den til at registrere statiske og funktionelle utilities, komponenter og varianter. Når pluginet er registreret med registerPlugin(), kan det slås op ved navn i et @plugin-direktiv — samme mekanisme som de indbyggede typografi- og formularplugins bruger.
PluginInterface
Implementér tre metoder:
namespace TailwindPHP\Plugin;
interface PluginInterface
{
public function getName(): string;
public function __invoke(PluginAPI $api, array $options = []): void;
public function getThemeExtensions(array $options = []): array;
}
getName()returnerer identifikatoren, der bruges i@plugin "...".__invoke()kører pluginet og registrerer alt gennem$api. Arrayet$optionsindeholder værdierne fra blokken@pluginCSS.getThemeExtensions()returnerer tema-navneområder, der skal flettes ind, før utilities genereres (returnér[], hvis der ikke er nogen).
Eksempel
use TailwindPHP\Plugin\PluginInterface;
use TailwindPHP\Plugin\PluginAPI;
class MyCustomPlugin implements PluginInterface
{
public function getName(): string
{
return 'my-custom-plugin';
}
public function __invoke(PluginAPI $api, array $options = []): void
{
// Static utilities
$api->addUtilities([
'.btn' => [
'padding' => '0.5rem 1rem',
'border-radius' => '0.25rem',
'font-weight' => '600',
],
'.btn-primary' => [
'background-color' => 'blue',
'color' => 'white',
],
]);
// Functional utilities (generates .gutter-sm, .gutter-md, .gutter-lg)
$api->matchUtilities(
[
'gutter' => fn ($value) => ['padding-inline' => $value],
],
['values' => ['sm' => '1rem', 'md' => '2rem', 'lg' => '3rem']]
);
// Component classes (sorted into the components layer)
$api->addComponents([
'.card' => [
'background-color' => 'white',
'border-radius' => '0.5rem',
'padding' => '1rem',
],
]);
// Custom variant (see the note below the API reference)
$api->addVariant('hocus', '&:hover, &:focus');
// Read a theme value
$primary = $api->theme('colors.blue.500', '#3b82f6');
}
public function getThemeExtensions(array $options = []): array
{
return []; // Return theme additions if needed
}
}
Reference for PluginAPI
API afspejler plugin-TailwindCSS i API:
| Metode | Signatur | Formål |
|---|---|---|
addBase |
addBase(array $css): void |
Tilføj basislag-styles. |
addUtilities |
addUtilities(array $utilities, array $options = []): void |
Registrér statiske utility-klasser, grupperet efter selector. |
matchUtilities |
matchUtilities(array $utilities, array $options = []): void |
Registrér funktionelle utilities; $options['values'] angiver værdikortet, og $options['supportsNegativeValues'] aktiverer negative værdier. |
addComponents |
addComponents(array $components, array $options = []): void |
Registrér komponentklasser (komponentlaget). |
matchComponents |
matchComponents(array $components, array $options = []): void |
Registrér funktionelle komponenter med et værdikort. |
addVariant |
addVariant(string $name, string|array $variant): void |
Registrér en statisk variant ud fra en selector. |
matchVariant |
matchVariant(string $name, callable $callback, array $options = []): void |
Registrér en funktionel variant; $options['values'] angiver værdikortet. |
theme |
theme(string $path, mixed $defaultValue = null): mixed |
Læs en temaværdi via en punktsti (e.g. colors.blue.500). |
config |
config(?string $path = null, mixed $defaultValue = null): mixed |
Læs en konfigurationsværdi via en punktsti eller hele konfigurationen, når $path er null. |
prefix |
prefix(string $className): string |
Anvend det konfigurerede præfiks på et klassenavn. |
Callbacken, der sendes til matchUtilities, matchComponents og matchVariant, modtager værdien og et andet argument-array med en modifier-nøgle.
Vælg utility-navne, som core Tailwind ikke allerede bruger. Hvis et plugin-utility har samme navn som et i core (for eksempel tab-*, som core Tailwind bruger til tab-size siden v4.3), havner begge erklæringer i samme regel, og core-udgaven kommer sidst og vinder: et plugin-tab-4, der er knyttet til 7, producerer stadig tab-size: 4.
Kendt problem: Varianter, der registreres med
addVariant(), og varianter pr. værdi, sommatchVariant()registrerer, anvendes ikke i den aktuelle udgivelse.hocus:flexfra eksemplet ovenfor kompileres til.hocus\:flex { display: flex; }uden en:hover/:focus-selector (#10). Indtil problemet er rettet, skal du definere varianten i CSS med@custom-variant; det fungerer:@custom-variant hocus (&:hover, &:focus);.
Registrering og brug
Registrér plugininstansen, og referér derefter til den med navnet fra getName():
use TailwindPHP\tw;
use function TailwindPHP\registerPlugin;
registerPlugin(new MyCustomPlugin());
$css = tw::generate(
'<div class="btn btn-primary card gutter-md">…</div>',
'@plugin "my-custom-plugin"; @import "tailwindcss/utilities.css";'
);
Se Plugins for direktivet @plugin og Tema for de værdier, der er tilgængelige via $api->theme().