Jahresansicht > Andere Ausgabe: Jeweils Monate + Tage
Hallo zusammen,
ich möchte gerne eine Übersicht von Haupt-/Nebensaison und Betriebsferien darstellen,
am liebsten in dieser Form:
Code:
Januar
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ....
Februar
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ....
....
Jeweils farblich hinterlegt die Tagesfelder, je nach Status.
Dazu habe ich versucht, das Template zu bearbeiten, aber leider werden ja die Jahre zuerst und dann alle Tage ausgegeben.
Es also wäre toll, wenn ich in die Schleife der Monatsaufzählungen auch noch eine Schleife für die Tagesaufzählungen einsetzen könnte,
aber ich weiß nicht, wie ich die jeweiligen Tage des betreffenden Monats ansprechen soll. Es gibt doch nur die Gesamttage des Jahres, oder?
Ich habe schon versucht, im Quellcode "rumzuspielen", verstehe aber nicht genug, um eine Ausgabe hinzubekommen.
Gibt es da eine einfache Möglichkeit, die ich noch nicht erkannt habe oder wäre es vielleicht
möglich, dass hier die Funktionalität des Moduls erweitert werden könnte?
Danke für jeden Tipp.
Gruß
Jürgen
Liste der Anhänge anzeigen (Anzahl: 1)
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