Ergebnis 1 bis 13 von 13

Thema: Datensatz (Kalenderausgabe) pro Seite

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

    Standard Datensatz (Kalenderausgabe) pro Seite

    ist es im untern Code möglich, bei 24 ausgegebenen Kalendern die angezeigte Anzahl pro Seite auf ca 6 zu beschränken, das dann nur pro Seite/Ansicht 6 Kalender ausgegeben werden und das System bei mir dabei nicht einknickt (ab ca 13 bis 15 gleichzeitigen Kalendern kommt Fehlermeldung: Seite nicht gefunden. (also mit vor und zurück Button)

    Bildschirmfoto 2016-07-08 um 20.07.08.png
    Weiß jemand dafür eine Lösung?

    Vielen Dank im Voraus.

    <?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 <= 24; ++$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);
    }

  2. #2
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.089
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ich glaube nicht, dass der Fehler auf das "Einknicken" deines Systems zurückzuführen ist, eher auf einen Fehler in deinem Code. Deine Monatsberechnung ist schlicht falsch, irgendwann ist $nextMonth = 24 und damit >12 und damit wird nextMonth=0. Dann rufst du den 0-ten Monat eines Jahres auf und es macht Bumm.

    So würde ich den unteren Teil des Codes eher als korrekt ansehen (ungetestet!). So sollte auch das Jahr stimmen. Bei deiner Variante wird das Jahr im selben Moment falsch, in dem der Monat auf 0 gesetzt wird. Fällt aber nicht mehr auf, weil es ohnehin knallt.
    PHP-Code:
    // extract year and month
    $currentYear intval(substr($actualDate04));
    $currentMonth intval(substr($actualDate, -2));

    // iterate through months
    $nextYear $currentYear;
    $nextMonth $currentMonth;
    for( 
    $i 0$i <= 24; ++$i )
    {
        
    $nextMonth++;
        if( 
    $nextMonth 12 )
        {
            
    $nextYear++;
            
    $nextMonth 1// oder auch $nextMonth = ($nextMonth-1) % 12 + 1; 
        
    }

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

    Edit: So wie deine Schleife angelegt ist, werden außerdem 25 Monate ausgegeben und nicht 24.
    Geändert von tab (03.09.2016 um 23:10 Uhr)

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

    Standard Schleife geht jetzt nicht mehr

    Hallo tab, erstmal Vielen Dank für deine Hilfe. Jetzt werden die 24 Monate fehlerfrei angezeigt.

    Das hilft mir schon sehr viel weiter.

    Leider wird nun der aktuelle Monat nicht mehr angezeigt, es geht erst ab dem Nächsten los.

    Genauso kann ich nicht mehr den Monat mit dem begonnen wird eintragen

    die Zeile: for( $i = 0; $i <= 24; ++$i )

    greift jetzt nicht mehr richtig

    ich hatte vorher um 2 Spalten zu erzeugen das so gelöst: for( $i = 0; $i <= 6; ++$i ) und ( $i = 7; $i <= 11; ++$i )

  4. #4
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.089
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von gbcon Beitrag anzeigen
    Leider wird nun der aktuelle Monat nicht mehr angezeigt, es geht erst ab dem Nächsten los.
    Stimmt, setz das $nextMonth++; ganz nach unten in die Schleife, also nach der Ausgabe.

    Zitat Zitat von gbcon Beitrag anzeigen
    Genauso kann ich nicht mehr den Monat mit dem begonnen wird eintragen
    Natürlich kannst du das, alles was vor meinem Codeausschnitt stand in deinem Code kann und muss da auch wieder davor.
    Und auch die Schleife kannst du beliebig zerlegen, es kommt nur darauf an, wie oft der Code in der Schleife ausgeführt wird. Mit deinen zwei Schleifen erzeugst du einmal 7 und einmal 5 Monate. Bei jedem Durchlauf wird eben der nächste Monat ausgegeben. Falls die Ausgabe der Monate nicht in der normalen Reihenfolge passieren soll, geht das natürlich auch, nur muss dann die Berechnung des $nextMonth und $nextYear in der Schleife anders gelöst werden.

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

    Standard kalender

    Danke, jetzt wird der aktuelle Monat auch angezeigt.

    Ich hatte den Code der davor stand, wieder vor gehabt.

    Dieser reagiert aber jetzt anders als vorher.
    for( $i = 6; $i <= 12; ++$i )

    Vorher:
    der Anfang war 6 Monate später als der aktuelle Monat und ging bis zu den nächsten folgenden 7 Monaten

    Jetzt:
    es fängt trotzdem beim aktuellen Monat an und verkürzt nur die ausgegebene Monatsanzahl um 6, also 7 Monate anstatt 13 Monaten


    (ich will ja für meine 2 Spalten Variante, in der zweiten Spalte erst ab z.B. Dezember anfangen wenn die erste bis November gehen würde)



    Alternative wäre die Begrenzung der Ausgabe auf zum Beispiel 6 Monate pro Seite mit "vor" und "zurück" damit ich bei 24 Monaten nicht eine sehr lange Seite bekomme






    <?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
    $nextYear = $currentYear;
    $nextMonth = $currentMonth;
    for( $i = 0; $i <= 20; ++$i )
    {

    if( $nextMonth > 12 )
    {
    $nextYear++;
    $nextMonth = 1; // oder auch $nextMonth = ($nextMonth-1) % 12 + 1;

    }

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

    $nextMonth++;
    }

  6. #6
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.089
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Tja, ich weiss ja nicht, wie du das benutzt. Für mich war das $i einfach ein Zähler für die Monate. In welcher Datei steht denn dieser Code drin und wie erzeugst du deine Spalten? Also wie sieht die Reihenfolge der Monate aus, wird da innerhalb des Spalten hochgezählt oder immer zwei aufeinanderfolgende Monate nebeneinander? Vermutlich das Erstere. Hast du dann mehrere solche Templates im Einsatz oder soll alles in eins rein?

    Ich hatte ja schon geschrieben, dass man je nachdem die Berechnung des Monats und Jahrs anders machen muss. Wenn das $i nicht nur ein Zähler sein soll, sondern immer den Offset zum aktuellen Monat angibt, könnte das z.B. so aussehen:

    PHP-Code:
    <?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($actualDate04));
    $currentMonth intval(substr($actualDate, -2));


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

        while( 
    $nextMonth 12 )
        {
            
    $nextYear++;
            
    $nextMonth -= 12;
        }

        
    // month output
        
    \Input::setGet('month'$nextYear.str_pad($nextMonth2'0'STR_PAD_LEFT));
        echo \
    Controller::getFrontendModule($intModuleId);
    }
    Edit: Fehlerhafte Jahresberechnung korrigiert
    Geändert von tab (05.09.2016 um 11:52 Uhr)

  7. #7
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.949

    Standard

    Das

    PHP-Code:
    $nextMonth -= 12
    finde ich unglücklich, denn es stimmt (und funktioniert nur unter der Nebenbedingung, daß $i von 0 bis 24 läuft. Da wäre

    PHP-Code:
    $nextMonth $nextMonth 12
    wahrscheinlich allgemeiner. Sonst kommt irgendwann jemand und sagt "bau das bitte schnell auff 3 Jahre um ..."
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

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

    Standard Kalender

    Danke jetzt geht es

    das ist ein Belegungskalender (die Erweiterungen ich gefunden hatte, waren nicht an den Kalender in Conto gekoppelt, musste man also immer doppelt eintragen)

    der Normale Kalender zeigt ja immer nur einen Monat mit vor und zurück, das ist aber für einen Belegungskalender sehr unübersichtlich und umständlich, daher brauchte ich die Ausgabe von vielen Monaten gleichzeitig

    bei 24 Monaten wir die Seite sehr lang, daher arbeite ich mit 2 PHP Dateien, wobei jede in einer Spalte über HTMLcode aufgerufen wird

    in der ersten PHP DATEI ist dann der Aktuelle Monat bis Monat B und in der zweiten Monat B+1 bis Monat C, dadurch wird die Seite nicht so lang

    (das mit der begrenzen Anzahl angezeigter Monate je Seite (mit vor und zurück) bei der Ausgabe habe ich ja nicht hinbekommen, daher meine zwei Spaltenlösung als Alternative


    Htmlcode

    {{file::file_calendarA.php}} in der Spalte 1: Monate von 0 bis 12

    {{file::file_calendarB.php}} in der Spalte 2: Monate von 12 bis 24

    Aber auf alle Fälle ganz vielen Dank für deine Hilfe!!!!!!
    (bin leider kein Programmierer und kann daher bestehenden Code nur bedingt verändern, der ursprüngliche Code war ja auch nicht von mir und der ging leider nur bis 12 Monate )

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

    Standard Rechtschreibung

    komischerweise fehlen ab und zu ein paar Buchstaben, also bitte darüber hinwegsehen, sollte trotzdem verständlich sein

  10. #10
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.089
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Nee, eben nicht. Das funktioniert auch bis 1234 wenns sein muss, ist dann aber langsam. Wenn es also einer umgebaut haben will auf 3 Jahre, dann ändere ich die 24 auf 36(35) und sage: Fertig! Man könnte es anders formulieren, aber so ist die Jahresberechnung am einfachsten und allzu viele Monatskalender wird man ja auch nicht anzeigen.

    Das geht schief, hatten wir ja weiter oben schonmal, da kracht es eben wenn $nextMonth durch 12 teilbar ist, also im Dezember:
    PHP-Code:
    $nextMonth $nextMonth 12
    So würde der Monat richtig berechnet, aber das Jahr muss dann noch separat "auf einen Schlag" berechnet werden, also etwa so:
    PHP-Code:
    $nextYear += floor(($nextMonth-1)/12);
    $nextMonth = ($nextMonth-1) % 12 1
    Da könnte man dann wohl sogar die if-Bedingung weglassen.
    Der ursprüngliche Code (von Spooky?), aus dem das entstanden ist war schon völlig korrekt, weil damit nur 3 oder 5 Monate angezeigt werden sollten und durch die if-Bedingung der Fehler für $nextMonth=12 abgefangen war. Und 24 kann erst ab 12 Monaten erreicht werden.

    Edit: Das war als Antwort auf fiedsch gedacht...
    Geändert von tab (05.09.2016 um 13:22 Uhr)

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

    Standard stimmt

    ja der Code ist geht auch für mehrere Jahre, habe gerade mit 36 Monaten probiert und es funktioniert auch anstandslos

  12. #12
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.949

    Standard

    Zitat Zitat von fiedsch Beitrag anzeigen

    PHP-Code:
    $nextMonth -= 12
    PHP-Code:
    $nextMonth $nextMonth 12
    Zitat Zitat von tab Beitrag anzeigen
    Nee, eben nicht.
    OK, da stand ich auf dem Schlauch:

    Code:
    $i    $i-12     $i % 12      ($i-1) % 12 + 1
    13   1            1                1
    14   2            2                2
    15   3            3                3
    ...
    23   11          11               11
    24   12          0                 12         <--- das meinst Du
    25   13          1                 1          <--- das meinste ich
    Ändert m.E. aber nichts an dem Argument, nicht $nextMonth -= 12; zu verwenden, weil es ja für bis zu 24 Monate passt ;-)
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  13. #13
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.089
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Das $nextMonth -= 12 steht ja deswegen in einer whilw-Schleife. Deswegen klappt das natürlich auch für 25 (nach erstem Durchlauf 13, nach zweitem Durchlauf 1) und mehr, soweit eben die Werteskala reicht. Allerdings bei 1200 Monaten würde die while-Schleife insgesamt zig-Tausend Mal durchlaufen werden -> ineffizient für sehr viele Monate. Die andere Methode berechnet Monat und Jahr eben direkt und ist damit für große Werte von $nextMonth wesentlich effizienter.

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
  •