qlick / laravel-full-calendar
Laravel helper for FullCalendar.io. Fork of https://github.com/maddhatter/laravel-fullcalendar
Installs: 30 131
Dependents: 0
Suggesters: 0
Security: 0
Stars: 13
Watchers: 1
Forks: 28
Open Issues: 5
Requires
- php: ^7.1|^8.0
- illuminate/database: ^7.0|^8.0
- illuminate/support: ^7.0|^8.0
- laravel/helpers: ^1.0
README
This is a fork of https://github.com/nelkasovic/laravel-full-calendar. A simple helper package to make generating http://fullcalendar.io in Laravel apps easier. Because the package is abandoned I decided to fork and publish a version which should work with Laravel 6.
Installing
Require the package with composer using the following command:
composer require qlick/laravel-full-calendar
Or add the following to your composer.json's require section and composer update
"require": { "qlick/laravel-full-calendar": "~1.0" }
Laravel 5.4 (and earlier)
Register the service provider in your app.php
config file:
LaravelFullCalendar\FullCalendarServiceProvider::class,
And optionally create an alias:
'Calendar' => LaravelFullCalendar\Facades\Calendar::class,
Laravel 5.5+
The provider and Calendar
alias will be registered automatically.
You will also need to include fullcalendar.io's files in your HTML.
Usage
Creating Events
Using event()
:
The simpliest way to create an event is to pass the event information to Calendar::event()
:
$event = \Calendar::event( "Valentine's Day", //event title true, //full day event? '2020-02-14', //start time, must be a DateTime object or valid DateTime format (http://bit.ly/1z7QWbg) '2020-02-14', //end time, must be a DateTime object or valid DateTime format (http://bit.ly/1z7QWbg), 1, //optional event ID [ 'url' => 'http://full-calendar.io' ] );
Implementing Event
Interface
Alternatively, you can use an existing class and have it implement LaravelFullCalendar\Event
. An example of an Eloquent model that implements the Event
interface:
class EventModel extends Eloquent implements \LaravelFullCalendar\Event { protected $dates = ['start', 'end']; /** * Get the event's id number * * @return int */ public function getId() { return $this->id; } /** * Get the event's title * * @return string */ public function getTitle() { return $this->title; } /** * Is it an all day event? * * @return bool */ public function isAllDay() { return (bool)$this->all_day; } /** * Get the start time * * @return DateTime */ public function getStart() { return $this->start; } /** * Get the end time * * @return DateTime */ public function getEnd() { return $this->end; } }
IdentifiableEvent
Interface
If you wish for your existing class to have event IDs, implement \LaravelFullcalendar\IdentifiableEvent
instead. This interface extends \LaravelFullcalendar\Event
to add a getId()
method:
class EventModel extends Eloquent implements \LaravelFullcalendar\IdentifiableEvent { // Implement all Event methods ... /** * Get the event's ID * * @return int|string|null */ public function getId(); }
Additional Event Parameters
If you want to add additional parameters to your events, there are two options:
Using Calendar::event()
Pass an array of 'parameter' => 'value'
pairs as the 6th parameter to Calendar::event()
:
$event = \Calendar::event( "Valentine's Day", //event title true, //full day event? '2020-02-14', //start time, must be a DateTime object or valid DateTime format (http://bit.ly/1z7QWbg) '2020-02-14', //end time, must be a DateTime object or valid DateTime format (http://bit.ly/1z7QWbg), 1, //optional event ID [ 'url' => 'http://full-calendar.io', //any other full-calendar supported parameters ] );
Add an getEventOptions
method to your event class
<?php class CalendarEvent extends \Illuminate\Database\Eloquent\Model implements \LaravelFullcalendar\Event { //... /** * Optional FullCalendar.io settings for this event * * @return array */ public function getEventOptions() { return [ 'color' => $this->background_color, //etc ]; } //... }
Create a Calendar
To create a calendar, in your route or controller, create your event(s), then pass them to Calendar::addEvent()
or Calendar::addEvents()
(to add an array of events). addEvent()
and addEvents()
can be used fluently (chained together). Their second parameter accepts an array of valid FullCalendar Event Object parameters.
Sample Controller code:
$events = []; $events[] = \Calendar::event( 'Event One', //event title false, //full day event? '2020-02-11T0800', //start time (you can also use Carbon instead of DateTime) '2020-02-12T0800', //end time (you can also use Carbon instead of DateTime) 0 //optionally, you can specify an event ID ); $events[] = \Calendar::event( "Valentine's Day", //event title true, //full day event? new \DateTime('2020-02-14'), //start time (you can also use Carbon instead of DateTime) new \DateTime('2020-02-14'), //end time (you can also use Carbon instead of DateTime) 'stringEventId' //optionally, you can specify an event ID ); $eloquentEvent = EventModel::first(); //EventModel implements LaravelFullcalendar\Event $calendar = \Calendar::addEvents($events) //add an array with addEvents ->addEvent($eloquentEvent, [ //set custom color fo this event 'color' => '#800', ])->setOptions([ //set fullcalendar options 'firstDay' => 1 ])->setCallbacks([ //set fullcalendar callback options (will not be JSON encoded) 'viewRender' => 'function() {alert("Callbacks!");}' ]); return view('hello', compact('calendar'));
Sample View
Then to display, add the following code to your View:
<!doctype html> <html lang="en"> <head> <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.2.7/fullcalendar.min.js"></script> <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/2.2.7/fullcalendar.min.css"/> <style> /* ... */ </style> </head> <body> {!! $calendar->calendar() !!} {!! $calendar->script() !!} </body> </html>
Note: The output from calendar()
and script()
must be non-escaped, so use {!!
and !!}
(or whatever you've configured your Blade compiler's raw tag directives as).
The script()
can be placed anywhere after calendar()
, and must be after fullcalendar was included.
This will generate (in February 2020):