isc.php库在PHP的foreach
我使用ics.php它工作正常,但有一个事件,但我怎么能从数据库添加多个事件?我怎样才能循环这样的:isc.php库在PHP的foreach
$ics = new ICS(array(
'id' => $event->id,
'location' => 'Mājās',
'description' => $event->description,
'dtstart' => $event->startdate,
'dtend' => $event->startdate,
'summary' => $event->title,
'url' => '',
'alarm' => ''
));
echo $ics->to_string();
但没有循环的所有类,但只有事件:
'id' => $event->id,
'location' => 'Mājās',
'description' => $event->description,
'dtstart' => $event->startdate,
'dtend' => $event->startdate,
'summary' => $event->title,
'url' => '',
'alarm' => ''
ics.php
只支持一个单一的事件。如果你想创建一个有多个事件的ICS战队,你可能需要自己构建文件。
幸运的是,文件格式非常简单,所以构建你自己的应该不会太难。
开始的地方是从ics.php
得到的输出,然后尝试自己重新创建它。一个ICS文件可以有多个事件块,所以只需重复该块几次,然后设置。
BEGIN:VCALENDAR
...
BEGIN:VEVENT
...
END:VEVENT
BEGIN:VEVENT
...
END:VEVENT
END:VCALENDAR
答到第二个问题
您在代码中有一些错误。
首先:您正在使用单引号结合\r\n
。 \r\n
仅在使用双引号时进行评估。
第二种:您正试图在字符串声明中将\r\n
与字面换行符结合使用。这将产生空线在你的目标文件
$cal = "BEGIN:VCALENDAR\r\n VERSION:2.0\r\n";
而不是$cal = "BEGIN:VCALENDAR\r\nVERSION:2.0\r\n";
这将分别导致
BEGIN:VCALENDAR
VERSION:2.0
和
BEGIN:VCALENDAR
VERSION:2.0
更新代码:
$events = ORM::for_table('events')->find_many();
$cal = "BEGIN:VCALENDAR\r\n";
$cal .= "VERSION:2.0\r\n";
$cal .= "PRODID:-//hacksw/handcal//NONSGML v1.0//EN\r\n";
$cal .= "CALSCALE:GREGORIAN\r\n";
foreach($events as $event){
$cal .= "BEGIN:VEVENT\r\n";
$cal .= "STATUS:CONFIRMED\r\n";
$cal .= "UID:" . $event->id . "\r\n";
$cal .= "LOCATION:\r\n";
$cal .= "DESCRIPTION:" . $event->description . "\r\n";
$cal .= "SUMMARY:" . $event->title . "\r\n";
$cal .= "DTSTART:" . $event->startdate . "\r\n";
$cal .= "DTEND:" . $event->startdate . "\r\n";
$cal .= "LAST-MODIFIED:\r\n";
$cal .= "END:VEVENT\r\n";
}
$cal .= "END:VCALENDAR\r\n";
echo $cal;
更新:
更改'$ cal。=“END:VEVENT”;“到'$ cal。=“结束:VEVENT \ r \ n”;'
不匹配的 'BEGIN' 和 'END'(:VEVENT,END::VEVENTBEGIN VEVENT BEGIN)缺少VCALENDAR对象5545 3.6.1。事件组件 无效的DTSTART值,必须是日期或日期时间值,靠近第5行 参考:3.3.5。日期时间 无效的DTEND值,必须是日期或日期时间值,靠近第5行 参考:3.3.5。约会时间 – aidron
在线验证器表示:邻近行#14 近线#缺少DTSTAMP属性5 参考:RFC邻近行#1 – aidron