, (*1)
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
Π²Π½ΡΡΡΠΈ ΠΊΠ°Π»Π΅Π½Π΄Π°ΡΡ Ρ ΡΠ°Π·Π±ΠΈΠ²ΠΊΠΎΠΉ
ΠΏΠΎ Π½Π΅Π΄Π΅Π»ΡΠΌ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΡΡΠ°ΠΌ., (*2)
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅ΡΠ΅Π· Composer:, (*3)
$ composer require understeam/yii2-calendar-widget:^0.1 --prefer-dist
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ vendor, Π° Π΅Π³ΠΎ ΠΊΠ»Π°ΡΡΡ Π±ΡΠ΄ΡΡ
Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½ understeam\calendar
., (*4)
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ°
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ - ΠΊΠ°ΠΊΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Π²Ρ ΠΆΠ΅Π»Π°Π΅ΡΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡ Π² ΠΊΠ°Π»Π΅Π½Π΄Π°ΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,
app\models\Event
. ΠΡΠ±ΡΠ°Π½Π½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
understeam\calendar\ItemInterface
, Π° ΡΠ°ΠΊ ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ (trait)
understeam\calendar\ActiveRecordItemTrait
, (*5)
<?php
namespace app\models;
use understeam\calendar\ItemInterface;
use understeam\calendar\ActiveRecordItemTrait;
class Event extends \yii\db\ActiveRecord implements ItemInterface
{
use ActiveRecordItemTrait;
}
Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:, (*6)
'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
Π² Π½ΡΠΆΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ:, (*7)
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(' '))}")
],
],
],
];
}
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°Π»Π΅Π½Π΄Π°ΡΡ ΠΊΠ°ΠΊ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°
ΠΡΠΎΡ Π²Π°ΡΠΈΠ°Π½Ρ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ.
Π‘ ΡΡΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, Ρ.ΠΊ. Π² Π²ΠΈΠ΄ΠΆΠ΅Ρ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ
, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:, (*8)
-
grid
- ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΡΠ΅ΡΠΊΠΈ ΠΊΠ°Π»Π΅Π½Π΄Π°ΡΡ
-
viewMode
- ΡΠ΅ΠΆΠΈΠΌ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° (Π½Π΅Π΄Π΅Π»Ρ / ΠΌΠ΅ΡΡΡ)
-
period
- ΠΠ±ΡΠ΅ΠΊΡ DatePeriod
, Π³Π΄Π΅ Π½Π°ΡΠ°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ - ΡΡΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ±ΡΠ°Π½ Π² ΠΊΠ°Π»Π΅Π½Π΄Π°ΡΠ΅
-
calendar
- ΠΠ°ΡΠ»Π΅Π΄Π½ΠΈΠΊ CalendarInterface
, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΊΠ°Π»Π΅Π½Π΄Π°ΡΡ
ΠΠ±ΡΡΡ Π»ΠΎΠ³ΠΈΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΡ Π² CalendarAction
., (*9)
ΠΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ ΡΠ»ΡΡΡΠΈΡΡ ΠΏΡΡΡΠΌ Π²Π²Π΅Π΄Π΅Π½ΠΈΡ ΡΡΡΠ½ΠΎΡΡΠΈ CalendarGrid
, Π² ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ
Π²ΡΠ½Π΅ΡΠ΅Π½ΠΎ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠΊΠΈ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΎΠ²., (*10)
ΠΠ»Π°Π½Ρ
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΠ°Π»Π΅Π½Π΄Π°ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ActiveRecord
, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ
ΡΠ²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ-Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊ CalendarInterface
Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ Π·Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ
. Π Π±ΡΠ΄ΡΡΠ΅ΠΌ
ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠ»Π°ΡΡ ΠΊΠ°Π»Π΅Π½Π΄Π°ΡΡ, Π±Π΅Π· ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΊ ActiveRecord
., (*11)