jalendport/craft-preparse

一个字段类型,当元素保存时解析Twig,并将结果保存为纯文本。

资助包维护!
jalendport

安装: 211

依赖项: 0

建议者: 0

安全: 0

星标: 108

关注者: 11

分支: 22

开放问题: 24

类型:craft-plugin

3.0.0-alpha.2 2024-07-15 15:17 UTC

README

一个字段类型,当元素保存时解析Twig,并将结果保存为纯文本。

需求

此插件需要Craft CMS 5.0.0或更高版本和PHP 8.2.0或更高版本。

安装

要安装插件,请按照以下说明操作。

  1. 打开您的终端并进入您的Craft项目

     cd /path/to/project
    
  2. 然后告诉Composer加载插件

     composer require jalendport/craft-preparse
    
  3. 在控制面板中,转到设置→插件,并为Preparse Field点击“安装”按钮。

用法

在创建新的Preparse字段时,您将要在字段设置中添加要运行的Twig。当保存具有该Preparse字段的元素时,代码将被解析,并将结果保存为纯文本。

值得注意的是,只有在字段所在的元素保存时,Preparse字段才会更新。如果您从相关元素(如下面的类别标题示例中所示)获取数据,然后更新相关元素,则预解析的值将不会自动更新。

在Twig中,添加Preparse字段的元素可用作名为element的变量。最好使用此变量(而不是像entryasset这样的东西),因为您可能将相同的Preparse字段添加到多个元素类型。这也意味着当Preparse字段添加到Matrix、SuperTable或Neo块时,该块将作为element可用,因此如果您想访问Matrix/SuperTable/Neo字段所属的元素,您将想要使用element.owner

示例

如果您在元素上有一个名为relatedCategory的类别字段,您可以通过在字段设置中添加以下Twig将类别标题保存到Preparse字段

{{ element.relatedCategory.one().title ?? '' }}

这有助于将预解析的值保存到字段中,用于排序、搜索或类似操作。

您还可以进行更高级的操作,例如性能优化。假设您有三个可能填充或不填充的不同资产字段。在模板中检查这些字段可能需要大量查询,因为在Craft中您不能在没有实际查询的情况下检查字段是否具有关系。您可以这样做来获取要使用的资产id

{% if element.smallListImage | length %}
    {{ element.smallListImage.one().id }}
{% elseif element.largeListImage | length %}
    {{ element.largeListImage.one().id }}
{% elseif element.mainImage | length %}
    {{ element.mainImage.one().id }}
{% endif %}

您可能想将其包裹在{% apply spaceless %} ... {% endapply %}中,使其更有用...

或者,您可以在保存时执行一些批量工作,例如使用Imager X预先生成大量的图像转换

{% if element.mainImage | length %}
    {% set transformedImages = craft.imager.transformImage(element.mainImage.one(), [
    { width: 1000 },
        { width: 900 },
        { width: 800 },
        { width: 700 },
        { width: 600 },
        { width: 500 },
        { width: 400 },
        { width: 300 },
        { width: 200 },
        { width: 100 }
    ]) %}
{% endif %}

Preparse还可以访问您的网站模板根目录,因此如果您想进行更高级的操作并/或想将字段的Twig保持在版本控制中,您甚至可以包含本地模板

{% include '_partials/customPreparseFieldStuff' %}

请确保您始终编写健壮的Twig,考虑到字段可能尚未填充。如果您的Twig中出现错误,则元素将不会保存。进行防御性编程!

价格、许可证和支持

该插件在MIT许可证下发布,这意味着只要您不怪我们,您可以做任何您想做的事情。它是免费的,这意味着绝对不包含任何支持,但您可能仍然会得到它。只需在GitHub上发布一个问题即可,我们将看看我们能做什么。 :)

变更日志

请参阅变更日志文件