craftpulse/craft-timeloop

此Craft插件将根据频率生成一个从开始日期到结束日期的日期数组。

安装: 5

依赖项: 0

建议者: 0

安全: 0

星标: 5

关注者: 2

分支: 1

类型:craft-plugin

4.1.1 2023-03-08 10:47 UTC

README

此插件可以创建重复的日期,而无需复杂的输入。

timeloop-banner-light (1)

需求

此插件需要Craft CMS 3.3.0或更高版本。

安装

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

  1. 打开您的终端并转到您的Craft项目
    cd/path/to/project
  1. 告诉Composer加载插件
    composer require percipiolondon/craft-timeloop
  1. 在控制面板中,转到设置→插件,然后点击“安装”按钮。

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 提供