Jahreszahl soll beim Kalender auch mitblättern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Jahreszahl soll beim Kalender auch mitblättern

    Liebe PHP-Gemeinde

    Ich verwende folgenden Code für die Ausgabe eines Kalenders (hier zu sehen):

    PHP-Code:
     <?php
       $art 
    REX_ARTICLE_ID;
        class 
    rex_cal
        
    {

           var 
    $curYear;
           var 
    $curMonth;      //Aktueller Monat als Zahl
           
    var $monthDays;      //Anzahl der Tage des aktuellen Monats
           
    var $firstDay;      //erster Tag des aktuellen Monats
           
    var $values = array();         //Array mit dem ID-Wert des Events

           
    function rex_cal($givenMonth ''$givenYear '')
           {
                   
              
    //Wenn kein Jahr angegeben wird, dann nehme ich den das aktuelle
              
    if($givenYear == '')
                 
    $this->curYear date('Y'time());
              else
                 
    $this->curYear $givenYear;
             
              
    //Wenn kein Monat angegeben wird, dann nehme ich den aktuellen Monat
              
    if($givenMonth == '')
                 
    $this->curMonth date('n'time());
              else
                 
    $this->curMonth $givenMonth;
             
              
    $this->monthDays date('t'mktime(000$this->curMonth1$this->curYear));
              
    $this->firstDay date('w'mktime(000$this->curMonth1$this->curYear));
             
             
              
    //wir ruecken das Array um so viele Stellen weiter, bis es mit dem startenden Wochentag uebereinstimmt
              
    for($pushDay 0$pushDay<$this->firstDay$pushDay++)
              {
                 
    array_push($this->valuesNULL);
              }
             
              
    //wir befuellen das Array standard-maessig mit Zahlen
              
    for($day 1$day<=$this->monthDays$day++)
              {
                 
    array_push($this->values'<span class="day">'.$day.'</span>');
              }   
             
              if(
    $this->curMonth == 13)
              {
                 
    $this->curMonth 1;
                 
    $this->curYear++;
              }
             
              if(
    $this->curMonth == 0)
              {
                 
    $this->curMonth 12;
                 
    $this->curYear--;
              }   
           
           }
           
           
    //Fuegt einen Wert in ein Array
           
    function setValue($tag$value)
           {
              
    $this->values[$tag+$this->firstDay-1] = $this->values[$tag+$this->firstDay-1].$value;
           }
           
           
    //Fuegt einen Link in ein Array
           
    function setLink($tag$befor$after)
           {
              
    $this->values[$tag+$this->firstDay-1] = $befor.$this->values[$tag+$this->firstDay-1].$after;
           }
           
           function 
    setrepeatValue($tag$value)
           {
             
           }
           
           function 
    nextMonth()
           {
              
    $this->curMonth $this->curMonth+1;
             
              if(
    $this->curMonth == 13)
              {
                 
    $this->curMonth 1;
                 
    $this->curYear++;
              }   
           }
           
           function 
    lastMonth()
           {
              
    $this->curMonth $this->curMonth-1;
             
              if(
    $this->curMonth == 0)
              {
                 
    $this->curMonth 12;
                 
    $this->curYear--;
              }   
           }
           
           function 
    nextYear()
           {
              
    $this->curYear $this->curYear+1;
           }
           
           function 
    lastYear()
           {
              
    $this->curYear $this->curYear-1;
           }
           
           
    //liefert den aktuellen Monat als Namen zurück
           
    function getMonth($month = array('Januar''Februar''M&auml;rz''April''Mai''Juni''Juli''August''September''Oktober''November''Dezember'))
           {
              return 
    $month[$this->curMonth-1];
           }
           
           function 
    getMonthAsNumber()
           {
              return 
    $this->curMonth;
           }

           function 
    getKalender($header = array('M','D','M','D','F','S','S'))
           {
              
    $output '<table class="kalendar">
                 <tr>
              '
    ;
              foreach(
    $header as $element)
                 
    $output .= '<th>'.$element.'</th>'
                 
    ;
             
              
    $output .= '</tr>'
              
    ;
             
              for(
    $row 1$row<=6$row++)
              {
                 
    $output .= '<tr>
                 '
    ;
                 for(
    $col1$col<=7$col++)
                 {
                    if(
    $this->values[$col+(($row-2)*7)] == "")
                       
    $class='class="none"';
                    else
                       
    $class "";
                       
                    
    $output .= '<td '.$class.'>'.$this->values[$col+(($row-2)*7)].'</td>
                    '
    ;
                 }
                 
    $output .= '</tr>
                 '
    ;
              }
             
              
    $output .= '</table>
              '
    ;
             
              return 
    $output;   
           }

        }

        
    //Wenn es noch keine eventID gibt -> wenn kein Termin angeklickt wurde
        
    if(!isset($_REQUEST['eventid']))
        {
           
           if(!isset(
    $_REQUEST['month']))
              
    $makeCal = new rex_cal();
           else
              
    $makeCal = new rex_cal($_REQUEST['month']);

           
    $getAll = new rex_sql;
           
    $getAll->setQuery("SELECT * FROM rex_120_events WHERE SUBSTRING(DATE, 5,2)='".sprintf("%02d"$makeCal->getMonthAsNumber())."'");
         
           for(
    $u=0$u<$getAll->getRows(); $u++)
           {
              if(
    $getAll->getValue('DATE') != '')
              {
                 
    $makeCal->setValue(substr($getAll->getValue('DATE'), 62), '<a href="index.php?article_id='.$art.'&amp;eventid='.$getAll->getValue('ID').'">'.substr($getAll->getValue('DATE'), 62).'</a>');
              }
              
    $getAll->next();
           
           }
          echo 
    '<div id="kalender">';
           echo 
    '<h2><span class="last"><a href="index.php?article_id='.$art.'&amp;month='.($makeCal->getMonthAsNumber()-1).'"><img src="files/last.png" alt="vorheriger Monat" /></a></span> ';
                 echo 
    " ".$makeCal->getMonth()." ";
          echo 
    '<span class="next"><a href="index.php?article_id='.$art.'&amp;month='.($makeCal->getMonthAsNumber()+1).'"><img src="files/next.png" alt="nächster Monat" /></a></span></h2>';
           echo 
    $makeCal->getKalender();
          echo 
    '</div>';

        }


        
    //andernfalls...
        
    else
        {
       
       
           
    $getAll = new rex_sql;
           
    $getAll->setQuery("SELECT * FROM rex_120_events WHERE ID='".$_REQUEST['eventid']."'");
           
           if(
    $getAll->getRows() > 0)
           {
             
            echo 
    '<div id="kalender-detail">';
            echo 
    '<h1>Info</h1>';
           
              echo 
    '<p>'.substr($getAll->getValue('DATE'), 62).'.'.substr($getAll->getValue('DATE'), 42).'.'.substr($getAll->getValue('DATE'), 04);
             
           if (
    $getAll->getValue('TIME'))
          {
          echo  
    ' - '.$getAll->getValue('TIME').' Uhr';
           }
       
       
       echo 
    '</p>';
       echo 
    '<p>'.$getAll->getValue('EVENT').'</p>';
       if(
    $getAll->getValue('DETAIL')){ print("<p class=\"back\"><a href=\"index.php?article_id=".$getAll->getValue('DETAIL')."\">Detail</a></p><br clear=\"all\">"); }
           }
           else
           {
              echo 
    '<p class="warning">Dieses Event existiert nicht!</p>';
           }
           
           echo 
    '<p class="back"><a href="javascript:history.back()">zur&uuml;ck zum Kalender</a></p>';
          echo 
    '</div>';
        }

        
    ?>
    Das ist der Teil mit dem Problem:
    PHP-Code:
    echo '<div id="kalender">';
    echo 
    '<h2><span class="last"><a href="index.php?article_id='.$art.'&amp;month='.($makeCal->getMonthAsNumber()-1).'"><img src="files/last.png" alt="vorheriger Monat" /></a></span> ';
    echo 
    " ".$makeCal->getMonth()." ";
    echo 
    '<span class="next"><a href="index.php?article_id='.$art.'&amp;month='.($makeCal->getMonthAsNumber()+1).'"><img src="files/next.png" alt="nächster Monat" /></a></span></h2>';
    echo 
    $makeCal->getKalender();
    echo 
    '</div>'
    Somit kann man bei der Kalender-Ansicht durch die Monate blättern. Jedoch ist mir nicht klar wie ich auch das Jahr einbauen soll. Wenn es also bei Dezember 2012 ankommt, soll danach logischerweise Januar 2013 kommen. Im Moment bleibt es immer im gleichen Jahr 2012.

    Habt ihr einen Tipp für mich, wie ich das Jahr auch einbauen kann beim blättern?

    Vielen Dank!!!

  • #2
    Im verlinkten Kalender kommt doch der Januar 2013? Der 01.01.2013 ist ein Dienstag - der 01.01.2012 war ein Sonntag, somit stimmt die Ausgabe.

    Wenn es dir "nur" darum geht, der Ausgabe noch das Jahr hinzuzufügen, dann hast du mind. zwei Möglichkeiten.
    1. Du erweiterst die Methde getMonth und gibst der noch das Jahr mit (schlechtere Variante)
    2. Du schreibst eine Methode die das dazu passende Jahr ausgibt und hängst die an die Ausgabe des Monats an.


    Grüße in die Schweiz.

    Kommentar


    • #3
      Danke für die Antwort!

      Richtig, es kommt Januar 2013. Gehe ich aber wieder eins weiter, bin ich bei Februar 2012. Und wenn ich vom Januar 2013 eins zurück gehe, bin ich, so wie es aussieht, auch nicht im Dezember 2012.

      Bin ehrlich gesagt kein PHP-Profi.. Ist denn getMonth und getYear eine standartisierte PHP-Methode?

      Kommentar


      • #4
        Ich hoffe dieser Code wird nirgendwo online verwendet, da er voll mit Sicherheitslücken ist (Stichwort SQL-Escaping).

        Kommentar


        • #5
          Hi,
          Zitat von h3ll Beitrag anzeigen
          Ich hoffe dieser Code wird nirgendwo online verwendet, da er voll mit Sicherheitslücken ist (Stichwort SQL-Escaping).
          Fragt sich nur, wo hier SQL verwendet wird.

          Kommentar


          • #6
            Zitat von Guenni61 Beitrag anzeigen
            Fragt sich nur, wo hier SQL verwendet wird.
            PHP-Code:
                   $getAll->setQuery("SELECT * FROM rex_120_events WHERE ID='".$_REQUEST['eventid']."'"); 

            Kommentar


            • #7
              Wenn es zu einer Überschreitung der Jahresgrenze kommt (nach oben oder unten), wird zwar der Wert der Variablen curYear innerhalb der Klassen-Instanz korrigiert – aber immer nur in Bezug auf das aktuelle Jahr, und nicht auf das, in dem sich der Kalender ggf. durch vorherige Blätteraktionen bereits befand.

              Es fehlt die Instanziierung der Klasse mit dem Parameter givenYear – da eine solche nirgendwo stattfindet, wird für curYear immer direkt zu Beginn des Konstruktors das aktuelle Jahr gesetzt.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                zuerst mal danke an alle für die bisherigen Antworten und an dieser Stelle wünsche ich euch ein Gutes Neues Jahr!

                Es fehlt die Instanziierung der Klasse mit dem Parameter givenYear – da eine solche nirgendwo stattfindet, wird für curYear immer direkt zu Beginn des Konstruktors das aktuelle Jahr gesetzt.
                Und für den Monat stimmt es? Wo findet denn im Code die Instanziierung für givenMonth statt? Bin wie gesagt kein grosser PHP-Profi.. Daher bin ich froh wenn ich evtl. anhand des Monats-Beispiel vielleicht auch den Jahr-Code irgendwie davon ableiten kann.

                Kommentar

                Lädt...
                X