[gelöst] Events aus mehreren Kalendern im Newsletter sortiert ausgeben
Moin,
wie ich feststellen musste hat das zusammenführen zweier Kalender in einem Event CE im Newsletter eine Tücke, die Events werden nicht zusammen geführt, sondern die Kalender nacheinander gelistet. Ich hab das dann für die Online Ansicht in sofern gelöst, das im Template die Events noch mal mittels usort in die richtige Reihenfolge gebracht werden. Das funktioniert soweit ganz gut bis der Kunde versuchte den Versandt zu starten und nach der ersten Mail dann ein JSON Fehler kam, weil ich die Funktion, welche usort benötigt ins Template (nle_events_html) gepackt habe.
Meine bisherige Lösung
PHP-Code:
<?php
function vergleich($wert_a, $wert_b)
{
$a = $wert_a['startTime'];
$b = $wert_b['startTime'];
if ($a == $b) return 0;
return ($a < $b) ? -1 : +1;
}
?>
<tr>
<td valign="top" class="<?php echo $this->class; ?>"<?php echo $this->cssID; ?><?php if ($this->style): ?> style="<?php echo $this->style; ?>"<?php endif; ?>>
<?php if(strlen($this->headline)):?>
<?php $hlTeile = explode(" ",$this->headline,2); ?>
<<?php echo $this->hl; ?>><span class="hl"><?php echo str_replace("_"," ",$hlTeile[0]); ?><span class="hlmore"> <?php echo $hlTeile[1]; ?></span></span></<?php echo $this->hl; ?>>
<?php endif;?>
<ul>
<?php $events = $this->events; ?>
<?php usort($events,'vergleich');?>
<?php foreach($events as $event): ?>
<li>
<table class="tableeventlistBody"><tbody><tr>
<td class="col_0 day">
<div class="tag"><?php echo $this->parseDate("D",$event['startTime']); ?></div>
<div class="datum"><?php echo $this->parseDate("d.m.", $event['startTime']); ?><?php echo ($event['endDate'] > $event['startDate']) ? "<br>".$this->parseDate("- d.m.", $event['endTime']) : ""; ?></div></td>
<td class="col_1 time"><?php echo ($event['addTime']) ? "<span class='Zeit'>".$this->parseDate("H:i", $event['startTime']) : ""; echo ($event['addTime'] && ($event['startTime'] != $event['endTime'])) ? $this->parseDate(" - H:i", $event['endTime']) : ""; echo ($event['addTime']) ? "h<br>" : ""; ?><?php echo($event['price']) ? $event['price']."<br>" : ""; echo ($event['leader']) ? "mit ".$event['leader']."<br>" : ""; ?></span></td>
<td class="col_2 title"><a href="{{event_url::<?php echo $event['id'];?>}}" title="<?php echo $event['title']; ?> (<?php if ($event['day']): echo $event['day']; ?>, <?php endif; echo $event['date']; if ($event['time']): ?>, <?php echo $event['time']; endif; ?>)"><?php echo $event['title']; ?></a><br><?php echo $event['teaser']; ?></td>
</tr></body></table>
</li>
<?php endforeach;?>
</ul>
</td></tr>
Eine Lösung wäre, die Funktion in eine eigene Klasse zu schreiben und dazu fehlt es mir aber an OOP Programmier Erfahrung.
Hat jemand eine Lösung für dieses Problem?
Herzlichen Dank
Gruß Oliver
Sortierungsproblem gelöst
Habe die Funktion nun in einer eigenen Class inkl. Neusortierung portiert.
Diese sieht wie folgt aus:
PHP-Code:
<?php
class eventSorting
{
private function sorting($wert_a, $wert_b)
{
$a = $wert_a['startTime'];
$b = $wert_b['startTime'];
if ($a == $b) return 0;
return ($a < $b) ? -1 : +1;
}
public function eventSort($events)
{
usort($events,array($this, 'sorting'));
return $events;
}
}
?>
Im Template wird diese dann so aufgerufen:
PHP-Code:
<tr>
<td valign="top" class="<?php echo $this->class; ?>"<?php echo $this->cssID; ?><?php if ($this->style): ?> style="<?php echo $this->style; ?>"<?php endif; ?>>
<?php if(strlen($this->headline)):?>
<?php $hlTeile = explode(" ",$this->headline,2); ?>
<<?php echo $this->hl; ?>><span class="hl"><?php echo str_replace("_"," ",$hlTeile[0]); ?><span class="hlmore"> <?php echo $hlTeile[1]; ?></span></span></<?php echo $this->hl; ?>>
<?php endif;?>
<ul>
<?php $ichsortiere = new eventSorting; ?>
<?php $events = $ichsortiere->eventSort($this->events); ?>
<?php foreach($events as $event): ?>
<li>
<table class="tableeventlistBody"><tbody><tr>
<td class="col_0 day">
<div class="tag"><?php echo $this->parseDate("D",$event['startTime']); ?></div>
<div class="datum"><?php echo $this->parseDate("d.m.", $event['startTime']); ?><?php echo ($event['endDate'] > $event['startDate']) ? "<br>".$this->parseDate("- d.m.", $event['endTime']) : ""; ?></div></td>
<td class="col_1 time"><?php echo ($event['addTime']) ? "<span class='Zeit'>".$this->parseDate("H:i", $event['startTime']) : ""; echo ($event['addTime'] && ($event['startTime'] != $event['endTime'])) ? $this->parseDate(" - H:i", $event['endTime']) : ""; echo ($event['addTime']) ? "h<br>" : ""; ?><?php echo($event['price']) ? $event['price']."<br>" : ""; echo ($event['leader']) ? "mit ".$event['leader']."<br>" : ""; ?></span></td>
<td class="col_2 title"><a href="{{event_url::<?php echo $event['id'];?>}}" title="<?php echo $event['title']; ?> (<?php if ($event['day']): echo $event['day']; ?>, <?php endif; echo $event['date']; if ($event['time']): ?>, <?php echo $event['time']; endif; ?>)"><?php echo $event['title']; ?></a><br><?php echo $event['teaser']; ?></td>
</tr></body></table>
</li>
<?php endforeach;?>
</ul>
</td></tr>
sicherlich nicht orginell und konform aber so ließe sich der Newsletter dann versenden bis Tril den Fehler gefixt hat.
Gruß Oliver