Ergebnis 1 bis 3 von 3

Thema: [gelöst] Events aus mehreren Kalendern im Newsletter sortiert ausgeben

  1. #1
    Contao-Fan Avatar von Ainschy
    Registriert seit
    24.06.2009.
    Ort
    Wenden
    Beiträge
    796
    Partner-ID
    5666
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Frage [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;
    }
    ?>
    <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
    Geändert von Ainschy (03.11.2012 um 12:50 Uhr)

  2. #2
    Contao-Fan Avatar von Ainschy
    Registriert seit
    24.06.2009.
    Ort
    Wenden
    Beiträge
    796
    Partner-ID
    5666
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Daumen hoch 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;
        }
        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

  3. #3
    Contao-Urgestein Avatar von tril
    Registriert seit
    07.01.2010.
    Ort
    Bad Marienberg
    Beiträge
    2.939
    User beschenken
    Wunschliste

    Standard

    Also ich habe das Problem gerade versucht nach zu vollziehen, bei mir werden die Events auch aus unterschiedlichen Kategorien, wenn ich diese in ein einzelnes News Element verpacke untereinander korrekt sortiert.
    Getestet mit Avisota 1.7

    EDIT: Vergiss es, ich habe bei News statt Events geschaut
    Geändert von tril (08.11.2012 um 16:34 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •