Pasirinktiniai papildiniai
Pasirinktinis papildinys yra PHP klasė, įgyvendinanti TailwindPHP\Plugin\PluginInterface. Ji gauna PluginAPI egzempliorių ir jį naudoja statinėms bei funkcinėms utilitoms, komponentams ir variantams registruoti. Užregistruotas per registerPlugin(), papildinys pagal pavadinimą pasiekiamas @plugin direktyvoje — taip veikia ir įtaisytieji tipografijos bei formų papildiniai.
PluginInterface
Įgyvendinkite tris metodus:
namespace TailwindPHP\Plugin;
interface PluginInterface
{
public function getName(): string;
public function __invoke(PluginAPI $api, array $options = []): void;
public function getThemeExtensions(array $options = []): array;
}
getName()grąžina identifikatorių, naudojamą@plugin "...".__invoke()vykdo papildinį ir registruoja visus elementus per$api. Masyve$optionspateikiamos reikšmės iš bloko@pluginCSS.getThemeExtensions()grąžina temų vardų sritis, kurias reikia sujungti prieš generuojant utilitas (jei jų nėra, grąžinkite[]).
Pavyzdys
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
}
}
PluginAPI nuoroda
API atitinka TailwindCSS papildinio API:
| Metodas | Signatūra | Paskirtis |
|---|---|---|
addBase |
addBase(array $css): void |
Pridėti bazinio sluoksnio stilius. |
addUtilities |
addUtilities(array $utilities, array $options = []): void |
Registruoti statines utilitų klases pagal selektorių. |
matchUtilities |
matchUtilities(array $utilities, array $options = []): void |
Registruoti funkcines utilitas; $options['values'] pateikia reikšmių žemėlapį, $options['supportsNegativeValues'] įjungia neigiamas reikšmes. |
addComponents |
addComponents(array $components, array $options = []): void |
Registruoti komponentų klases (komponentų sluoksnis). |
matchComponents |
matchComponents(array $components, array $options = []): void |
Registruoti funkcinius komponentus su reikšmių žemėlapiu. |
addVariant |
addVariant(string $name, string|array $variant): void |
Registruoti statinį variantą pagal selektorių. |
matchVariant |
matchVariant(string $name, callable $callback, array $options = []): void |
Registruoti funkcinį variantą; $options['values'] pateikia reikšmių žemėlapį. |
theme |
theme(string $path, mixed $defaultValue = null): mixed |
Skaityti temos reikšmę pagal taškais atskirtą kelią (e.g. colors.blue.500). |
config |
config(?string $path = null, mixed $defaultValue = null): mixed |
Skaityti konfigūracijos reikšmę pagal taškais atskirtą kelią arba visą konfigūraciją, kai $path yra null. |
prefix |
prefix(string $className): string |
Pridėti sukonfigūruotą prefiksą prie klasės pavadinimo. |
matchUtilities, matchComponents ir matchVariant perduotai funkcijai pateikiama reikšmė ir antrasis argumentas — masyvas su modifier raktu.
Pasirinkite utilitų pavadinimus, kurių pagrindinis Tailwind dar nenaudoja. Jei papildinio utilita turi tokį pat pavadinimą kaip pagrindinė (pavyzdžiui, tab-*, kurį pagrindinis Tailwind naudoja tab-size nuo v4.3), abi deklaracijos patenka į tą pačią taisyklę, o pagrindinė eina paskutinė ir laimi: net jei papildinio tab-4 susietas su 7, vis tiek gaunamas tab-size: 4.
Žinoma problema: variantai, užregistruoti naudojant
addVariant(), ir kiekvienos reikšmės variantai, kuriuos registruojamatchVariant(), dabartinėje versijoje netaikomi.hocus:flexiš pirmiau pateikto pavyzdžio kompiliuojamas į.hocus\:flex { display: flex; }be:hover/:focusparinkiklio (#10). Kol tai bus pataisyta, apibrėžkite variantą faile CSS naudodami@custom-variant– tai veikia:@custom-variant hocus (&:hover, &:focus);.
Registravimas ir naudojimas
Užregistruokite papildinio egzempliorių, tada nurodykite jį vardu iš 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";'
);
Žr. Papildiniai, kur aprašyta @plugin direktyva, ir Tema, kur pateiktos per $api->theme() atskleidžiamos reikšmės.