craftpulse / craft-timeloop
此Craft插件将根据频率生成一个从开始日期到结束日期的日期数组。
Requires
- php: ^8.0.2
- craftcms/cms: ^4.0.0-beta.1
- nystudio107/craft-plugin-vite: ^4.0.0-beta.1
Requires (Dev)
- codeception/codeception: ^4.1.29
- craftcms/phpstan: dev-main
- vlucas/phpdotenv: ^3.0
This package is auto-updated.
Last update: 2024-09-12 10:37:03 UTC
README
此插件可以创建重复的日期,而无需复杂的输入。
需求
此插件需要Craft CMS 3.3.0或更高版本。
安装
要安装插件,请按照以下说明操作。
- 打开您的终端并转到您的Craft项目
cd/path/to/project
- 告诉Composer加载插件
composer require percipiolondon/craft-timeloop
- 在控制面板中,转到设置→插件,然后点击“安装”按钮。
Timeloop概述
Timeloop插件提供基于起始日期和常规循环周期的重复日期。
示例:为员工设置每月的第一天作为支付日期。
配置Timeloop字段。
以下配置选项可用于字段
- 显示时间:当选中时,将提供选择重复日期的起始时间和结束时间的能力。
使用Timeloop
Timeloop模型
获取输入的日期(以DateTime对象返回)
获取循环的起始日期(包括在loopStartTime中设置的日期)
{{ entry.timeloop.loopStartDate | date('Y-m-d\\TH:i:sP') }}
获取循环的结束日期(包括在loopEndHour中设置的日期)
{{ entry.timeloop.loopEndDate | date('Y-m-d\\TH:i:sP') }}
获取循环的起始时间
{{ entry.timeloop.loopStartTime | date('H:i:s') }}
获取循环的结束时间
{{ entry.timeloop.loopEndTime | date('H:i:s') }}
获取所选起始和结束日期之间的日期数组(DateTime对象数组)
{% for date in entry.timeloop.dates %}
{{ date | date('Y-m-d\\TH:i:sP') }}
{% endfor %}
此生成的日期集考虑了所有字段值(频率、周期和自定义)
即将到来的日期(DateTime对象返回)
获取第一个即将到来的日期
{{ entry.timeloop.upcoming | date('Y-m-d\\TH:i:sP') }}
获取下一个即将到来的日期
{{ entry.timeloop.nextUpcoming | date('Y-m-d\\TH:i:sP') }}
获取特定日期之间的条目
如果您想从某个部分获取两个日期之间的条目。您可以通过向ElementsQuery提供timeloop字段的名称、起始日期和结束日期来获取它们。这将返回一个数组,包含每个条目在此期间之间的重复日期。如果没有定义日期,您将得到一个空数组。在返回的数组中,您可以找到条目ID、条目标题和日期。
{%- set recurringEntries = recurringDates(craft.entries.section('events'), 'timeloop', '2021-01-01', '2022-02-01') %}
{% for recurringEntry in recurringEntries %}
<div>
<h2>{{ recurringEntry.entryTitle }}: {{ recurringEntry.entryId }}</h2>
{% for date in recurringEntry.dates %}
{{ date | date('d/m/y H:i') }}<br/>
{% endfor %}
</div>
{% endfor %}
返回此数组布局
0 => [
'entryId' => 1111
'entryTitle' => 'Event title'
'dates' => [
0 => DateTime#1
(
[date] => '2022-01-01 00:00:00.000000'
[timezone_type] => 3
[timezone] => 'Europe/London'
)
1 => DateTime#2
(
[date] => '2022-01-08 00:00:00.000000'
[timezone_type] => 3
[timezone] => 'Europe/London'
)
]
]
周期模型
获取频率(DateTimePeriod字符串)
{{ entry.timeloop.period.frequency }}
获取周期(整数)
{{ entry.timeloop.period.cycle }}
显示所选的天数(数组)
{% for day in entry.timeloop.period.days %}
{{ day }}
{% endfor %}
这将在选择每周作为频率时解析所选天名的名称。
时间字符串模型
获取每月设置循环的序数(例如,第一、第二、...、最后)
警告:如果频率未设置为每月,则返回值将为null。
警告:如果频率设置为每月且未选择时间字符串,则返回值将为none作为String。
{{ entry.timeloop.timestring.ordinal ?? 'not set' }}
提醒模型(WIP - 未准备好投入生产)
GraphQL
如果您想通过GraphQL使用此插件,我们已添加一个GraphQL类型以提供字段数据。
您可以直接从数据中获取DateTime类型,例如
loopStartDate将返回起始日期loopStartTime将返回起始时间,默认为00:00:00,如果没有输入起始时间或showTimes设置为false。loopEndDate将返回结束日期loopEndTime将返回结束时间,默认为23:59:59,如果没有输入结束时间或showTimes设置为false。loopReminder
循环周期
您可以按照以下方式获取loopPeriod对象
loopPeriod {
frequency
cycle
days
timestring {
ordinal
day
}
}
frequency将返回选定的频率(P1D / P1W / P1M / P1Y)cycle将返回输入的周期值days将返回包含选定星期的数组timestring将返回包含ordinal(例如,最后)和day(例如,星期六)的对象
日期
要获取格式化日期的数组,请使用 dates。
日期参数
- limit(整数):添加您希望返回的日期限制,默认为
100。 - futureDates(布尔值):如果您只想显示未来日期,默认为
true。
日期指令
formatDateTime(timezone: "Europe/London" format: "d/m/Y")
query{ entries(section: "homepage"){ id, ...on homepage_homepage_Entry{ dateCreated, title, timeloop { loopReminder, loopStartDate, loopStartTime, loopEndDate, loopEndTime, loopPeriod, dates(limit: 5) @formatDateTime(format: "d/m/Y" ) } } } }
Timeloop 路线图
未来的潜在功能
- 提醒支持
- 使字段类型可翻译
- 提供语言翻译
- 添加阻止列表日期的功能
- 添加假日设置
- 基于 CraftCMS 时区设置本地化假日
还有很多!
由 Percipio.London 提供
