jacksleight/statamic-distill

此包最新版本(0.8.0)没有可用的许可证信息。

0.8.0 2024-07-12 12:50 UTC

This package is auto-updated.

Last update: 2024-09-12 13:06:55 UTC


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递归遍历您提供的值,寻找符合您条件的项目。它可以找到单个段落和字段值,直到整个集合和其他内容的引用。

为了获得最佳性能,您应使用frompathexpandlimitmax_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_depthmin_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 }}标签返回所有来自texttextareabardmarkdown字段的纯文本。

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来链接到源页面中的这些项目。支持条目和术语的项目。

查看上面的示例,以下是该示例的简要说明

  1. distill:collection:articles:sections - 使用“sections”still从文章集合中的条目中提取项目
  2. $query->path('builder.*') - 提取“builder”字段(集合)的所有直接子项目
  3. ->type('set:section') - 仅提取类型为“section”的集合
  4. 'fields' => ['heading'] - 索引这些集合中的“heading”字段

当运行搜索时,将搜索部分标题,并返回任何匹配的集合作为结果。

赞助

此插件完全免费使用。然而,修复错误、添加功能和帮助用户需要时间和精力。如果您发现此插件很有用,并希望支持其开发,任何捐款都将受到高度重视。谢谢!😊