burnthebook / craft3-ticketsolve
从Ticketsolve XML源提取场馆、演出和活动,并保持您的网站同步。
Requires
- ext-simplexml: *
- craftcms/cms: ^4.0.0-RC1
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',''));
安装
要安装插件,请按照以下说明操作。
-
打开您的终端并转到您的Craft项目
cd /path/to/project
-
然后告诉Composer加载插件
composer require burnthebook/craft3-ticketsolve
-
在控制面板中,转到设置→插件,然后点击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()
- 支持大多数演出的属性,以及eventDateTime
、eventOpeningTime
和eventOnSaleTime
属性
演出元素有以下属性
-
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
- 返回一个标签数组。每个标签都有可用的id
和name
属性。 -
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()
- 支持大多数事件的属性,包括dateTime
、openingTime
和onSaleTime
属性
事件元素有以下属性
-
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提供