Персонализирани плъгини
Персонализираният плъгин е клас PHP, който реализира TailwindPHP\Plugin\PluginInterface. Получава екземпляр на PluginAPI и го използва, за да регистрира статични и функционални помощни класове, компоненти и варианти. След като бъде регистриран с registerPlugin(), плъгинът се намира по име в директива @plugin — по същия механизъм, който използват вградените плъгини за типография и формуляри.
PluginInterface
Реализирайте три метода:
namespace TailwindPHP\Plugin;
interface PluginInterface
{
public function getName(): string;
public function __invoke(PluginAPI $api, array $options = []): void;
public function getThemeExtensions(array $options = []): array;
}
getName()връща идентификатора, използван в@plugin "...".__invoke()изпълнява плъгина, като регистрира всичко чрез$api. Масивът$optionsсъдържа стойностите от блока@pluginCSS.getThemeExtensions()връща пространствата на имената на темата, които да се слеят преди генерирането на помощните класове (връщайте[], ако няма такива).
Пример
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
API отразява TailwindCSS приставния API:
| Метод | Сигнатура | Предназначение |
|---|---|---|
addBase |
addBase(array $css): void |
Добавя стилове към базовия слой. |
addUtilities |
addUtilities(array $utilities, array $options = []): void |
Регистрира статични класове за помощни стилове по селектор. |
matchUtilities |
matchUtilities(array $utilities, array $options = []): void |
Регистрира функционални помощни класове; $options['values'] задава картата със стойности, а $options['supportsNegativeValues'] разрешава отрицателни стойности. |
addComponents |
addComponents(array $components, array $options = []): void |
Регистрира класове на компоненти (слой components). |
matchComponents |
matchComponents(array $components, array $options = []): void |
Регистрира функционални компоненти с карта със стойности. |
addVariant |
addVariant(string $name, string|array $variant): void |
Регистрира статичен вариант от селектор. |
matchVariant |
matchVariant(string $name, callable $callback, array $options = []): void |
Регистрира функционален вариант; $options['values'] задава картата със стойности. |
theme |
theme(string $path, mixed $defaultValue = null): mixed |
Чете стойност от темата по път с точки (e.g. colors.blue.500). |
config |
config(?string $path = null, mixed $defaultValue = null): mixed |
Чете стойност от конфигурацията по път с точки или цялата конфигурация, когато $path е null. |
prefix |
prefix(string $className): string |
Прилага конфигурирания префикс към име на клас. |
Функцията за обратно извикване, подадена на matchUtilities, matchComponents и matchVariant, получава стойността и втори аргумент — масив, съдържащ ключ modifier.
Избирайте имена за помощни класове, които основният Tailwind не използва. Когато помощен клас на плъгин има същото име като основен (например tab-*, което основният Tailwind използва за tab-size от v4.3 насам), двете декларации попадат в едно правило и основният идва последен, затова печели: помощен клас на плъгин tab-4, съпоставен с 7, пак генерира tab-size: 4.
Известен проблем: вариантите, регистрирани с
addVariant(), както и вариантите за отделни стойности, регистрирани отmatchVariant(), не се прилагат в текущото издание.hocus:flexот примера по-горе се компилира до.hocus\:flex { display: flex; }без селектор:hover/:focus(#10). Докато проблемът не бъде поправен, дефинирайте варианта в CSS с@custom-variant; така работи:@custom-variant hocus (&:hover, &:focus);.
Регистриране и употреба
Регистрирайте екземпляра на плъгина, след което го посочете с името от 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";'
);
Вижте Плъгини за директивата @plugin и Тема за стойностите, достъпни чрез $api->theme().