Viele Wege führen zum Ziel. Mit dem IcalBundle könntest du in einem Controller in Contao 4 bspw. folgendes machen:
PHP-Code:
/**
* @Route("/ics/{eventId}")
*
* @return JsonResponse
*/
public function icsAction(Request $request, $eventId)
{
$this->container->get('contao.framework')->initialize();
$objEvent = CalendarEventsModel::findById($eventId);
if (null === $objEvent)
{
throw new NotFoundHttpException('Event not found.');
}
$provider = $this->get('bomo_ical.ics_provider');
$tz = $provider->createTimezone();
$tz->setTzid('Europe/Paris')
->setProperty('X-LIC-LOCATION', $tz->getTzid());
$cal = $provider->createCalendar($tz);
$cal->setName('Calendar Name');
$event = $cal->newEvent();
$event->setStartDate(new \Datetime($objEvent->startTime));
if ($eventData->endDate)
{
$event->setEndDate(new \Datetime($eventData->endTime));
}
$event->setName($objEvent->title);
$calStr = $cal->returnCalendar();
return new Response(
$calStr,
200,
array(
'Content-Type' => 'text/calendar; charset=utf-8',
'Content-Disposition' => 'attachment; filename="event.ics"',
)
);
}
In Contao 3 musst du dir halt irgendwo einen Einstiegspunkt schaffen, wo du etwas ähnliches machen kannst. Dabei kann dir generell iCalcreator behilflich sein. Du könntest das auch notfalls in einem Template machen, wo du den Response ausgibst und mit exit aussteigst.
Lesezeichen