jacksleight / statamic-distill
Requires
- statamic/cms: ^3.4|^4.0|^5.0
README
Distill
🚧 进行中:一些内容可能会改变/损坏。 欢迎反馈。
此Statamic插件允许您从根目录和深层嵌套字段中筛选、检索或索引条目内的单个值、集合和关系。它适用于以下用途
- 从复制器中提取每个Bard字段的文本
- 找到页面中的每个资产,或仅找到第一张图片
- 像集合一样筛选、排序和分页一个网格字段或原始数组
- 将页面的单个部分添加到搜索索引中
- 重构嵌套数据和集合
安装
您可以在Statamic控制面板的“工具 > 插件”部分搜索此插件,然后点击“安装”,或者从您的项目根目录运行以下命令
composer require jacksleight/statamic-distill
示例
找到页面中的每张图片
{{ distill:page type="asset:*" is_image:is="true" unique="true" }} {{ url }} {{ /distill:page }}
从页面构建器中提取所有Bard文本
{{ { distill:bard from="builder" } | bard_text }}
筛选、排序和分页网格字段
{{ distill:parts_list depth="1" paginate="10" :category:is="get:category" :sort="get:sort" }} {{ items }} {{ name }} {{ price }} {{ /items }} {{ paginate }} <a href="{{ prev_page }}">←</a> <a href="{{ next_page }}">→</a> {{ /paginate }} {{ /distill:parts_list }}
将页面的部分添加到搜索索引中
// config/statamic/search.php 'searchables' => [ 'distill:collection:pages:sections', ], 'fields' => ['heading'],
// app/Stills/Sections.php namespace App\Stills; use JackSleight\StatamicDistill\Stills\Still; class Sections extends Still { public function apply($query, $values) { $query->path('builder.*')->type('set:section'); } }
{{# resources/views/search.antlers.html #}} {{ search:results }} {{ if result_type === 'distill:set:section' }} <a href="{{ info:source:url }}#{{ id }}"> {{ title }} </a> {{ else }} ... {{ /if }} {{ /search:results }}
用法
Distill递归遍历您提供的值,寻找符合您条件的项目。它可以找到单个段落和字段值,直到整个集合和其他内容的引用。
为了获得最佳性能,您应使用from
、path
、expand
、limit
和max_depth
参数来限制其搜索范围,基于您要查找的内容。这些选项不仅过滤最终结果,还告诉Distill在哪里查找以及何时停止。
Distill可以找到对其他条目、术语、资产和用户的引用,但它不会进入这些对象。此外,如果您提供一个原始值,Distill将仅遍历原始值,它不会进入字段的原始值。
Distill标签
{{ distill:* }}
标签接受以下参数
- from (字符串)
源变量的名称(不是变量本身),可以是一个字段或原始值,或条目、术语、资产或用户。 - type (字符串|数组)
要匹配的类型,可以使用星号作为通配符,多个类型可以使用管道符号分隔,选项包括value:[fieldtype]
- 字段值set:[handle]
- 复制器或Bard集合row:[distill-type]
- 网格行(类型可以在字段配置中定义)node:[type]
- Bard节点mark:[type]
- Bard标记entry:[collection]
- 条目term:[taxonomy]
- 术语asset:[container]
- 资产user
- 用户raw:[php-type]
- 原始值
- path (字符串|数组)
要匹配的路径,可以使用星号作为通配符,多个路径可以使用管道符号分隔,路径本身使用点分隔。 - depth (整数)
设置max_depth
和min_depth
。 - min_depth (整数)
找到项目的最小深度。 - max_depth (整数)
找到项目的最大深度。 - unique (布尔值,false)
过滤重复项。过滤仅应用于以下类型entry
term
asset
user
- expand (字符串|数组,all)
要扩展和进入哪些类型,星号可以用作通配符,多个类型可以用管道符分隔,选项有set:[handle]
row:[distill-type]
value:replicator
value:bard
value:grid
value:entries
value:terms
value:assets
value:users
raw:array
raw:object
- limit (整数)
项目最大数量。 - offset (整数)
起始项目偏移。 - paginate (整数)
启用分页并设置每页的项目数量。 - sort (字符串)
排序顺序。 - include_source (布尔值,false)
是否包含源值。 - still (字符串)
要应用哪些still,多个still可以用管道符分隔。 - [conditions] (混合类型)
任何where条件。
每个返回的项目都包含一个包含以下值的info
对象
- type - 项目的类型。
- path - 从源到项目的路径。
- source - 原始源值。
- parent - 层次结构中的父项目。
Distill Bard 标签
{{ distill:bard }}
标签返回与bard_*
修饰符兼容的Bard数据格式。
Distill 文本标签
{{ distill:text }}
标签返回所有来自text
、textarea
、bard
和markdown
字段的纯文本。
Distill 计数标签
{{ distill:count }}
标签返回查询的结果数量。
still
still与查询作用域完全相同,但用于Distill查询。您可以通过在app/Stills/*.php
中添加新类来创建它们。它们有一个接收查询构建器对象和标签参数数组的apply
方法。
PHP中的用法
查询构建器
您可以使用Distill::query()
方法在PHP中手动查询值。查询构建器类具有与上述标签参数匹配的驼峰命名方法,以及所有常规的where
方法
use JackSleight\StatamicDistill\Facades\Distill; $youtubeVideoSets = Distill::query($value) ->type('set:video') ->where('url', 'like', '%youtube.com%') ->get();
Bard & 文本值
您可以使用Distill::bard()
和Distill::text()
方法在PHP中手动提取Bard数据和纯文本。例如,要创建页面构建器的纯文本值,可以执行以下操作之一
use JackSleight\StatamicDistill\Facades\Distill; use Statamic\Facades\Collection; use Statamic\Statamic; $value = $entry->augmentedValue('content'); $data = Distill::bard($value); $value = $entry->augmentedValue('builder'); $text = Distill::text($value);
搜索集成
Distill可以将查询的结果添加到搜索索引中,因此它们将作为单独的搜索结果出现。然后您可以使用哈希/片段URL来链接到源页面中的这些项目。支持条目和术语的项目。
查看上面的示例,以下是该示例的简要说明
distill:collection:articles:sections
- 使用“sections”still从文章集合中的条目中提取项目$query->path('builder.*')
- 提取“builder”字段(集合)的所有直接子项目->type('set:section')
- 仅提取类型为“section”的集合'fields' => ['heading']
- 索引这些集合中的“heading”字段
当运行搜索时,将搜索部分标题,并返回任何匹配的集合作为结果。
赞助
此插件完全免费使用。然而,修复错误、添加功能和帮助用户需要时间和精力。如果您发现此插件很有用,并希望支持其开发,任何捐款都将受到高度重视。谢谢!😊