Contao-Camp 2024
Ergebnis 1 bis 27 von 27

Thema: Kalender: Mehrere Monate darstellen

  1. #1
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard Kalender: Mehrere Monate darstellen

    Hallo zusammen,

    ich realisiere gerade einen Belegungsplan für ein Ferienhaus. Die Veranstaltungen werden aktuell via iCal importiert und in einem Kalender ausgegeben. Das ganz funktioniert wunderbar.

    Allerdings hätte ich gerne mehrere Monate auf einer Seite angezeigt. Also aktueller Monat + die nächsten 5.

    Gibt es da irgendeine Möglichkeit?

    LG
    Nicole

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

    Standard

    Hm, genau sowas wurde hier im Forum schon mal gefragt und da wurde ein angepasstes Template gepostet. Finde nur leider den Thread gerade nicht.

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

  4. #4
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Die Frage hab ich auch schon gefunden und auch schon eine Antwort. Leider ist es dafür nötig Core-Dateien zu ändern und da der Thread schon 6 Jahre alt ist, hatte ich die Hoffnung, es gibt noch was anderes.

  5. #5
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ah! Da wusel ich mich gleich mal durch. Hatte wohl die falschen Suchwörter. Danke dir.

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

    Standard

    zB:
    PHP-Code:
    <?php 

    // ID of calendar module
    $intModuleId 79;

    // current year and month
    $actualDate date('Ym');

    // given year and month
    if ($inputMonth = \Input::get('month'))
    {
        
    $actualDate $inputMonth;
    }

    // extract year and month
    $currentYear intval(substr($actualDate04));
    $currentMonth intval(substr($actualDate, -2));

    // iterate through months
    for( $i 0$i <= 5; ++$i )
    {
        
    $nextYear $currentYear;
        
    $nextMonth $currentMonth $i;

        if( 
    $nextMonth 12 )
        {
            
    $nextYear++;
            
    $nextMonth $nextMonth 12;
        }

        
    // month output
        
    \Input::setGet('month'$nextYear.str_pad($nextMonth2'0'STR_PAD_LEFT)); 
        echo \
    Controller::getFrontendModule($intModuleId);
    }
    Geändert von Spooky (06.06.2016 um 11:34 Uhr)

  7. #7
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Wie immer perfekt Spooky!

    Der Code in dem anderen Thread hat ja nicht ganz funktioniert, dieser hier geht. Dankeschööön.

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

    Standard

    Hab's nochmal aktualisiert, da war noch ein Fehler.

  9. #9
    Contao-Nutzer
    Registriert seit
    05.08.2013.
    Beiträge
    16

    Standard 18 Monate

    Hallo, bis 12 Monate funktioniert es super,

    a) aber ich brauche leider 18 Monate, und dann geht es leider nicht mehr

    Gibt es da eine "einfache" Lösung?

    b) kann man ein Seitenumbruch einbauen, da es irgendwann zu lang wird?

    oder ich arbeite mit z.B. mit drei php Dateien (file_calendar.php) jede in einer Spalte (6 Monate lang), aber dafür bräuchte ich bei den 2 zusätzlichen php (file_calendar2.php, file_calendar3.php,)

    nur die zukünftigen 7 Monate bis 12 Monate und 13 bis 18 Monate

    DANKE schon mal im Voraus

  10. #10
    Alter Contao-Hase Avatar von kmielke
    Registriert seit
    21.06.2009.
    Beiträge
    1.172

    Standard

    Hi,

    in meiner Erweiterung calendar_extended gibt es eine Jahresansicht. Evtl. hilft das...

    Gruß Kester
    Gruß Kester

    Kein Support via PN ohne vorherige Absprache.

  11. #11
    Contao-Nutzer
    Registriert seit
    05.08.2013.
    Beiträge
    16

    Standard

    Danke, aber das habe ich alles schon probiert, da erhalte ich nur eine unübersichtliche Riesentabelle, die auch aus meinem Layout herausragt


    Und der Zi-Belegiungsplan (der die Monate ja darstellen kann) ist leider nicht an den Eventkalender gekoppelt.


    Daher fand ich die Richtung der obigen Umsetzung schon optimal, aber leider nicht bis 18 Monate.

  12. #12
    Contao-Nutzer
    Registriert seit
    05.08.2013.
    Beiträge
    16

    Standard

    Der Fehler scheint auch woanders zu sein, bis 15 gehts bei mir, ab 16 tauchen die Kalender ganz klein auf aber einer Fehlerseite

    das (mein) System scheint bei so vielen Kalendern überfordert zu sein


    Bildschirmfoto 2016-07-08 um 20.07.08.png



    b) kann man ein Seitenumbruch einbauen, da es irgendwann zu lang wird?

    oder ich arbeite mit z.B. mit drei php Dateien (file_calendar.php) jede in einer Spalte (6 Monate lang), aber dafür bräuchte ich bei den 2 zusätzlichen php (file_calendar2.php, file_calendar3.php,)

    nur die zukünftigen 7 Monate bis 12 Monate und 13 bis 18 Monate

  13. #13
    Contao-Nutzer
    Registriert seit
    05.08.2013.
    Beiträge
    16

    Standard

    habe es jetzt gefunden wie ich es theoretisch machen kann:

    so kann ich meine Ausgabe von Monat 13 bis 18 steuern

    // iterate through months
    for( $i = 12; $i <= 18; ++$i )
    {

    bekomme jetzt aber auch hier die Fehlermeldung, bei nur 5 angezeigten (erzeugten) KalendernBildschirmfoto 2016-07-08 um 20.30.52.png


    Wo kann denn das Problem/der Fehler liegen??????

    (die Kalender werden ja anscheinend richtig ausgegeben)

  14. #14
    Contao-Nutzer
    Registriert seit
    05.08.2013.
    Beiträge
    16

    Standard kennt jemand dieses Problem

    kann es sein das die Fehlermeldungen (siehe meine vorherigen Einträge) an den Systemleistungen meines Providers liegen (Strato)?

    letztendlich werden ja ganz viele einzelne Kalender erzeugt. Ab ca 13 bis 15 ausgegebenen Kalendern kommt diese Fehlermeldung Seite nicht gefunden

    leider hat auf meine letzten Post keiner mehr geantwortet

  15. #15
    Contao-Nutzer
    Registriert seit
    05.08.2013.
    Beiträge
    16

    Standard mehrere Kalender

    zur obigen Problemstellung, kann ich mir noch vorstellen wenn ich die Möglichkeit hätte bei 20 ausgegebenen Kalendern die angezeigte Anzahl pro Seite auf ca 7 zu beschränken, das dann ja nur pro Seite/Ansicht 7 Kalender ausgegeben werden und das System dabei nicht einknickt. (also mit vor und zurück Button)

    Weiß jemand dafür eine Lösung?

    <?php

    // ID of calendar module
    $intModuleId = 10;

    // current year and month
    $actualDate = date('Ym');

    // given year and month
    if ($inputMonth = \Input::get('month'))
    {
    $actualDate = $inputMonth;
    }

    // extract year and month
    $currentYear = intval(substr($actualDate, 0, 4));
    $currentMonth = intval(substr($actualDate, -2));

    // iterate through months
    for( $i = 0; $i <= 20; ++$i )
    {
    $nextYear = $currentYear;
    $nextMonth = $currentMonth + $i;

    if( $nextMonth > 12 )
    {
    $nextYear++;
    $nextMonth = $nextMonth % 12;
    }

    // month output
    \Input::setGet('month', $nextYear.str_pad($nextMonth, 2, '0', STR_PAD_LEFT));
    echo \Controller::getFrontendModule($intModuleId);
    }

  16. #16
    Contao-Fan Avatar von dtptiger
    Registriert seit
    20.06.2009.
    Ort
    Nürnberg
    Beiträge
    816

    Standard

    Hallo,

    ich gestehe, ich weiß nicht wie ich den Code zum Laufen bringe.
    Die Datei mit dem Code (mit ID der richtigen ID) als Template im Templaetordner, doch es wird nur ein Kalender ausgeggeben.

    Contao 4.4

    Wie mache ich das richtig?

    Fragt dtptiger

  17. #17
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo dtptiger,

    ich binde die Datei über das Insert-Tag {{file::*}} in einem HTML-Inhaltselement direkt im Artikel der Seite ein.

    Brauchst du mehr Details?

    VG
    Nicole

  18. #18
    Contao-Fan Avatar von dtptiger
    Registriert seit
    20.06.2009.
    Ort
    Nürnberg
    Beiträge
    816

    Standard

    Jepp
    mit dem Insert-Tag im Html Element eingebunden funktionierts
    Hatte den Code als HTML Modul eingebunden, das wird nicht interpretiert.

    TNX Achim

  19. #19
    Contao-Fan Avatar von herr rilke
    Registriert seit
    29.01.2011.
    Ort
    Münster
    Beiträge
    384

    Standard

    Zitat Zitat von Webstylerin Beitrag anzeigen
    Hallo dtptiger,

    ich binde die Datei über das Insert-Tag {{file::*}} in einem HTML-Inhaltselement direkt im Artikel der Seite ein.

    Brauchst du mehr Details?

    VG
    Nicole
    hallo nicole,

    wie kommst du denn an die "start" und "end" klassen im kalender, um 'halbe tage' anzuzeigen?

    kannst du mir da 'mehr details' nennen und mich auf den richtigen weg bringen?

    mir fällt erstmal nichts anderes ein, als in cal_mini das start- und enddatum aus dem array zu extrahieren und für jeden anzuzeigenden tag zu vergleichen. das stelle ich mir aber relativ wenig performant vor.


    viele grüße!

    karsten

  20. #20
    Contao-Fan Avatar von herr rilke
    Registriert seit
    29.01.2011.
    Ort
    Münster
    Beiträge
    384

    Standard

    OK. hab mich an den post von franko gehalten.

    läuft und ist für mich performant:

    FeWo Belegungsplan mit Bordmitteln & datepicker m. Event Vorbelegung

    ist für mich damit erledigt

  21. #21
    Contao-Nutzer
    Registriert seit
    13.03.2010.
    Beiträge
    227

    Standard

    Hallo zusammen,

    die Diskussion hier und in einigen anderen Threads hat mir schon total viel geholfen, eine Kalender-Lösung zu finden, die etwas vom vorgegebenen Modul abweicht. Ähnlich Nicoles Lösung. Ich werde es diese Woche noch auf einer extra Seite zusammenstellen und hier verlinken.

    Eine Frage habe ich aber noch zu Spookys Code. Gibt es eine Möglichkeit, den .head.previous und .head.next nur in den äußeren Kalenderblättern anzeigen zu lassen? Also bei 5 Blättern z. B nur in 1 und in 5? Denn in der Mitte braucht man sie dann ja nicht. Leider bin ich nicht in fit in PHP, wüsste also nicht, wo ich die Klasse einfügen könnte.

    Vielen Dank für Tipps
    Marion
    Geändert von thymian (01.02.2023 um 10:04 Uhr)

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

    Standard

    Kannst du ja auch einfach per CSS verstecken.
    » sponsor me via GitHub or PayPal or Revolut

  23. #23
    Contao-Nutzer
    Registriert seit
    13.03.2010.
    Beiträge
    227

    Standard

    Ja, aber dann ist ja alles ausgeblendet.

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

    Standard

    Nein, du kannst ja per CSS nur genau das ausblenden, was du ausblenden möchtest.
    » sponsor me via GitHub or PayPal or Revolut

  25. #25
    Contao-Nutzer
    Registriert seit
    13.03.2010.
    Beiträge
    227

    Standard

    Ok, ich habe mich nun redlich bemüht . Bei 3 Kalenderblättern hat es so geklappt:

    Code:
    .mod_calendar:first-of-type .head.next {
      visibility: hidden;
    }
    
    .mod_calendar:first-of-type + .mod_calendar .head.previous, .mod_calendar:first-of-type + .mod_calendar .head.next {
      visibility: hidden;
      }
      
    .mod_calendar:first-of-type + .mod_calendar + .mod_calendar .head.previous {
      visibility: hidden;
    Geht das auch eleganter, weiß da jemand was?

  26. #26
    Contao-Urgestein Avatar von tblumrich
    Registriert seit
    25.06.2009.
    Ort
    Feldberger Seenlandschaft
    Beiträge
    2.224
    Partner-ID
    7979
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von herr rilke Beitrag anzeigen
    hallo nicole,

    wie kommst du denn an die "start" und "end" klassen im kalender, um 'halbe tage' anzuzeigen?

    kannst du mir da 'mehr details' nennen und mich auf den richtigen weg bringen?

    mir fällt erstmal nichts anderes ein, als in cal_mini das start- und enddatum aus dem array zu extrahieren und für jeden anzuzeigenden tag zu vergleichen. das stelle ich mir aber relativ wenig performant vor.
    Ich möchte die Frage nochmal aufgreifen, weil ich einem Projekt auch vor dieser Aufgabe stehe, in einem Kalender den Start und den Endtag zu kennzeichnen. Wie könnte man also im Kalendertemplate dem ersten und dem letzten Tag eines Events die Klasse (dem entsprechenden td oder einem li bei einer tableless Variante * start bzw. end hinzufügen? Bei Nicole funktioniert das ja genau so...

    Mein cal_** Template
    Code:
    <div class="cal_calendar">
    <div class="cal_head">
      <ul class="cal_navigation">
        <!--li class="head previous"><?php if ($this->prevHref): ?><a href="<?php echo $this->prevHref; ?>" title="<?php echo $this->prevTitle; ?>"><?php echo $this->prevLink; ?></a><?php else: ?>[nbsp]<?php endif; ?></li-->
        <li class="head current"><?php echo $this->current; ?></li>
       <!--li class="head next"><?php if ($this->nextHref): ?><a href="<?php echo $this->nextHref; ?>" title="<?php echo $this->nextTitle; ?>"><?php echo $this->nextLink; ?></a><?php else: ?>[nbsp]<?php endif; ?></li-->
      </ul>
      <ul class="cal_thead">
        <?php foreach ($this->days as $i=>$day): ?>
          <li class="label<?php echo $day['class']; ?>"><?php echo utf8_substr($day['name'], 0, $this->substr); ?><span class="invisible"><?php echo utf8_substr($day['name'], $this->substr); ?></span></li>
        <?php endforeach; ?>
      </ul>
    </div>
    
    <div class="cal_body">
      <?php foreach ($this->weeks as $class=>$week): ?>
        <ul class="<?php echo $class; ?>">
          <?php foreach ($week as $day): ?>
            <li class="<?php echo $day['class']; ?> <?php echo $day['name']; ?>">
              <div class="header"><?php echo $day['label']; ?></div>
              <?php foreach ($day['events'] as $event): ?>
                <div class="event cal_<?php echo $event['parent']; ?><?php echo $event['class']; ?>">
                        
                </div>
              <?php endforeach; ?>
            </li>
          <?php endforeach; ?>
        </ul>
      <?php endforeach; ?>
    </div>
    </div>
    Vielen Dank für jedweden Tipp!
    blucomp | Webdesign & Onlinelösungen

  27. #27
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo tblumrich,

    das Projekt mit dem Kalender ist bereits ein paar Jahre alt, aber ich habe es kürzlich auf Contao 4.13 upgedatet.

    Die Klassen "start" und "end" bastle ich selbst im cal_tableless-Template hinzu indem ich die Tage aus dem "startDate" und dem "endDate" hole und wenn der Tag mit dem aktuellen Tag übereinstimmt, dann ergänze ich die CSS-Klassen. Das geht sicher nur, wenn die Events nicht länger als einem Monat dauern können.

    Lange Rede, kurzes Code-Snippet:

    PHP-Code:
      <div class="cal_body">
        <?php foreach ($this->weeks as $class=>$week): ?>
        <ul class="<?php echo $class?>">
          <?php foreach ($week as $day): ?>
              <?php foreach ($day['events'] as $event): ?>
                <?php
                  $firstDay 
    date('d'$event['startDate']);
                  
    $lastDay date('d'$event['endDate']);
                  if (
    $firstDay == $day['label']) $day['class'] .= " start";
                  if (
    $lastDay == $day['label']) $day['class'] .= " end";
                
    ?>
            <?php endforeach; ?>
          <li class="<?php echo $day['class']; ?>">
            <div class="header"><?php echo $day['label']; ?></div>
          </li>
          <?php endforeach; ?>
        </ul>
        <?php endforeach; ?>
      </div>
    Ich hoffe, das hilft.

    LG
    Nicole

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
  •