sclinternet/bm-calendar

提供封锁天数功能的日历模块。

dev-master 2013-07-18 08:03 UTC

This package is not auto-updated.

Last update: 2024-09-23 14:03:22 UTC


README

Build Status Coverage Status

提供封锁天数功能的日历模块。

安装

可以通过运行 composer 来轻松完成安装:

composer.php require sclinternet/bm-calendar

当提示输入版本号时,请输入 dev-master

在 composer 完成后,简单地将 BmCalendar 添加到您应用程序配置中的 modules 部分。

基本用法

只需创建一个像这样的日历:

$calendar = new \BmCalendar\Calendar();

然后使用视图辅助函数在视图中显示一个月

echo $this->calendar($calendar)->showMonth(2013, 05);

视图辅助函数

默认情况下,视图辅助函数将通过 BmCalendar\Renderer\HtmlCalendar 创建的简单 HTML 表格渲染月份。

更改开始日

默认情况下,日历将以星期一作为第一列的开始,如果您想更改这一点,可以像这样调用视图辅助函数。

echo $this->calendar($calendar)
          ->setStartDay(\BmCalendar\DayInterface::WEDNESDAY)
          ->showMonth(2013, 5);

渲染器类

您还可以通过实现 BmCalendar\Renderer\RendererInterface 来创建自己的渲染器类,然后像这样告诉视图辅助函数使用您的渲染器:

echo $this->calendar($calendar)->setRenderer(new MyRenderer())->showMonth(2013, 5);

部分

或者,您可以通过使用部分模板来自定义渲染过程。

为此,只需像这样调用视图辅助函数:

echo $this->calendar($calendar)->setPartial('partial-name')->showMonth(2013, 5);

部分将传递以下参数

  • $startDay - 日历开始的那一周的星期数(int 1-7)
  • $calendar - BmCalendar\Calendar 的实例
  • $month - 要渲染的月份(int)
  • $year - 要渲染的月份所属的年份(int)

日提供者

日提供者用于向日历中的某一天添加额外状态。

状态必须实现 \BmCalendar\State\DayStateInterface

日提供者可以像这样实现:

use BmCalendar\DayProviderInterface;
use BmCalendar\Day;
use BmCalendar\Month;

class MyDayProvider implements DayProviderInterface
{
    public $database;

    public function createDay(Month $month, $dayNo)
    {
        $day = new Day($month, $dayNo);

        $avaliable = $this->database->checkAvailability(
            $month->getYear()->value(),
            $month->value(),
            $dayNo
        );

        if (!$available) {
            $day->addState(new BookedState());

            return $day;
        }

        $day->addState(new AvailableState());
        $day->setAction('http://url-to-booking-form');

        return $day;
    }
}

要使用您的日提供者,只需将其传递给日历构造函数,像这样:

$provider = new MyDayProvider();
$provider->database = new AvailabilityDatabasesChecker();

$calendar = new \BmCalendar\Calendar($provider);

日状态

日状态允许您向日历中的某一天添加值(例如,如果那天有活动)。

创建日状态类

日状态是一个实现了 BmCalendar\State\DayStateInterface 的类,它提供了一个简单的静态方法 type() 来标识状态。

还有一个 BmCalendar\State\AbstractDayState 类可用,它可以直接扩展,这将为您实现 type() 方法。

您可以像这样快速定义状态:

use BmCalendar\State\AbstractDayState;

class HasEventState extends AbstractDayState
{
}

使用日状态

要将状态添加到 Day 对象,只需调用 addState($state) 方法

$day->addState(new HasEventState())

要获取附加到 Day 对象的所有状态的列表,您可以调用

$day->getStates();

如果您想检查给定天上的特定类型的状态,可以使用静态 type() 方法,像这样

$state = $day->getState(HasEventState::type());

如果 Day 不包含请求类型的状态,则返回 NULL