Ergebnis 1 bis 13 von 13

Thema: Eventliste: Anzeigeformat "Vergangene Events" mit Eventliste-Menü kombinieren?

  1. #1
    Contao-Nutzer Avatar von totoff
    Registriert seit
    08.04.2010.
    Ort
    Köln
    Beiträge
    174

    Standard Eventliste: Anzeigeformat "Vergangene Events" mit Eventliste-Menü kombinieren?

    Hallo,

    stehe vor einem vertrackten Problem: Auf einer Archiv-Seite sollen nur abgelaufene Termine (Ausstellungen vergangener Jahre) dargestellt werden. Kein Problem mit dem Frontend-Modul Eventliste. Um die Liste aber nicht zu lange werden zu lassen, möchte ich sie mit dem Eventliste-Menü filtern (der Nutzer soll sich die abgelaufenen Termine nach Jahren darstellen lassen). Leider haut das nicht hin, denn Eventliste-Menü ist nur mit dem Anzeigeformat "Jahr" oder "Monat" kompatibel ... Wähle ich diese Standard-Variante, werden aber auch zukünftige Termine angezeigt - was auf dieser Archiv-Seite natürlich nicht geht.

    Blöd, denn ich habe den Kunden schon heiß auf das Eventliste-Menü gemacht. Die gleiche (logische) Kombination funktioniert nämlich mit einem Nachrichtenarchiv und einem Nachrichtenarchiv-Menü ganz prima. Will sagen: ich stehe echt auf dem Schlauch

    Hat jemand - speziell von den PHP-Kennern - eine Idee, wie man die Module (ModuleEventMenu.php oder ModuleEventlist.php) anpassen kann, so dass Eventliste-Menü auch mit abgelaufenen Terminen funktioniert?

    Danke!
    Kommunikation mit Konzept. Digital und Analog - christophlieck.com

  2. #2
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Ort
    Magdeburg
    Beiträge
    2.020
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Hallo totoff,

    stehe gerade vor exakt dem gleichen Problem. Mich würde interessieren, ob du eine eine Lösung gefunden hast?

  3. #3
    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

    Die einfachste Art wäre wahrscheinlich eine kleine Template-Anpassung. mod_eventmenu oder|und mod_eventmenu_year
    Erst z.B. ganz oben im Template das aktuelle Jahr erfassen
    PHP-Code:
    <?php
      $strDiesesJahr 
    date('Y');
    ?>
    Dann die foreach-Schleife sofort verlassen (nächsten Durchlauf beginnen) sobald eine Bedingung nicht zutrifft
    PHP-Code:
    <?php foreach ($this->items as $year=>$months): ?>

    // Hier jetzt der Code für den Test
    <?php

    if($year $strDiesesJahr)
    {
      continue;
    }

    ?>
    In dem Beispiel - wenn $year größer ist als dieses Jahr, dann nächster Durchlauf. Wenn man weiß, dass die ältesten Events hier zuerst kommen, könnte man die Schleife anstatt mit "continue" auch mit "break" sofort verlassen. D.h. ich weiß, dass nach dem Event, der die Bedingung nicht erfüllt, keine mehr kommen die die Bedingung erfüllen, also verlasse ich sofort die foreach-Schleife mit "break".

    Gruß Andreas
    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

  4. #4
    Contao-Nutzer Avatar von totoff
    Registriert seit
    08.04.2010.
    Ort
    Köln
    Beiträge
    174

    Standard

    ich habe das template event_short.html5 so angepasst, dass nur events angezeigt werden, deren Enddatum überschritten ist:

    PHP-Code:
    <?php if (intval($this->endDate) < time() ): ?> <!-- display only if current timestamp is higher than endDate? -->
    Hier der normale Template-Code
    PHP-Code:
    <?php endif; ?>
    das funktioniert. mein problem ist jedoch, dass ich gerne einen alternativtext ausgeben würde, wenn die bedingung nicht zutrifft. mit else kriege ich den alternativtext dann aber ebenso oft angezeigt, wie events vorhanden sind. meine php-kenntnisse reichen nicht, dies zu ändern. vielleicht hat du andreas als php-profi eine idee?

    gruß, christoph
    Kommunikation mit Konzept. Digital und Analog - christophlieck.com

  5. #5
    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

    event_short habe ich in Contao von 2.7 bis 2.10 nicht finden können. Da kann ich dann auch nicht helfen. Du wolltest die Liste doch mit dem Menü filtern, dann brauchst du die Liste doch nicht mehr anzupassen, oder? Das Event-Menü benutzt mod_eventmenu oder mod_eventmenu_year als Template.

    Mit
    PHP-Code:
    <?php

    $this
    ->showTemplateVars();

    ?>
    kanst du dir die Variablen ansehen, die das Template dir liefert (im HTML Quelltext ansehen).

    $this->endDate liefert dir einen Unix-Timestamp (eine lange Zahl, die ein Datum mit Uhrzeit repräsentiert), je größer desto später ist das Datum. intval() kannst du dir dabei sparen, da diese lange Zahl sowieso beim Vergleich als Integer angesehen wird.

    Das Template des Menüs liefert keinen Timestamp, sondern ein formatiertes Datum. Willst du einen Timestamp zur Prüfung heranziehen, erzeugst du mit time() den aktuellen Timestamp (Datum-Zeit des Augenblicks). In $year ist eine Jahreszahl abgelegt, z.B. 2011, willst du die überprüfen brauchst du zum Vergleich natürlich die aktuelle Jahreszahl, die du mit date('Y') bekommst.

    Eine Textausgabe für den Fall, dass es keine Events gibt, brauchst du doch eigentlich nicht, wenn du das Menü vorgeschaltet hast. Ansonsten müsste man sich das ganze mal komplett ansehen. Es ist auf jeden Fall nicht so schwer, if heißt ja "wenn" und else "ansonsten".
    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

  6. #6
    Contao-Nutzer Avatar von totoff
    Registriert seit
    08.04.2010.
    Ort
    Köln
    Beiträge
    174

    Standard

    hallo andreas,

    danke für deinen beitrag. du hast recht: event_short.html5 gibt es nicht. es handelt sich um das template event_short_teaserimage.html5 das mit der erweiterung teaserimage zusammenarbeitet und das ich umbenannt habe. war ein langer tag gestern ...

    letztlich bleibt die problematik aber gleich, auch wenn z.b. das template event_list eingesetzt wird: in verbindung mit dem modul eventmenü kann das anzeigeformat "alle vergangenen events" im modul eventliste nicht gewählt werden bzw. bleibt ohne funktion.

    mein lösungsweg war, das template der eventliste anzupassen und alle events auszufiltern, deren enddatum überschritten ist (das template des eventmenüs habe ich nicht angepackt):

    PHP-Code:
    <?php if (intval($this->endDate) < time() ): ?>hier jetzt der unveränderte code des eventlisten-templates<?php endif; ?>
    qualifiziert sich kein event, wird nun einfach gar nichts angezeigt. mein wunsch wäre aber, in diesem fall einen alternativtext anzuzeigen. nehmen wir an, es gibt drei events, deren enddatum noch nicht überschritten ist. folgender code

    PHP-Code:
    <?php if (intval($this->endDate) < time() ): ?>hier jetzt der unveränderte code des eventlisten-templates<?php else: ?><p>es gibt keine abgelaufenen events</p><?php endif; ?>
    führt dazu, dass drei mal der string "es gibt keine abgelaufenen events" ausgegeben wird.

    für dieses problem fehlt mir die lösung.

    viele grüße, christoph
    Kommunikation mit Konzept. Digital und Analog - christophlieck.com

  7. #7
    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

    Hallo Christoph,

    ich weiß zwar nicht, ob das die beste Lösung ist, so wie du es machen möchtest, dazu müsste man Einblick in das ganze Projekt haben, aber bei deinem Problem könnte ich helfen.

    Das event_list tpl wird ja für jedes Event neu herangezogen, deshalb bekommst du natürlich den Alt-Text auch jedesmal angezeigt. Deshalb müsstest du in einer globalen Variable (Variable, die nicht verloren geht) den Status speichern, dass schon ein Text ausgegeben wurde.
    PHP-Code:
    <?php

    // Event hat den Test nicht bestanden
    else
    {
      
    // Wurde der Text schon angezeigt?
      
    if($GLOBALS['blnNoEventTextPrinted'] == true)
      {
        
    // Template verlassen
        
    return;
      }

      
    // Text ausgeben
      
    echo 'Kein Event';

      
    // Marker speichern, dass Text bereits ausgegeben wurde
      
    $GLOBALS['blnNoEventTextPrinted'] == true;
    }

    ?>
    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

  8. #8
    Contao-Nutzer Avatar von totoff
    Registriert seit
    08.04.2010.
    Ort
    Köln
    Beiträge
    174

    Standard

    hi andreas,

    danke, wenn das klappt hast du mir einen riesen gefallen getan!

    werde es später ausprobieren und berichten, jetzt muss ich söhnchen abholen fahren :-)

    grüße, christoph
    Kommunikation mit Konzept. Digital und Analog - christophlieck.com

  9. #9
    Contao-Nutzer Avatar von totoff
    Registriert seit
    08.04.2010.
    Ort
    Köln
    Beiträge
    174

    Standard

    hi andreas,

    thumbs up, das klappt!

    musste den code ein bisschen anpassen, damit er mit dem anderen code zusammenspielt:

    PHP-Code:
    <?php else: ?> 

      <?php if($GLOBALS['blnNoEventTextPrinted'] == true
      { 
        
    // Template verlassen 
        
    return; 
      } 

      
    // Text ausgeben 
      
    echo 'No upcoming event sheduled yet. Please check back.'

      
    // Marker speichern, dass Text bereits ausgegeben wurde 
      
    $GLOBALS['blnNoEventTextPrinted'] == true;

      
    ?>
    <?php 
    endif; ?>
    das dumme ist, dass ich jetzt 1.000 fragen dazu hätte, z.b. woher der name der variable 'blnNoEventTextPrinted' stammt bzw. bekannt ist - aber das ist ja nicht das php-forum hier.

    herzlichen dank nochmal

    christoph
    Kommunikation mit Konzept. Digital und Analog - christophlieck.com

  10. #10
    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

    lol, den Namen habe ich mir ausgedacht. Hättest die auch $GLOBALS['check'] nennen können. Um Code besser lesen zu können gibt es bestimmte Richtlinien, wie man Variablen benennen sollte, zum B. beginnt man eine Variable, die ein Array speichert mit "arr" $arrEvents, Stringvariablen $strLastname, und Variablen vom Typ Boolean (true/false, 1/0) $blnFormSubmitted.

    Die erste Abfrage ist etwas unübersichtlich, da es die Variable noch nicht gibt. Müsste man eigentlich mit
    PHP-Code:
    if (isset($GLOBALS['blnCheck']) && $GLOBALS['blnCheck'] == true
    abfragen. Meine Version ist aber performanter und schmeißt keine Fehlermeldung.

    $GLOBALS ist ein Array, in welchem alle Variablen gespeichert sind, die im Skript in allen Geltungsbereichen sichtbar sind http://de3.php.net/manual/de/reserve...es.globals.php

    Ich füge diesem Array die Check-Variable hinzu und gebe ihr den Wert "true". Du kannst mal probieren, ob es ohne $GLOBALS funktioniert, dann nehme es ohne.

    if ($blnCheck == true)

    Aber ich befürchte, dass sie so für den nächsten Event verloren geht. Du kannst auch das probieren.

    global $blnCheck;
    $blnCheck == true;

    Du hast den Code für dein Template korrekt abgeändert. PHP ist eigentlich leichter, als es immer in den Templates zu sehen ist. Leo benutzt in seinen Templates die Variante, dass er für jede Variablen-Ausgabe den PHP-Code explizit öffnet <?php und dann wieder schließt ?>. Damit erspart er sich so einiges an echo-Befehlen, ist für meinen Geschmack aber schwerer zu lesen. Auch für die Schleifen und Anweisungen benutzt er eine andere Technik
    PHP-Code:
    // Templates
    <?php if (): ?>
    HTML-Ausgabe
    <?php else: ?>
    HTML-Ausgabe
    <?php endif; ?>

    // Normal für scripte
    <?php
    if ()
    {
      echo 
    'HTML-Ausgabe';
    }
    else
    {
      echo 
    'HTML-Ausgabe';
    }
    ?>
    Die erste Variante wird in den Templates auch deswegen benutzt, da in den Templates kein Coding stattfinden sollte, sondern nur Variablen-Ausgaben.

    Vielleicht habe ich damit ja einige von deinen 1000 Fragen beantwortet
    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

  11. #11
    Contao-Nutzer Avatar von totoff
    Registriert seit
    08.04.2010.
    Ort
    Köln
    Beiträge
    174

    Standard

    aha!

    ich glaube, langsam komme ich dahinter. wenn ich dich richtig verstehe, passiert folgendes:

    wenn dieser string einmal ausgegeben wurde

    PHP-Code:
    echo 'No upcoming event sheduled yet. Please check back.'
    wir der variablenwert auf true gesetzt

    PHP-Code:
    $GLOBALS['blnNoEventTextPrinted'] == true
    und beim nächsten durchlauf steigt das skript aus, weil die bedingung true ist:

    PHP-Code:
    <?php if($GLOBALS['blnNoEventTextPrinted'] == true)  
      {  
        
    // Template verlassen  
        
    return;  
      }
    korrekt?

    puh, ich brauche php-coaching.

    Vielleicht habe ich damit ja einige von deinen 1000 Fragen beantwortet
    absolut!
    Kommunikation mit Konzept. Digital und Analog - christophlieck.com

  12. #12
    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

    Ja, genau so ist es. Wenn du mal Zeit findest, hierüber kann man sich ganz gut einarbeiten um die Basics zu verstehen http://tut.php-quake.net/
    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

  13. #13
    Contao-Fan Avatar von Hauge
    Registriert seit
    31.01.2010.
    Beiträge
    643

    Standard Eventmenü nur für dieses und nächstes Jahr, Eventmenü begrenzen

    Nochmal zu oben, wenn es jemanden Interessiert:

    Wenn Ihr aus dem Beitrag von Andreas vom 18.1011 das hier:

    PHP-Code:
    <?php 

    if($year $strDiesesJahr

      continue; 


    ?>
    mit dem hier ersetzt:
    PHP-Code:
    <?php if($year $strDiesesJahr)
    {
      continue;
    }
    ?>
    <?php 
    if($year == $strDiesesJahr+2)
    {
      break;
    }
    ?>
    dann kriegt Ihr im Menü nur die Events aus diesem und dem nächsten Jahr im Eventmenü...
    Gruß
    Andreas

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
  •