carlescliment/calendar-bundle

用于处理日历事件的工具包

安装次数: 18,591

依赖关系: 0

建议者: 0

安全: 0

星级: 40

关注者: 8

分支: 16

开放问题: 9

类型:symfony-bundle

2.5.3 2016-03-30 15:11 UTC

README

Build Status

CalendarBundle 提供了一个内置的日历,用于管理事件,无需依赖第三方服务如 Google。它包含四个不同的默认视图:日程表、按天、按周和按月。如果您需要更多定制,可以使用工具包作为简单的日历 API,并在其基础上构建自己的逻辑。

安装

1. 更新您的供应商

将以下行添加到您的 composer.json

"require": {
    "carlescliment/calendar-bundle": "dev-master"
}

执行 php composer.phar update carlescliment/calendar-bundle

2. 在 app/AppKernel.php 中加载工具包

$bundles = array(
    // ...
    new BladeTester\CalendarBundle\BladeTesterCalendarBundle(),
);

3. 更新您的路由

// ...

BladeTesterCalendarBundle:
    resource: "@BladeTesterCalendarBundle/Resources/config/routing.yml"
    prefix:   /

4. 创建您的日历工具包

创建一个新的工具包,扩展 BladeTesterCalendarBundle

namespace Your\OwnCalendarBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class YourOwnCalendarBundle extends Bundle
{

   public function getParent()
    {
        return 'BladeTesterCalendarBundle';
    }
}

警告:如果您的工具包包含自己的路由文件,请记住删除它或完全覆盖父工具包的路径。

将其添加到 AppKernel。

    $bundles = array(
        // ...
        new Your\OwnCalendarBundle\YourOwnCalendarBundle(),
    );

5. 更新架构

php app/console doctrine:schema:update --force

6. 安装资产

php app/console assets:install

使用日历

访问 http://www.example.com/calendar 并享受吧 :)

定制工具包

如果您想覆盖工具包的默认视图以使用您的设计和标记,请按照以下步骤操作。

1. 覆盖默认基本模板

Resources/views/Base/base.html.twig 中的模板复制到您自己的工具包中,并修改它以扩展基本模板。

2. 将资产添加到基本模板

<script type="text/javascript" src="{{ asset('bundles/bladetestercalendar/js/jquery-1.9.1.min.js') }}"></script>
<link rel="stylesheet" href="{{ asset('bundles/bladetestercalendar/css/calendar.css') }}" />
<script type="text/javascript" src="{{ asset('bundles/bladetestercalendar/js/calendar.js') }}"></script>

注意:如果您的模板已包含 jQuery,请删除包含 jQuery 的行。

如何覆盖默认实体

您可以定义自己的实体。首先,创建您自定义的实体

namespace Your\OwnCalendarBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use BladeTester\CalendarBundle\Entity\Event as BaseEvent;


/**
 * @ORM\Entity(repositoryClass="BladeTester\CalendarBundle\Repository\EventRepository")
 * @ORM\Table(name="events")
 */
class Event extends BaseEvent
{
  // ... your implementation goes here
}

然后修改您的 app/config/config.yml

    blade_tester_calendar:
        driver: doctrine/orm
        engine: twig
        classes:
            event:
                entity: Your\OwnBundle\Entity\Event
            category:
                entity: Your\OwnBundle\Entity\EventCategory

扩展行为

通过在您的模型和实体中使用继承,可以轻松扩展此工具包的行为。如果还不够,您可以注册监听器来处理日历事件。

持久化前事件

在项即将被创建到数据库中时触发。

    your_own_calendar_listener:
        class: Your\OwnCalendarBundle\Event\CalendarListener
        tags:
          - { name: kernel.event_listener, event: calendar.pre-persist, method: onPrePersist }
namespace Your\OwnCalendarBundle\Event;

use BladeTester\CalendarBundle\Event\CalendarEvent;

class CalendarListener {

    public function onPrePersist(CalendarEvent $event) {
        $event_model = $event->getEvent();
        // do whatever with the object before persisting it.
    }
}

添加后事件

在项被添加到数据库后触发。

    your_own_calendar_listener:
        class: Your\OwnCalendarBundle\Event\CalendarListener
        tags:
          - { name: kernel.event_listener, event: calendar.post-add, method: onPostAdd }

更新后事件

在项被更新后触发。

    your_own_calendar_listener:
        class: Your\OwnCalendarBundle\Event\CalendarListener
        tags:
          - { name: kernel.event_listener, event: calendar.post-update, method: onPostUpdate }

测试

CalendarBundle 包含单元测试和功能测试。下载工具包,根据 travis.yml 文件创建数据库,并在 src/BladeTester/CalendarBundle/Tests/App/parameters.ini 中配置访问设置。运行以下命令

cd /path/to/calendar-bundle
composer update
php vendor/bin/phpunit

致谢

贡献和反馈

任何反馈和贡献都将非常受欢迎。