philkingston / calendar-bundle
此插件允许您将jQuery FullCalendar插件集成到您的Symfony2应用程序中。
dev-master
2018-01-24 16:35 UTC
Requires
- doctrine/collections: >=1.0
- friendsofsymfony/jsrouting-bundle: ~1.1|^2.0
- fullcalendar/fullcalendar: ~3.0
- symfony/framework-bundle: ~2.1|^3.0
This package is not auto-updated.
Last update: 2024-09-28 15:00:21 UTC
README
此插件允许您将jQuery FullCalendar插件集成到您的Symfony2应用程序中。
安装后,此插件将使用事件监听器从您的应用程序中的任何插件加载事件。
安装
在安装之前,请注意,此插件依赖于FOSJsRouting插件来公开日历AJAX事件加载路由。请确保在继续之前安装并配置了FOSJsRouting插件。
通过Composer(Symfony 2.1+)
在您的composer.json
文件中添加以下行
"require": { "adesigns/calendar-bundle": "dev-master" }
运行Composer以下载并安装插件
$ php composer.phar update adesigns/calendar-bundle
在app/AppKernel.php
中注册插件
// app/AppKernel.php public function registerBundles() { return array( // ... new ADesigns\CalendarBundle\ADesignsCalendarBundle(), ); }
在app/config/routing.yml
中注册路由
# app/config/routing.yml adesigns_calendar: resource: "@ADesignsCalendarBundle/Resources/config/routing.xml"
发布资产
$ php app/console assets:install web
用法
将所需的样式表和JavaScript添加到您的布局中
样式表
<link rel="stylesheet" href="{{ asset('bundles/adesignscalendar/css/fullcalendar/fullcalendar.css') }}" />
JavaScript
<script type="text/javascript" src="{{ asset('bundles/adesignscalendar/js/jquery/jquery-1.8.2.min.js') }}"></script>
<script type="text/javascript" src="{{ asset('bundles/adesignscalendar/js/fullcalendar/jquery.fullcalendar.min.js') }}"></script>
<script type="text/javascript" src="{{ asset('bundles/adesignscalendar/js/calendar-settings.js') }}"></script>
然后,在您希望显示日历的模板中,添加以下twig
{% include 'ADesignsCalendarBundle::calendar.html.twig' %}
添加事件
此插件最好的部分是您可以从应用程序的任何部分添加事件到日历。日历通过AJAX加载事件,并发送事件以从应用程序中加载日历事件。
当请求加载特定开始/结束时间的事件时,插件会触发一个calendar.load_events
事件。添加事件监听器是一个简单的2步过程
在您的插件中创建一个事件监听器类
// src/Acme/DemoBundle/EventListener/CalendarEventListener.php namespace Acme\DemoBundle\EventListener; use ADesigns\CalendarBundle\Event\CalendarEvent; use ADesigns\CalendarBundle\Entity\EventEntity; use Doctrine\ORM\EntityManager; class CalendarEventListener { private $entityManager; public function __construct(EntityManager $entityManager) { $this->entityManager = $entityManager; } public function loadEvents(CalendarEvent $calendarEvent) { $startDate = $calendarEvent->getStartDatetime(); $endDate = $calendarEvent->getEndDatetime(); // load events using your custom logic here, // for instance, retrieving events from a repository $companyEvents = $this->entityManager->getRepository('AcmeDemoBundle:MyCompanyEvents') ->createQueryBuilder('company_events') ->where('company_events.event_datetime BETWEEN :startDate and :endDate') ->setParameter('startDate', $startDate->format('Y-m-d H:i:s')) ->setParameter('endDate', $endDate->format('Y-m-d H:i:s')) ->getQuery()->getResults(); foreach($companyEvents as $companyEvent) { // create an event with a start/end time, or an all day event if ($companyEvent->getAllDayEvent() === false) { $eventEntity = new EventEntity($companyEvent->getTitle(), $companyEvent->getStartDatetime(), $companyEvent->getEndDatetime()); } else { $eventEntity = new EventEntity($companyEvent->getTitle(), $companyEvent->getStartDatetime(), null, true); } //optional calendar event settings $eventEntity->setAllDay(true); // default is false, set to true if this is an all day event $eventEntity->setBgColor('#FF0000'); //set the background color of the event's label $eventEntity->setFgColor('#FFFFFF'); //set the foreground color of the event's label $eventEntity->setUrl('http://www.google.com'); // url to send user to when event label is clicked $eventEntity->setCssClass('my-custom-class'); // a custom class you may want to apply to event labels //finally, add the event to the CalendarEvent for displaying on the calendar $calendarEvent->addEvent($eventEntity); } } }
日历上每个事件的额外属性和自定义可以在Entity/EventEntity类中找到。
然后,将监听器添加到您的服务中
<?xml version="1.0" ?> <container xmlns="https://symfony.com.cn/schema/dic/services"> <services> <service id="acme.demobundle.calendar_listener" class="Acme\DemoBundle\EventListener\CalendarEventListener"> <argument type="service" id="doctrine.orm.entity_manager" /> <tag name="kernel.event_listener" event="calendar.load_events" method="loadEvents" /> </service> </services> </container>
就是这样!当ADesignsCalendarBundle::calendar.html.twig
模板渲染时,任何在当前月份/天/年的事件都将从您的应用程序中提取。