robtec20 / calendar-bundle
此包允许您将jQuery FullCalendar插件集成到您的Symfony2应用中。
v1.0.1
2019-04-24 16:21 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 auto-updated.
Last update: 2024-09-25 08:19:22 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
用法
将所需的样式表和javascripts添加到您的布局中
样式表
<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事件。添加事件监听器是一个简单的两步过程
在您的包中创建一个事件监听器类
// 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模板时,当前月份/天/年的任何事件都将从您的应用中提取。