philkingston/calendar-bundle

此插件允许您将jQuery FullCalendar插件集成到您的Symfony2应用程序中。

安装: 238

依赖者: 0

建议者: 0

安全性: 0

星标: 0

关注者: 3

分支: 60

语言:CSS

类型:symfony-bundle

dev-master 2018-01-24 16:35 UTC

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模板渲染时,任何在当前月份/天/年的事件都将从您的应用程序中提取。