$ composer require geniv/nette-calendar
or
"geniv/nette-calendar": ">=1.0.0"
require:
"php": ">=7.0.0",
"nette/nette": ">=2.4.0",
"geniv/nette-general-form": ">=1.0.0"
neon configure:
# calendar
calendar:
# autowired: true
# processor: Calendar\Processor
offsetDay: 7 # offset next day
firstDay: 0 # number first day
lastDay: 6 # number last day
fromTime: 11 # number from hour (modify)
countBlock: 10 # count block hour (modify)
stepBlock: "+1 hour +30 minute" # offset hour (modify)
must implemented interface: Calendar\IProcessor
with process method for self logic calendar
neon configure extension:
extensions:
calendar: Calendar\Bridges\Nette\Extension
onInactiveDate(DateTime $date)
onSelectDate(DateTime $date)
$weekCalendar->setLoadData(array $dates);
$weekCalendar->addVariableTemplate('game', $game);
$weekCalendar->selectDate($date);
usage:
protected function createComponentWeekCalendar(WeekCalendar $weekCalendar): WeekCalendar
{
$dates = $this->reservationModel->getList()->where(['active' => true])->fetchPairs('id', 'date');
$weekCalendar->setLoadData($dates);
// setting calendar
$weekCalendar->setFromTime(11);
$weekCalendar->setCountBlock(10);
$weekCalendar->setStepBlock('+2 hour');
// $weekCalendar->setTemplatePath(__DIR__ . '/templates/WeekCalendar.latte');
$weekCalendar->onInactiveDate[] = function (DateTime $date) {
// callback inactive row
};
$weekCalendar->onSelectDate[] = function (DateTime $date) {
$this->template->datum = $date;
$this['reservationForm']->setDefaults([
'date' => $date,
]);
if ($this->isAjax()) {
$this->redrawControl('reservationSnippet');
}
};
return $weekCalendar;
}
usage:
{control weekCalendar}
...
{snippet reservationSnippet}
{ifset $datum}
{$datum|date:'d.m.Y H:i'}
{control reservationForm}
{/ifset}
{/snippet}