understeam / yii2-calendar-widget
Yii2日历小部件
v0.1.9
2019-05-31 17:33 UTC
Requires
- php: >=5.4
- ext-intl: *
- yiisoft/yii2: ^2.0
- yiisoft/yii2-bootstrap: ^2.0
Requires (Dev)
- phpunit/phpunit: ^5.4
This package is not auto-updated.
Last update: 2024-09-12 01:04:48 UTC
README
该组件旨在显示日历内部的数据,并按周或按月进行划分。
安装
通过 Composer 进行安装
$ composer require understeam/yii2-calendar-widget:^0.1 --prefer-dist
之后,组件将被安装到 vendor 目录,其类将在命名空间 understeam\calendar
中可用。
配置
首先需要了解您希望在日历中显示哪个模型。例如,app\models\Event
。所选模型应继承接口 understeam\calendar\ItemInterface
,并使用特性(trait)understeam\calendar\ActiveRecordItemTrait
<?php namespace app\models; use understeam\calendar\ItemInterface; use understeam\calendar\ActiveRecordItemTrait; class Event extends \yii\db\ActiveRecord implements ItemInterface { use ActiveRecordItemTrait; }
还需要将组件添加到应用程序的配置中
'components' => [ 'calendar' => [ 'class' => 'understeam\calendar\ActiveRecordCalendar', // Имя класса календаря 'modelClass' => 'app\models\Event', // Имя класса модели 'dateAttribute' => 'date', // Атрибут модели, в котором хранится дата (тип в БД timestamp или datetime) 'dateRange' => [time() + 86400, time() + 2592000] // период, в который будет доступно событие onClick // Так же в dateRange можно передать функцию, которая должна вернуть нужный массив в случае если нужны динамические вычисления // 'dateRange' => ['app\models\User', 'getCalendarRange'], 'filter' => [ // Фильтр ActiveQuery, который будет применён. Возможно указывать callable для фильтрации 'status' => 1, ], // Пример // 'filter' => function ($query, $startTime, $endTime) { // return $query->andWhere(['userId' => Yii::$app->user->id]); // }, // Или так // 'filter' => ['app\models\User', 'filterCalendarQuery'], ], ],
在控制器中连接
要在页面上显示日历,只需在所需控制器中添加 action
public function actions() { return [ 'calendar' => [ 'class' => 'understeam\calendar\CalendarAction', 'calendar' => 'calendar', // ID компонента календаря (да, можно подключать несколько) 'usePjax' => true, // Использовать ли pjax для ajax загрузки страниц 'widgetOptions' => [ // Опции виджета (см. CalendarWidget) 'clientOptions' => [ // Опции JS плагина виджета 'onClick' => new JsExpression('showPopup'), // JS функция, которая будет выполнена при клике на доступное время 'onFutureClick' => new JsExpression('buyPlan'), 'onPastClick' => new JsExpression('showError'), // Все эти функции принимают 2 параметра: date и time // Для тестирования можно использовать следующий код: // 'onClick' => new JsExpression("function(d,t){alert([d,t].join(' '))}") ], ], ], ]; }
作为小部件连接日历
此选项用于将小部件作为另一页面的部分进行连接。这有点复杂,因为需要将一些数据传递给小部件,具体包括
grid
- 日历网格的构建数组viewMode
- 查看模式(周/月)period
-DatePeriod
对象,其中开始和结束是日历中选择的时间段calendar
-CalendarInterface
的子类,日历组件
整体逻辑可以在 CalendarAction
中找到。
计划通过引入 CalendarGrid
实体来改进这一点,其中将包含网格的构建和确定时间段的方法。
计划
目前,日历已针对与 ActiveRecord
一起使用进行优化,但您可以为配置或数据提取编写自己的 CalendarInterface
组件继承者。将来计划开发一个简单的日历类,不依赖于 ActiveRecord
。