Ich sollte für einen Minikalender ein paar Änderungen umsetzen. Da vielleicht Teile davon auch für andere Contao-Nutzer spannend sind, poste ich hier den entsprechenden Teil.
Folgendes wurde umgesetzt:
- Für jedes Event, wird ein eigenständiger Link generiert. Der Link verweist nicht wie üblich auf eine Event-Liste, sondern direkt auf die Detailseite des Termins (Reader).
- Außerdem wird für jedes Event ausgelesen, aus welchem Event-Archiv es stammt. Je nachdem, wird die ID des Archivs zu einer CSS-Klasse hinzugefügt. Das ermöglicht, dass man beispielsweise die Events farblich unterschiedlich hinterlegt anzeigt, je nachdem aus welcher Kategorie sie stammen.
Der Abschnitt aus meinem Template sieht so aus (Update 04.11.2015):
PHP-Code:
<table class="minicalendar">
<thead>
<tr>
<th class="head previous"><?php if ($this->prevHref): ?><a href="<?= $this->prevHref ?>" rel="nofollow" title="<?= $this->prevTitle ?>"><?= $this->prevLabel ?></a><?php else: ?> <?php endif; ?></th>
<th colspan="5" class="head current"><?= $this->current ?></th>
<th class="head next"><?php if ($this->nextHref): ?><a href="<?= $this->nextHref ?>" rel="nofollow" title="<?= $this->nextTitle ?>"><?= $this->nextLabel ?></a><?php else: ?> <?php endif; ?></th>
</tr>
<tr>
<?php foreach ($this->days as $i=>$day): ?>
<th class="label<?= $day['class'] ?>"><?= utf8_substr($day['name'], 0, $this->substr) ?><span class="invisible"><?= utf8_substr($day['name'], $this->substr) ?></span></th>
<?php endforeach; ?>
</tr>
</thead>
<tbody>
<?php foreach ($this->weeks as $class=>$week): ?>
<tr class="<?= $class ?>">
<?php foreach ($week as $day): ?>
<?php if ($day['href']): ?>
<td class="<?= $day['class'] ?>">
<?= $day['label'] ?>
<?php foreach($day['events'] as $event) : ?>
<?php if (isset($event['href']) && $event['href'] != ''): ?>
<a href="<?= $event['href'] ?>" title="<?= $event['title'] ?>">
<?php endif; ?>
<span class="archive-mini archive-<?php echo $event['pid']; ?>"> </span>
<?php if (isset($event['href']) && $event['href'] != ''): ?>
</a>
<?php endif; ?>
<?php endforeach; ?>
</td>
<?php else: ?>
<td class="<?= $day['class'] ?>"><?= $day['label'] ?></td>
<?php endif; ?>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</tbody>
</table>
Die Umsetzung ist sicher nicht perfekt, aber es funktioniert. Vielleicht hat einer der PHP-Pros mal Lust, das noch eleganter zu lösen