stillat / antlers-components
Requires
- php: ^8.1
- laravel/framework: ^9.36 || ^10 || ^11
- statamic/cms: ^4 || ^5
- stillat/blade-parser: ^1.2
Requires (Dev)
- laravel/pint: ^1.4
- orchestra/testbench: ^7.0 || ^8.0 || ^9
- phpunit/phpunit: ^8.5 || ^9.0 || ^10
This package is auto-updated.
Last update: 2024-09-11 20:11:43 UTC
README
Antlers Components 是一个 Statamic 插件,它使创建独立的、可重用的 Antlers 部分变得容易,并通过使用熟悉的语法轻松集成现有的 Blade 和 Livewire 组件。
安装
您可以使用 composer 安装 Antlers Components
composer require stillat/antlers-components
要求
Antlers Components 需要 PHP 8.1 或更高版本
- Statamic 版本
3.4.*
或更高 - Laravel
9.36
或更高
此包提供 Livewire 组件的熟悉语法,并将其编译为本包提供的 Antlers 标签
https://statamic.com/addons/jonassiewertsen/livewire
为了使用 Livewire 语法,您还需要使用以下命令安装它
composer require jonassiewertsen/statamic-livewire
有关编译错误以外的 Livewire 功能的支持/问题报告,请使用以下 GitHub 链接
https://github.com/jonassiewertsen/statamic-livewire
使用 Blade 组件
您可以在 Antlers 模板中使用您熟悉的语法使用 Blade 组件。
例如,要包含一个 card
Blade 组件,我们可以使用 <x-card />
语法。此包支持 Blade 组件插槽;您可以在插槽中使用 Antlers
{{ collection:articles }} <x-card class="shadow-sm"> <x-slot:heading class="font-bold"> {{ title }} </x-slot> {{ content | safe_truncate(120) }} <x-slot:footer class="text-sm"> ... </x-slot> </x-card> {{ /collection:articles }}
在参数值中使用 Antlers 是可接受的。
Livewire 组件
我们可以使用 <livewire />
语法在 Antlers 模板中集成现有的 Livewire 组件,如下所示
{{ collection:articles }} <livewire:counter :start="index" /> {{ /collection:articles }}
在参数值中使用 Antlers 是可接受的。
支持的参数类型
当将组件标签编译为 Antlers 时,此包支持以下参数类型
简写变量:
{{ title = 'The title'; }} <x-alert :$title />
变量引用:
{{ title = 'The title'; }} <x-alert :title="title" />
名称/值:
{{ title = 'The title'; }} <x-alert title="title" />
属性:
<x-editor readonly />
Antlers 组件
此包还支持 Antlers "组件" 的概念,这实际上是在部分之上的一些语法糖(带有一些特殊行为)。
例如,我们可以使用此库包含一个名为 partial-name.antlers.html
的部分,如下所示
<a-partial-name :$title />
非常重要:当使用此语法时,部分 不会 继承它们被包含时的作用域(除了通用的级联)。这意味着如果我们想将当前数据提供给我们的部分,我们必须通过参数显式传递它。
使用此语法时,插槽的行为也有所不同,更接近匿名 Blade 组件。
让我们考虑一个名为 _card.antlers.html
的 Antlers 部分作为例子
<div {{ attributes.class(['border']) }}> <h1 {{ title.attributes.class(['border']) }}> {{ title }} </h1> {{ slot }} <footer {{ footer.attributes.class(['text-gray-700']) }}> {{ footer }} </footer> </div>
我们可以在主模板中这样渲染此 Antlers 部分如下
{{ collection:articles }} <a-card :$title :$content> <a:slot:title>{{ title }}</a:slot:title> <a:slot:footer>...</a:slot:footer> {{ content | safe_truncate(120) }} </a-card> {{ /collection:articles }}
注意:我们必须通过参数显式提供当前文章的标题和内容值,以便允许当前文章的值。否则,它将默认为当前页面的值。
当使用此语法时,我们不需要在部分内部使用 slot:
前缀命名插槽。此外,我们还可以访问一个属性包。传递给命名插槽的参数也将可用在部分内部
{{ collection:articles }} <a-card :$title :$content> <a:slot:title class="custom title classes">{{ title }}</a:slot:title> <a:slot:footer>...</a:slot:footer> {{ content | safe_truncate(120) }} </a-card> {{ /collection:articles }}
Nesting Antlers Component Partials
我们还可以通过在其他组件中包含它们来嵌套部分组件。就像常规组件一样,我们必须指定我们想要传递给嵌套组件的值
<div> <a-child-partial :$title /> </div>
我们可以使用 __is_nested
变量检查我们是否在嵌套/子组件内部
{{ if __is_nested }} I am a nested partial. {{ else }} I am not nested. {{ /if }}
我们还可以通过使用 __depth
变量来查看我们的嵌套深度
The current nested partial depth is: {{ __depth }}.
最后,如果我们通过引用 __parent
变量进行嵌套,我们就可以访问父部分的数据
{{ __parent.title }}
如果那个父级还有一个父级,我们就可以继续向上查找
{{ __parent.__parent.title }}
许可证
此插件是开源软件,采用 MIT 许可证 许可。