Ergebnis 1 bis 21 von 21

Thema: EVENTS: Ausgabe der Position in der Gesamt-Liste

  1. #1
    Contao-Nutzer
    Registriert seit
    09.09.2010.
    Ort
    Berlin
    Beiträge
    77

    Frage EVENTS: Ausgabe der Position in der Gesamt-Liste

    Hallo zusammen,

    ich entwickle gerade eine Seite, in der Events als Boxen mit fester Breite dargestellt werden sollen. Da die Webseite responsive ist, brechen die Boxen je nach Browserbreite um. Damit das alles optisch passt, sollten die Boxen je nach Position im Template eine zusätzliche Klasse bekommen.

    Für das News Modul ist innerhalb des Templates ja die Variable 'count' (this->count) da, die genau die Position der News in der Liste ausgibt. Leider gibt es diese Variable - aus welchen Gründen auch immer - für die Eventliste nicht.
    Hat jemand eine Idee, wie ich das nachbilden kann, für Pagination bespw. wird die Info ja sowieso benötigt - muss also in Contao selber auch vorhanden sein.

    Besten Dank und sonnige Grüße

    Mimamuxx
    Geändert von mimamuxx (24.04.2015 um 12:00 Uhr)

  2. #2
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Ich löse das immer mit einer eigenen globalen Variable, die ich im Template initialisiere und danach hochzähle. So weiß ich, an welcher Stelle der Ausgabe ich gerade bin und kann entsprechend die Ausgabe modifizieren. Am Anfang des Templates steht:
    PHP-Code:
    <?php 
    if(!$GLOBALS["meinzaehler"]) $GLOBALS["meinzaehler"] = 1
    else 
    $GLOBALS["meinzaehler"]++; 
    ?>
    und dann brauche ich nur noch die Abfrage einzubauen:
    PHP-Code:
    <?php 
    if($GLOBALS["meinzaehler"] == 2
    {
      echo 
    "2. Eintrag";
    }
    ?>
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  3. #3
    Contao-Nutzer
    Registriert seit
    09.09.2010.
    Ort
    Berlin
    Beiträge
    77

    Daumen hoch

    Hi Frank,

    danke für Deine Antwort!
    Zwar echt häßlich, aber funktioniert wohl Wäre aus meiner Sicht ein Ticket auf Github wert. Gibt es da schon was?

    Zu deiner Lösung:
    In welchem Template initialisierst du die globale Variable?
    Hast du herausgefunden, wie das die Pagination macht, dort muss ja zwangsweise die Gesamtanzahl und Position ebenfalls abgefragen werden?

    Danke und schöne Grüße,

    Mimamuxx

  4. #4
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Steht alles im selben Template. Ist letztendlich aber egal, da $GLOBALS benutzt wird.

    Die Pagination habe ich mir noch nie angeschaut. Fakt ist: das Events-Modul liefert selbst keinen Zähler in das Template aus. Die Pagination klinkt sich wahrscheinlich vorher per Hook in die Events-Liste ein und weiß deshalb, welcher Ausschnitt der Events gerade angezeigt wird.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  5. #5
    Contao-Nutzer
    Registriert seit
    09.09.2010.
    Ort
    Berlin
    Beiträge
    77

    Frage

    Ok, danke dir soweit.
    Hast du auch eine Idee, wie ich die Gesamtzahl an Einträgen ermittle?
    Bei der globalen Laufvariable habe ich ja immer nur den aktuellen Wert pro Template-Aufruf...
    Geändert von mimamuxx (15.05.2015 um 21:07 Uhr)

  6. #6
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Wenn eine der Templatevariablen die Anzahl nicht selbst mitliefert, mußt Du wohl eine Datenbankabfrage im Template machen.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.172
    Partner-ID
    10107

    Standard

    Eine absolute, fortlaufende Nummer könnte man mit so einer Datenbankabfrage im Template ermitteln:
    PHP-Code:
    <?php

    $number 
    = \Database::getInstance()->prepare("
                SELECT num FROM (
                    SELECT id,
                          (@rownum := @rownum + 1) AS num
                    FROM tl_news
                    CROSS JOIN (SELECT @rownum := 0) r
                    WHERE pid = ?
                    ORDER BY date ASC, time ASC
                ) AS temp
                WHERE temp.id = ?"
    )->execute$this->pid$this->id )->num;

    ?>
    (Vorsicht: das könnte die Seite stark verlangsamen.)

    Die Gesamtanzahl könnte man so ermitteln:
    PHP-Code:
    <?php

    $total 
    = \NewsModel::countBy('pid',$this->pid);

    ?>
    Beide Code Beispiele zählen aber alle News eines Archivs, nicht nur die die Sichtbar bzw. Published sind.


    Hier nochmal für die Events:
    PHP-Code:
    <?php

    $number 
    = \Database::getInstance()->prepare("
                SELECT num FROM (
                    SELECT id,
                          (@rownum := @rownum + 1) AS num
                    FROM tl_calendar_events
                    CROSS JOIN (SELECT @rownum := 0) r
                    WHERE pid = ?
                    ORDER BY startDate ASC, startTime ASC
                ) AS temp
                WHERE temp.id = ?"
    )->execute$this->pid$this->id )->num;

    ?>
    PHP-Code:
    <?php

    $total 
    = \CalendarEventsModel::countBy('pid',$this->pid);

    ?>
    Geändert von Spooky (16.05.2015 um 16:46 Uhr) Grund: fixed number query for events

  8. #8
    Contao-Nutzer
    Registriert seit
    09.09.2010.
    Ort
    Berlin
    Beiträge
    77

    Frage

    Hey Spooky,

    danke dir für die Code Beispiele!
    Ich benötige für die Ausgabe aber nur die Anzahl an Events, die auch wirklich angezeigt werden.
    In meiner Liste werden ausschließlich alle künftigen Events angezeigt, maximal jedoch 4 Stück.

    Hast du da eine Lösung?

  9. #9
    Alter Contao-Hase Avatar von kmielke
    Registriert seit
    21.06.2009.
    Beiträge
    1.173

    Standard

    Hallo,

    in der kommenden Version von calendar_extended ist das mit drin. Dort kann man dann z.B. im Modul für die Eventliste mod_eventlist.html5 folgendes verwenden.

    PHP-Code:
    <?php echo $this->eventcount?>
    Gruß Kester
    Gruß Kester

    Kein Support via PN ohne vorherige Absprache.

  10. #10
    Contao-Nutzer
    Registriert seit
    09.09.2010.
    Ort
    Berlin
    Beiträge
    77

    Standard

    Hallo Kester

    danke für den Hinweis!
    Wann erscheint denn die kommenden Version ?

    Gruß mimamuxx

  11. #11
    Contao-Nutzer
    Registriert seit
    09.09.2010.
    Ort
    Berlin
    Beiträge
    77

    Fehler

    Gibt jetzt auch ein Ticket auf Github. Wird wie es aussieht zum Feature von Contao 4.1
    https://github.com/contao/core/issues/7825

  12. #12
    Alter Contao-Hase Avatar von kmielke
    Registriert seit
    21.06.2009.
    Beiträge
    1.173

    Standard

    Hallo mimamuxx,

    evtl. schaffe ich es zum Wochenende...

    Gruß Kester
    Gruß Kester

    Kein Support via PN ohne vorherige Absprache.

  13. #13
    Alter Contao-Hase Avatar von kmielke
    Registriert seit
    21.06.2009.
    Beiträge
    1.173

    Standard

    Version 3.2.0_131 ist da.

    Im Template mod_eventlist.html5 kann nun folgendes verwendet werden.
    PHP-Code:
      <?php echo $this->eventcount?>
    Gruß Kester
    Gruß Kester

    Kein Support via PN ohne vorherige Absprache.

  14. #14
    Contao-Fan Avatar von jenda
    Registriert seit
    20.06.2009.
    Ort
    Berlin
    Beiträge
    494

    Standard

    Hallo Kester,

    erstmal vielen Dank für deine tolle Erweiterung.

    Ich habe versucht deine Variable $this->eventcount zu verwenden, um Events in Spalten mittels der Rocksolid Columns darzustellen. Die Anweisung für News ist wie folgt

    PHP-Code:
    <?php
        $config 
    = array(
            
    'large' => array('-large-col-3-1 -large-first''-large-col-3-1''-large-col-3-1 -large-last'),
            
    'medium' => array('-medium-col-2-1 -medium-first''-medium-col-2-1 -medium-last'),
            
    'small' => array('-small-col-1-1 -small-first -small-last'),
        );
        
    $classes = array('rs-column');
        foreach (
    $config as $name => $media) {
            
    $classes[] = $media[($this->eventcount 1) % count($media)];
            if (
    $this->count count($media)) {
                
    $classes[] = '-' $name '-first-row';
            }
        }
        
    $this->class .= ' ' implode(' '$classes);
    ?>
    Deine Variable habe ich an der entsprechenden Stelle eingetragen. Allerdings funktioniert es nicht. Woran kann es liegen? Danke für deine Hilfe.

    Liebe Grüße,

    Jan
    Geändert von jenda (26.09.2016 um 14:41 Uhr)

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.172
    Partner-ID
    10107

    Standard

    @jenda in dem von dir geposteten Template verwendest du aber
    PHP-Code:
    $this->count 
    statt
    PHP-Code:
    $this->eventcount 
    Außerdem ist das eine Variable des Modul Templates.

  16. #16
    Contao-Fan Avatar von jenda
    Registriert seit
    20.06.2009.
    Ort
    Berlin
    Beiträge
    494

    Standard

    Den Code habe ich nun korrigiert.
    Geändert von jenda (26.09.2016 um 14:42 Uhr)

  17. #17
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.172
    Partner-ID
    10107

    Standard

    Du kannst höchstens über das Modul Template die Variable auch in das $GLOBALS Array schreiben. Aber selbst das wird dir nichts bringen denke ich, da du ja in einem Event Template nicht weißt, das wievielte Event es ist?

  18. #18
    Contao-Fan Avatar von jenda
    Registriert seit
    20.06.2009.
    Ort
    Berlin
    Beiträge
    494

    Standard

    @kmielke wäre es bitte möglich, dass die Variable
    PHP-Code:
    <?php echo $this->eventcount?>
    auch über die event_x-Vorlagen abgefragt werden kann? Das wäre klasse. Danke.

  19. #19
    Contao-Fan Avatar von jenda
    Registriert seit
    20.06.2009.
    Ort
    Berlin
    Beiträge
    494

    Standard

    Ja, es muss genauso funktionieren, wie es bei News schon läuft. Da wurden events leider vernachlässigt und haben diese Funktionalität nicht. In Github wurde es schon angefragt und irgendwann kommt auch auch als neue Funktion dazu. Aber bis dahin werden wohl noch weitere Monate vergehen und, selbstverständlich, brauche ich es jetzt. Leider kenne ich mich in solchen tiefgehenden PHP-Contao-Sachen nicht aus, um das mit eigenem Modul zu lösen.

  20. #20
    Alter Contao-Hase Avatar von kmielke
    Registriert seit
    21.06.2009.
    Beiträge
    1.173

    Standard

    Hallo jenda,

    aus meiner Sicht macht das keinen Sinn, und aus diesem Grund werde ich es auch erstmal nicht machen.

    @Spooky
    vielen Dank für den Support meiner Erweiterung.

    Gruß Kester
    Gruß Kester

    Kein Support via PN ohne vorherige Absprache.

  21. #21
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Wenn du ->eventscount im mod_events bereits hast, dann kannst du sie dort in eine globale Variable schreiben, welche du dann in events_list wieder abrufen kannst.
    PHP-Code:
    $GLOBALS['events_total'] = $this->eventscount
    Im events_list kannst du einen globalen Counter einrichten.
    PHP-Code:
    $GLOBALS['events_count']++; 
    Das events_list wird ja für jeden Event aufgerufen und es hat dann
    PHP-Code:
    // beim 1. Aufruf
    echo $GLOBALS['events_count']; // 1
    // beim 2. Aufruf
    echo $GLOBALS['events_count']; // 2
    // usw. 
    Alles ungetestet.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

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
  •