elementworks / craft-preparse-field
一个字段类型,在元素保存时解析Twig并将其结果保存为纯文本。
Requires
- php: ^8.0.2
- craftcms/cms: ^4.0.0
- nystudio107/craft-twigfield: ^1.0.0
This package is auto-updated.
Last update: 2024-09-19 12:46:15 UTC
README
一个字段类型,在元素保存时解析Twig并将其结果保存为纯文本。
需求
此插件需要Craft CMS 4.0.0或更高版本以及PHP 8.0.2或更高版本。
安装
要安装此插件,请按照以下说明操作。
-
打开您的终端并转到您的Craft项目
cd /path/to/project
-
然后告诉Composer加载插件
composer require besteadfast/craft-preparse-field
-
在控制面板中,转到设置 → 插件,并单击“安装”按钮以安装Preparse Field。
使用方法
当创建新的Preparse字段时,您可以将要运行的Twig添加到字段的设置中。当保存具有该Preparse字段的元素时,代码将被解析,并将结果保存为纯文本。
值得注意的是,只有当字段所在的元素被保存时,Preparse字段才会更新。如果您从相关元素(如下面的类别标题示例所示)中获取数据,然后更新相关元素,则预解析值不会自动更新。
在Twig中,添加Preparse字段的元素可用作名为element
的变量。最好使用此变量(而不是像entry
或asset
这样的东西),因为您可能将相同的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上发布一个问题,我们将看看我们能做什么。 :)
变更日志
请参阅变更日志文件。