burnthebook/craft3-ticketsolve

从Ticketsolve XML源提取场馆、演出和活动,并保持您的网站同步。

安装: 815

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 0

开放问题: 0

类型:craft-plugin

2.0.2 2023-11-16 15:15 UTC

This package is auto-updated.

Last update: 2024-09-16 17:10:59 UTC


README

此插件将从Ticketsolve XML源提取场馆、演出和活动,并存储在Craft网站上,以便轻松访问。

自动同步功能将每15分钟更新一次,以保持您的网站与Ticketsolve同步。还可以通过点击按钮手动同步。

一个新的字段类型称为"Ticketsolve演出",允许您将演出与您网站的条目相关联。

控制面板中的Ticketsolve部分允许您浏览已导入到网站中的所有场馆、演出和活动。

Twig扩展允许在模板中轻松集成场馆、演出和活动。

注意:这不是官方的Ticketsolve插件。

要求

此插件需要PHP 7.4 - 8.2,并支持Craft CMS 3.x和4.x。

  • PHP的SimpleXML扩展;

  • 在MySQL中禁用ONLY_FULL_GROUP_BY模式,例如

    SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

安装

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

  1. 打开您的终端并转到您的Craft项目

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

    composer require burnthebook/craft3-ticketsolve
    
  3. 在控制面板中,转到设置→插件,然后点击Ticketsolve的“安装”按钮。

配置Ticketsolve

在控制面板中,转到设置→Ticketsolve,并输入您的Ticketsolve XML源URL。

启用自动同步,或对于高级用户,在服务器上创建一个cron作业。见同步

如果使用自动同步,请注意,初始同步将在启用自动同步后15分钟发生。

要手动触发同步,请转到控制面板→Ticketsolve,然后点击“立即同步”按钮。

为了不达到Ticketsolve的速率限制,每导入一次设置了一个250个API调用的限制。演出将以250个为一组导入,直到全部导入完毕。然后循环再次开始。

演出字段

插件添加了一个新的关系字段类型,称为"Ticketsolve演出"。它允许您将演出添加到Craft的条目中。

{% set shows = entry.showsFieldHandle.all() %}

{% for show in shows %}
    {{ show.name }}
{% endfor %}

演出,了解每个演出的公开属性的完整参考。

场馆

{% set venues = craft().ticketsolve.venues().all() %}

{% for venue in venues %}
    {{ venue.name }}
{% endfor %}

参数

craft().ticketsolve.venues()返回一个支持Craft标准查询参数的查询对象,包括排序、排序、限制以及以下新参数

  • venueRef() - 通过venueRef(Ticketsolve的场馆ID)过滤结果。接受整数。
  • name() - 通过名称过滤结果。接受字符串。
  • excludeVenueRefs() - 从结果中排除某些venueRefs。接受整数数组。

属性

场馆元素具有以下属性

  • id - Craft的场馆ID。注意这与Ticketsolve的场馆ID不同。
  • venueRef - Ticketsolve的场馆ID。
  • name - 场馆的名称/标题。
  • shows - 返回一个针对此场馆演出预过滤的演出查询对象。见演出

演出

{% set shows = craft().ticketsolve.shows().all() %}

{% for show in shows %}
    {{ show.name }}
{% endfor %}

参数

craft().ticketsolve.shows() 返回一个查询对象,它支持 Craft 的标准查询参数用于排序、排序、限制,以及以下新参数

  • showRef() - 通过 showRef(Ticketsolve 的演出 ID)过滤结果。接受一个整数。
  • name() - 通过名称过滤结果。接受字符串。
  • eventCategory() - 通过活动类别过滤结果。接受一个字符串。
  • productionCompanyName() - 通过制作公司名称过滤结果。接受一个字符串。
  • venueId() - 通过 venueId 过滤结果。注意这与 Ticketsolve 的 venueId 不同。接受一个整数。
  • excludeShowRefs() - 排除某些 showRefs 从结果中。接受一个整数数组。
  • tags() - 通过某些标签过滤结果。接受一个字符串数组(标签名称)。
  • eventDateTime() - 通过其事件日期时间过滤结果。(有关 Craft 的日期/时间字段文档,请参阅 Date/Time Fields
  • eventOpeningTime() - 通过其事件的开场时间过滤结果。(有关 Craft 的日期/时间字段文档,请参阅 Date/Time Fields
  • eventOnSaleTime() - 通过其事件的售票时间过滤结果。(有关 Craft 的日期/时间字段文档,请参阅 Date/Time Fields
  • orderBy() - 支持大多数演出的属性,以及 eventDateTimeeventOpeningTimeeventOnSaleTime

属性

演出元素有以下属性

  • id - Craft 的演出 ID。注意这与 Ticketsolve 的演出 ID 不同。

  • venueId - 与相关场所关联的 Craft 场所 ID。注意这与 Ticketsolve 的场所 ID 不同。

  • showRef - Ticketsolve 的演出 ID。

  • name - 演出的名称/标题。

  • description - 演出的描述。通常包含 HTML 标记。

  • eventCategory - 与此演出关联的单个类别名称。

  • productionCompanyName - 制作公司的名称。

  • priority - 优先级编号。

  • url - Ticketsolve 上演出页面的 URL。

  • version - 从 Ticketsolve 获取的版本号。

  • tags - 返回一个标签数组。每个标签都有可用的 idname 属性。

  • venue - 返回与演出关联的场所。请参阅 Venues

  • events - 返回一个针对此演出事件预过滤的事件查询对象。请参阅 Events

  • images - 一个包含以下结构的图像数组

    [
        [
            'large' => 'https://exmaple.com/image1.jpg',
            'medium' => 'https://exmaple.com/image2.jpg',
            'thumb' => 'https://exmaple.com/image3.jpg'
        ],
        [
            'large' => 'https://exmaple.com/image4.jpg',
            'medium' => 'https://exmaple.com/image5.jpg',
            'thumb' => 'https://exmaple.com/image6.jpg'
        ]
    ]
    

事件

{% set events = craft().ticketsolve.events().all() %}

{% for event in events %}
    {{ event.name }}
{% endfor %}

参数

craft().ticketsolve.events() 返回一个查询对象,它支持 Craft 的标准查询参数用于排序、排序、限制,以及以下新参数

  • eventRef() - 通过 eventRef(Ticketsolve 的事件 ID)过滤结果。接受一个整数。
  • name() - 通过名称过滤结果。接受字符串。
  • eventStatus() - 通过事件状态过滤结果。接受一个字符串。
  • showId() - 通过 showId 过滤结果。注意这与 Ticketsolve 的演出 ID 不同。接受一个整数。
  • excludeEventRefs() - 排除某些 eventRefs 从结果中。接受一个整数数组。
  • dateTime() - 通过 dateTime 过滤结果。(有关 Craft 的日期/时间字段文档,请参阅 Date/Time Fields
  • openingTime() - 通过 openingTime 过滤结果。(有关 Craft 的日期/时间字段文档,请参阅 Date/Time Fields
  • onSaleTime() - 通过 onSaleTime 过滤结果。(有关 Craft 的日期/时间字段文档,请参阅 Date/Time Fields
  • orderBy() - 支持大多数事件的属性,包括 dateTimeopeningTimeonSaleTime

属性

事件元素有以下属性

  • id - Craft 的事件 ID。注意这与 Ticketsolve 的事件 ID 不同。

  • showId - 关联演出的Craft Show ID。注意,这与Ticketsolve的Show ID不同。

  • eventRef - Ticketsolve的事件ID。

  • name - 事件名称/标题。

  • dateTime - 事件的日期和时间DateTime对象。

  • openingTime - 事件的开放日期和时间DateTime对象。

  • onSaleTime - 事件售票开始日期和时间DateTime对象。

  • duration - 表示事件持续时间(分钟)的整数。

  • available - 表示可用空间的整数。

  • capacity - 表示事件容量(空间数量)的整数。

  • venueLayout - 描述场地布局的字符串。

  • comment - 包含任何注释的字符串。

  • url - Ticketsolve上事件页面的URL。

  • status - 事件状态,例如“可用”。

  • fee - 交易费用,例如“0.5”。

  • feeCurrency - 3位货币代码,例如“GBP”。

  • maximumTickets - 表示每个交易允许的最大票数整数。

  • show - 返回事件关联的演出。参见演出

  • venue - 返回事件关联的场地。参见场地

  • prices - 包含以下结构的价格数组

    [
        [
            'type' => 'Standard',
            'facePrice' => [
                'value' => 5.5,
                'currency' => 'GBP'
            ],
            'sellingPrice' => [
                'value' => 5,
                'currency' => 'GBP'
            ]
        ],
        [
            'type' => 'Premium',
            'facePrice' => [
                'value' => 8.5,
                'currency' => 'GBP'
            ],
            'sellingPrice' => [
                'value' => 8,
                'currency' => 'GBP'
            ]
        ]
    ]
    

同步

插件附带自动同步选项,大约每15分钟从XML源自动同步一次,通过伪cron作业。

为了更可靠的同步,您可以在插件设置中禁用自动同步,并使用以下Craft控制台命令从适当的cron作业触发它

craft ticketsolve/feed/sync

本地开发

只需将存储库克隆到CraftCMS网站目录之上,然后在您的composer.json中添加以下内容

  "repositories": {
    "craft3-ticketsolve": {
      "type": "path",
      "url": "../craft3-ticketsolve",
      "options": {
        "symlink": true
      }
    }
  },

将require块中的版本更改为您的新版本,例如

  "burnthebook/craft3-ticketsolve": "dev-master",

Burnthebook提供