markocupic/calendar-event-booking-bundle

Contao CMS日历事件预订扩展


README

事件预订

此Contao CMS扩展通过登记表单进行事件预订。提供多种预订状态。如果事件已满员,从版本6.0开始,有兴趣的访客可以加入候补名单。登记表单可以在Contao表单生成器中创建。在安装过程中,该扩展提供了一个示例登记表单,应满足基本要求。表单的值存储在数据库中的tl_cebb_registration中,并在后端可见,可通过CSV文件导出。

通知

事件组织者和参与者可以通过通知中心在事件预订和事件取消预订时收到通知。

前端模块

事件登记表单

使用前端模块,可以在事件阅读器页面上显示事件登记表单。在模块设置中将链接设置与Contao表单生成器中的相应表单相关联。重要!登记表单从URL中获取事件名称。因此,事件别名或事件ID必须强制包含在URL参数中。因此,登记表单理想情况下应始终与事件阅读器模块结合使用。

列出前端已注册的成员

使用另一个前端模块,可以列出已注册到事件的个人。重要!列出模块从URL中获取事件名称。因此,事件别名或事件ID必须强制包含在URL参数中。因此,成员列表模块理想情况下应始终与事件阅读器模块结合使用。

从事件中注销

该扩展还提供了一种从事件中注销的方法。通过通知中心,可以向参与者发送注销链接(##member_cancelRegistrationUrl##)。创建相应的模块并将其绑定到页面结构中的新页面上。您可以选择不在导航中显示此页面。然后,在日历设置中指定事件注销表单所在的页面。

作为CSV文件下载事件参与者(正确设置编码)

事件参与者可以在后端作为CSV文件(Excel)下载。在config/config.yaml中可以设置编码。默认情况下,数据以UTF-8格式导出。可能存在Excel(根据相应设置)错误表示重音符号的问题。如果将config/config.yaml相应地修改为在导出之前将内容从UTF-8转换为ISO-8859-1,则可以解决此问题。

markocupic_calendar_event_booking:
  member_list_export:
    enable_output_conversion: true
    convert_from: 'UTF-8'
    convert_to: 'ISO-8859-1'

设置:推荐流程

  1. 创建日历和事件。
  2. 创建“事件列表”和“事件阅读器”前端模块。
  3. 如果尚未创建,创建电子邮件网关(通知中心)。
  4. (可选)在通知中心创建“事件预订通知”类型的通知。
  5. (可选)在通知中心创建“事件取消预订通知”类型的通知。
  6. 在Contao表单生成器中调整自动生成的表单,并准备所需字段(可能需要DCA调整)。
  7. 在表单中不要指定重定向页面。必须在前端模块(下一步)中设置。
  8. 创建前端模块“事件预订表单”,并在模块设置中选择在第6点创建的表单,并指定跳转页面。
  9. 将3个创建的模块(事件列表、事件阅读器和事件预订表单)绑定到Contao页面和文章结构中(注意!事件预订表单和事件阅读器属于同一页面)。
  10. 可选:创建前端模块“事件取消预订表单”,并将其绑定到为该目的创建的额外页面上。带有取消预订表单的页面必须在日历设置中注册。
  11. 可选:创建前端模块“事件成员列表”,并将其绑定到带有事件阅读器模块的页面上。
  12. 为所有事件配置预订、通知和取消预订选项。
  13. 在日历设置中指定“事件取消预订表单”所在的页面。

第4点:在通知中心配置电子邮件通知

在提交表单时,向参与者发送一条或几条消息,或将副本发送给活动组织者,并使用简单令牌

使用##member_cancelRegistrationUrl##可以发送一个受令牌保护的取消预订链接。但是,必须在事件中允许事件取消预订。还应创建所需的“事件取消预订表单”前端模块,并将其绑定到页面上。

在通知中心中使用简单令牌

参与者:##member_gender##(男、女或其他)、##member_salutation##(翻译:先生或女士)、##member_email##、##member_firstname##、##member_street##等。(来自tl_cebb_registration的字段名称)

事件:##event_title##、##event_street##、##event_postal##、##event_location##、##event_unsubscribeLimitTstamp##等。(来自tl_calendar_events的字段名称)

电子邮件发送者:##sender_name##、##sender_email##等。(来自tl_user的字段名称)

通知中心示例文本

{if member_gender=='Männlich'}
Sehr geehrter Herr ##member_firstname## ##member_lastname##
{elseif member_gender=='Weiblich'}
Sehr geehrte Frau ##member_firstname## ##member_lastname##
{else}
Hallo ##member_firstname## ##member_lastname##
{endif}

Hiermit bestätigen wir den Eingang Ihre Buchungsanfrage zur Veranstaltung "##event_title##" vom ##event_startDate##.

Buchungsstatus: ##member_bookingState##.

Bitte beachten Sie, dass Ihre Teilnahme erst nach erfolgter Prüfung definitiv wird. Sie erhalten dazu in den nächsten 1-2 Werktagen von uns die definitive Buchungsbestätigung.

Ihre Angaben:
Name/Vorname: ##member_firstname## ##member_lastname##
Adresse: ##member_street##, ##member_postal##, ##member_city##
Telefon: ##member_phone##
E-Mail: ##member_email##
Begleitpersonen: ##member_escorts##

{if enableUnsubscription=='1'}
Bitte benutzen Sie folgenden Link, um sich wieder von der Veranstaltung abzumelden:
##member_cancelRegistrationUrl##
{endif}

Freundliche Grüsse

##sender_name##

使用通知中心时的所有简单令牌概述

Array
(
    [admin_email] => admin@mi6.com
    [member_id] => 26
    [member_pid] => Testevent 2
    [member_tstamp] => 08.09.2021 21:26
    [member_eventState] => waiting_list
    [member_dateAdded] => 08.09.2021 21:26
    [member_notes] => Tomorrow never dies!
    [member_salutation] => Herr
    [member_firstname] => James
    [member_lastname] => Bond
    [member_gender] => Männlich
    [member_dateOfBirth] => 12. März 1976
    [member_street] => Casino Royale
    [member_postal] => 66666
    [member_city] => London
    [member_phone] => 23123
    [member_email] => 007@mi6.com
    [member_escorts] => 0
    [member_uuid] => d47636dd-7606-4f0b-ad8d-82461abde483
    [cart_id] => 3
    [order_id] => 1
    [order_orderUuid] => d47655xx-7606-4f0b-ad8d-82461abde483
    [event_id] => 3
    [event_pid] => Events
    [event_tstamp] => 08.09.2021 14:04
    [event_title] => Testevent 2
    [event_alias] => testevent-2
    [event_author] => Eve Moneypenny
    [event_addTime] => nein
    [event_startTime] => 00:00
    [event_endTime] => 23:59
    [event_startDate] => 16. September 2021
    [event_endDate] => 8. September 2021
    [event_location] => London
    [event_teaser] => Casino Royal
    [event_enableUnsubscription] => ja
    [event_eventBookingNotificationSender] => Eve Moneypenny
    [event_eventBookingNotification] => Event Buchungs Benachrichtigung
    [event_enableBookingNotification] => ja
    [event_maxEscortsPerMember] => 0
    [event_maxQuantityPerRegistration] => 0
    [event_maxMembers] => 11
    [event_bookingStartDate] => 7. Juni 2021
    [event_bookingEndDate] => 15. September 2021
    [event_enableBookingForm] => ja
    [event_location] => Nothingham
    [event_postal] => 6666
    [event_street] => black corner 2
    [event_allowDuplicateEmail] => ja
    [event_unsubscribeLimitTstamp] => 12.08.2021 16:40
    [event_minMembers] => 0
    [sender_id] => 1
    [sender_username] => eve.moneypenny
    [sender_name] => Eve Moneypenny
    [sender_email] => em@mi6.com
    [sender_language] => de,
    // etc.
)

第5点:创建事件预订表单

在扩展安装后的首次访问页面时,将自动生成一个包含所有所需字段的示例表单。**重要!!!表单中必须启用“激活事件预订表单功能”复选框**。其他设置无需强制执行。更多信息请参考表单生成器设置。以下字段在提供的表单中默认存在,并在数据库表tl_cebb_registration中设置:firstnamelastnamegenderdateOfBirthstreetpostalcityphoneemailquantity1escorts2notes

1 如果您希望将字段中输入的整数加到参与者总数中,请使用quantity字段。默认情况下(即使该字段在表单中省略),此值也为1。该字段在以下场景中有意义,即应允许一个人预订多张票。

2 如果涉及的是不需要加到参与者总数中的陪同人员,请使用escorts字段。

如果需要其他字段,则必须在contao/dca/tl_cebb_registration.php中定义它们。

通知中心示例文本

{if member_gender=='Männlich'}
Sehr geehrter Herr ##member_firstname## ##member_lastname##
{elseif member_gender=='Weiblich'}
Sehr geehrte Frau ##member_firstname## ##member_lastname##
{else}
Hallo ##member_firstname## ##member_lastname##
{endif}

Hiermit bestätigen wir den Eingang Ihre Buchungsanfrage zur Veranstaltung "##event_title##" vom ##event_startDate##.

Buchungsstatus: ##member_bookingState##.

Bitte beachten Sie, dass Ihre Teilnahme erst nach erfolgter Prüfung definitiv wird. Sie erhalten dazu in den nächsten 1-2 Werktagen von uns die definitive Buchungsbestätigung.

Ihre Angaben:
Name/Vorname: ##member_firstname## ##member_lastname##
Adresse: ##member_street##, ##member_postal##, ##member_city##
Telefon: ##member_phone##
E-Mail: ##member_email##
Begleitpersonen: ##member_escorts##

{if event_enableUnsubscription=='ja'}
Bitte benutzen Sie folgenden Link, um sich wieder von der Veranstaltung abzumelden:
##member_cancelRegistrationUrl##
{endif}

Freundliche Grüsse

##organizer_name##

使用通知中心时的所有简单令牌概述

Array
(
    [admin_email] => admin@mi6.com
    [member_id] => 26
    [member_pid] => Testevent 2
    [member_tstamp] => 08.09.2021 21:26
    [member_bookingState] => cebb_booking_state_confirmed
    [member_dateAdded] => 08.09.2021 21:26
    [member_notes] => Tomorrow never dies!
    [member_salutation] => Herr
    [member_firstname] => James
    [member_lastname] => Bond
    [member_gender] => Männlich
    [member_dateOfBirth] => 12. März 1976
    [member_street] => Casino Royale
    [member_postal] => 66666
    [member_city] => London
    [member_phone] => 23123
    [member_email] => 007@mi6.com
    [member_quantity] => 1
    [member_escorts] => 0
    [member_uuid] => d47636dd-7606-4f0b-ad8d-82461abde483
    [member_cartUuid] => x34566dd-7606-4f0b-ad8d-82461abde483
    [member_orderUuid] => x34566dd-7606-4f0b-ad8d-82567abde112
    [order_uuid] => x34566dd-7606-4f0b-ad8d-82567abde112 // An order can contain multiple registrations
    [event_id] => 3
    [event_pid] => 1
    [event_tstamp] => 08.09.2021 14:04
    [event_title] => Testevent 2
    [event_alias] => testevent-2
    [event_author] => Eve Moneypenny
    [event_addTime] => nein
    [event_startTime] => 00:00
    [event_endTime] => 23:59
    [event_startDate] => 16. September 2021
    [event_endDate] => 8. September 2021
    [event_location] => London
    [event_teaser] => Lorem ipsum
    [event_enableUnsubscription] => ja
    [event_eventBookingNotificationSender] => Eve Moneypenny
    [event_eventBookingNotification] => Event Buchungs Benachrichtigung
    [event_enableBookingNotification] => ja
    [event_maxEscortsPerMember] => 0
    [event_maxMembers] => 11
    [event_bookingStartDate] => 7. Juni 2021
    [event_bookingEndDate] => 15. September 2021
    [event_enableBookingForm] => ja
    [event_location] => Nothingham
    [event_postal] => 6666
    [event_street] => black corner 2
    [event_allowDuplicateEmail] => ja
    [event_unsubscribeLimitTstamp] => 12.08.2021 16:40
    [event_minMembers] => 0
    [sender_id] => 1
    [sender_username] => eve.moneypenny
    [sender_name] => Eve Moneypenny
    [sender_email] => em@mi6.com
    [sender_language] => de
)

文档

<?php
// contao/dca/tl_cebb_registration.php

use Contao\CoreBundle\DataContainer\PaletteManipulator;

// Add a field to tl_cebb_registration
$GLOBALS['TL_DCA']['tl_cebb_registration']['fields']['foodHabilities'] = [
    'exclude'   => true,
    'search'    => true,
    'sorting'   => true,
    'inputType' => 'select',
    'options'   => ['vegetarian', 'vegan'],
    'eval'      => ['includeBlankOption' => true, 'tl_class' => 'w50'],
    'sql'       => "varchar(255) NOT NULL default ''",
];

// Add a new legend and the custom field to the default palette.
Contao\CoreBundle\DataContainer\PaletteManipulator::create()
    ->addLegend('food_legend', 'personal_legend', PaletteManipulator::POSITION_AFTER)
    ->addField(['foodHabilities'], 'food_legend', PaletteManipulator::POSITION_APPEND)
    ->applyToPalette('default', 'tl_cebb_registration');

第11点:在事件中激活电子邮件预订确认

在事件中,使用通知中心激活预订确认,选择一个通知,并指定一个具有有效电子邮件地址的发送者(tl_user)。更多信息请参考在事件中激活通知

模板变量

以下TWIG函数可用于所有TWIG模板

如何调整步骤模板?

在结账流程的每个步骤(默认情况下只有两个)中,您可以在/vendor/markocupic/calendar-event-booking-bundle/contao/templates/checkout下找到原始TWIG模板。您可以调整模板以符合您的需求,然后将其放置在/contao/templates下。在配置文件config/config.yaml中,还需要注册调整后的模板。之后,使用composer install重新构建Symfony缓存。

# config/config.yaml
markocupic_calendar_event_booking:
    checkout:
        default:
            steps:
                subscribe:
                    template: '@Contao_App/my_custom_checkout_step_subscribe.html.twig'
                finalize:
                    template: '@Contao_App/my_custom_checkout_step_finalize.html.twig'

使用事件监听器扩展/修改前端模块

尤其是“预订表单”模块可以很好地进行扩展。可以添加事件监听器来修改扩展的标准行为或扩展程序逻辑。