使用Expression Engine创建单个事件ICS文件

时间:2011-04-21 18:00:27

标签: php expressionengine icalendar

我正在尝试基于Expression Engine通道内的单个条目创建ICAL文件,但我完成此操作的方法失败了。我尝试了以下内容:

  1. 将条目ID传递到新模板(创建文件)但使用$_GET函数似乎在EE中不受欢迎
  2. 使用条目ID创建会话变量,但似乎无法将此变量添加到{exp}查询中:

    {exp:channel:entries channel="gallery" entry_id="MY_PHP_VARIABLE" limit="1" show_future_entries="yes"}

  3. 每次使用fwrite()访问单个条目页面并直接链接到它时,我都没有尝试制作一个平面文件,但这似乎是一个代价高昂的举动。

    单击按钮时,有没有办法用PHP制作文件?也许解雇了页面中写的函数,所以我不需要传递或检测entry_id

2 个答案:

答案 0 :(得分:1)

我之前使用常规模板在输出中启用了PHP。

因此,您的iCal链接为/events/ical/{entry_id},您的events.group/ical.html模板应如下所示:

{exp:channel:entries channel="events" sort="asc" show_future_entries="yes" limit="1" require_entry="yes" disable="member_data|categories|pagination"}
<?php
header('Content-type: text/calendar');
header('Content-Disposition: attachment; filename="event-{entry_date format="%Y-%m-%d"}.ics"');
?>
BEGIN:VCALENDAR
PRODID:MY GREAT EVENTS
VERSION:2.0
METHOD:PUBLISH
BEGIN:VEVENT
SUMMARY;CHARSET={charset}:{summary}
DESCRIPTION;CHARSET={charset}:{description}
LOCATION;CHARSET={charset}:{venue}, {address}
UID:{entry_date format="%Y%m%d"}-{entry_id}@mydomain.com
URL:{permalink="events/detail"}
DTSTART;VALUE=DATE:{entry_date format="%Y%m%d"}
DTSTAMP:{entry_date format="%Y%m%d"}T000000Z
END:VEVENT
END:VCALENDAR
{/exp:channel:entries}

细节可能会有所不同,具体取决于您是使用日期字段的时间部分还是专用时间字段等,但您明白了。

答案 1 :(得分:1)

不确定你是否仍然需要这个,但我需要完全相同的东西并写了一个插件来处理它。

https://github.com/expressodev/easy_icalendar

基本上,用法只围绕标准的频道条目标签,所以看起来像这样

{exp:easy_ical:calendar timezone="Pacific/Auckland" name="My Easy Event Calendar"}
    {exp:channel:entries channel="events" show_future_entries="yes" show_expired="yes" limit="20"}
        {exp:easy_ical:event uid="{entry_id}" start_time="{entry_date}" end_time="{expiration_date}" location="{event_location}" summary="{title}"}
            {event_description}
        {/exp:easy_ical:event}
    {/exp:channel:entries}
{/exp:easy_ical:calendar}

单击按钮时,可以使用它显示单个条目。只需创建一个名为/events/ical的新模板,然后使用网址/events/ical/url-title(或entry_id)引用它。

然后在您的频道条目循环中,使用标准

{exp:channel:entries channel="events" url_title="{segment_3}"}

Easy iCal将吐出有效的可下载的ics文件。如果您希望链接具有* .ics扩展名(某些读者很挑剔),请将entry_id放在段3中,将文件名放在段4中:

<a href="/events/ical/{entry_id}/{url_title}.ics">

然后只需使用您的ical模板中的entry_id,然后忽略第4段