Hallo Kester,
danke für die Rückmeldung, ich habe Contao 3.1.5 installiert, da MetaModels bei mir in 3.2 noch Probleme machte.
PS:
Ich habe nun mit meinen Laienkenntnissen aus deinem Code selbst etwas gebastelt (s. Anhang).
Template:
HTML-Code:
<?php $monthNames = array('Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'); ?>
<div class="saisonzeiten yearview full">
<?php if ($this->use_navigation): ?>
<div class="yearview-navi">
<?php if ($this->linkCurrent): ?>
<a class="yearview-navi-link current" href="<?php echo $this->currHref; ?>" title="<?php echo $this->currTitle; ?>"><?php echo $this->currLink; ?></a>
<?php endif; ?>
<a class="yearview-navi-link next" href="<?php echo $this->nextHref; ?>" title="<?php echo $this->nextTitle; ?>"><?php echo $this->nextLink; ?></a>
</div>
<?php endif; ?>
<div class="year">
<?php foreach ($this->monthdays as $md => $month): ?>
<div class="month">
<div class="month-name"><?php echo $monthNames[$md-1] ?></div>
<?php foreach ($month as $m => $day):
$eventClass = '';
foreach ($day['events'] as $e => $event): ?>
<?php if ($event):
if ($event['class']): $eventClass.= ' ' . $event['class']; endif; ?>
<?php endif; ?>
<?php endforeach; ?>
<div class="day<?php echo $eventClass ?>">
<?php if (!empty($day['label'])):
echo $day['label'] . '<br><span>' . $m . '</span>';
endif; ?>
</div>
<?php endforeach; ?>
</div> <!-- month -->
<?php endforeach; ?>
</div>
<div class="legende">
<p class="label hauptsaison">Hauptsaison</p>
<p class="label nebensaison">Nebensaison</p>
<p class="label betriebsferien">Betriebsferien</p>
</div>
</div>
Und deine Methode compileDays angepasst:
Code:
protected function compileMonthDays($currYear)
{
$arrDays = array();
//Get all events
$arrAllEvents = $this->getAllEventsExt($this->cal_calendar, $this->yearBegin, $this->yearEnd, array($this->cal_holiday));
for ($m=1; $m<=12; $m++)
{
for ($d=1; $d<=31; $d++)
{
if (checkdate($m, $d, $currYear))
{
$day = mktime(12, 00, 00, $m, $d, $currYear);
$intCurrentDay = (int)date('w', $day);
$intCurrentWeek = (int)date('W', $day);
$intKey = date("Ymd", strtotime(date("Y-m-d", $day)));
$currDay = \Date::parse($GLOBALS['TL_CONFIG']['dateFormat'], strtotime(date("Y-m-d", $day)));
$class = ($intCurrentDay == 0 || $intCurrentDay == 6) ? 'weekend' : 'weekday';
$class .= (($d % 2) == 0) ? ' even' : ' odd';
$class .= ' ' . strtolower($GLOBALS['TL_LANG']['DAYS'][$intCurrentDay]);
if ($currDay == \Date::parse($GLOBALS['TL_CONFIG']['dateFormat'], strtotime(date("Y-m-d"))) )
{
$class .= ' today';
}
$arrDays[$m][$d]['label'] = strtoupper(substr($GLOBALS['TL_LANG']['DAYS'][$intCurrentDay],0,2)) ;
$arrDays[$m][$d]['class'] = $class;
}
else
{
$intKey = 'empty';
$arrDays[$m][$d]['label'] = '';
$arrDays[$m][$d]['class'] = 'empty';
}
// Get all events of a day
$arrEvents = array();
if (is_array($arrAllEvents[$intKey]))
{
foreach ($arrAllEvents[$intKey] as $v)
{
foreach ($v as $vv)
{
// set class recurring
if ($vv['recurring'] || $vv['recurringExt'])
{
$vv['class'] .= ' recurring';
}
// set color from calendar
$vv['calendar_title'] = $this->calConf[$vv['pid']]['calendar'];
if ($this->calConf[$vv['pid']]['background'])
{
$vv['bgstyle'] = $this->calConf[$vv['pid']]['background'];
}
if ($this->calConf[$vv['pid']]['foreground'])
{
$vv['fgstyle'] = $this->calConf[$vv['pid']]['foreground'];
}
$arrEvents[] = $vv;
}
}
}
$arrDays[$m][$d]['events'] = $arrEvents;
}
}
return $arrDays;
}
}
Aber auf Dauer ist das natürlich suboptimal, bei der nächsten Erweiterung ist alles weg.
PS: Was ich noch toll fände, wäre eine Klassenzuweisung schon im Kalender.
Im Moment habe ich 3-4 Zeiträume für Haupt- und Nebensaison als Event.
Dort schreibe ich dann jeweils den Klassennamen rein.
Daran muss nur der Redakteur später auch wieder denken, wenn er einen neuen Block definiert.
Deshalb die Idee, 3 Kalender für Haupt-/Nebensaison + Betriebsferien, in denen bereits die Klasse hinterlegt ist.
Gruß
Jürgen