[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Event Kalender bleibt immer im aktuellen Jahr - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Fanello
Beiträge: 336
Registriert: 24. Mai 2006, 14:01
Wohnort: Riedt (Schweiz)

Event Kalender bleibt immer im aktuellen Jahr

27. Dez 2012, 15:17

Liebe Redaxo-Gemeinde

Es geht um die Ausgabe des Event-Cal.
Das ist mein aktuelles Ausgabe-Modul für den Kalender (zu sehen hier: http://www.tckreuzlingen.ch/index.php?a ... 1&month=12):

Code: Alles auswählen

    <?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(0, 0, 0, $this->curMonth, 1, $this->curYear));
          $this->firstDay = date('w', mktime(0, 0, 0, $this->curMonth, 1, $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->values, NULL);
          }
          
          //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($col= 1; $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'), 6, 2), '<a href="index.php?article_id='.$art.'&eventid='.$getAll->getValue('ID').'">'.substr($getAll->getValue('DATE'), 6, 2).'</a>');
          }
          $getAll->next();
       
       }
	   echo '<div id="kalender">';
       echo '<h2><span class="last"><a href="index.php?article_id='.$art.'&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.'&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'), 6, 2).'.'.substr($getAll->getValue('DATE'), 4, 2).'.'.substr($getAll->getValue('DATE'), 0, 4);
          
    	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>';
    }

    ?>
Dabei geht es mir vor allem um diesen Teil:

Code: Alles auswählen

	   
echo '<div id="kalender">';
echo '<h2><span class="last"><a href="index.php?article_id='.$art.'&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.'&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!!!


PS: ich habe nun diese Frage auch in einem anderen Forum gestellt. Ich weiss, es nicht ganz die richtige Art, darum kann dieser Beitrag auch nicht beachtet werden. Sobald ich die Lösung habe, werde ich sie auf jeden Fall trotzdem hier posten. Wenn hier sonst jemand die Lösung weiss, darf er es natürlich auch gerne tun! :)

Fanello
Beiträge: 336
Registriert: 24. Mai 2006, 14:01
Wohnort: Riedt (Schweiz)

Re: Event Kalender bleibt immer im aktuellen Jahr

25. Jan 2013, 01:18

So funktioniert es perfekt:

Code: Alles auswählen

    <?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(0, 0, 0, $this->curMonth, 1, $this->curYear));
          $this->firstDay = date('w', mktime(0, 0, 0, $this->curMonth, 1, $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->values, NULL);
          }
          
          //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;
       }
       
       function getYear()
       {
          return $this->curYear;
       }


       //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($col= 1; $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']))
    {

       $getAll = new rex_sql;

       if(!isset($_REQUEST['month']))
       {
          $makeCal = new rex_cal();
       }
       else
       {
          $makeCal = new rex_cal($_REQUEST['month'],$_REQUEST['year']);
       }
       
       $getAll = new rex_sql;
       $getAll->setQuery("SELECT * FROM rex_120_events WHERE SUBSTRING(DATE, 5,2)='" . sprintf("%02d", $makeCal->getMonthAsNumber()) . "' AND SUBSTRING(DATE, 1,4)='" . sprintf("%02d", $makeCal->getYear()) . "'");
       
       for($u=0; $u<$getAll->getRows(); $u++)
       {
          if($getAll->getValue('DATE') != '')
          {
             $makeCal->setValue(substr($getAll->getValue('DATE'), 6, 2), '<a href="index.php?article_id='.$art.'&eventid='.$getAll->getValue('ID').'">'.substr($getAll->getValue('DATE'), 6, 2).'</a>');
          }
          $getAll->next();
       
       }
	   echo '<div id="kalender">';
       echo '<h2><span class="last"><a href="index.php?article_id='.$art.'&month='.($makeCal->getMonthAsNumber()-1).'&year='.$makeCal->getYear().'"><img src="files/last.png" alt="vorheriger Monat" /></a></span> ';
       echo $makeCal->getYear()." &ndash; ".$makeCal->getMonth()." ";
	   echo '<span class="next"><a href="index.php?article_id='.$art.'&month='.($makeCal->getMonthAsNumber()+1).'&year='.$makeCal->getYear().'"><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'), 6, 2).'.'.substr($getAll->getValue('DATE'), 4, 2).'.'.substr($getAll->getValue('DATE'), 0, 4);
          
    	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>';
    }



    ?>
Ich werde das original Event Kalender AddOn (ich hatte nämlich noch ein paar Sachen angepasst) nochmals testen zusammen mit dieser Modulausgabe. Evtl. könnte man ja danach dieses Modul auch im Download-Bereich zur Verfügung stellen, oder?

redaxoist
Beiträge: 133
Registriert: 7. Feb 2006, 12:15

Re: Event Kalender bleibt immer im aktuellen Jahr

23. Mai 2013, 20:58

Vielen Dank für Deine Bemühungen.

Es gibt eine aktualisierte Version des Addons, da ich nach zwei Jahren ohne Redaxo wieder ein Redaxo-System nutze.

Zurück zu „Allgemeines [R4]“