Zum Inhalt springen

Problem mit jw_calendar

Erstellt am 28. Juli 2006 · 6 Antworten · letzte Antwort am 10. November 2009

Tags: Frage

erskine ·

Hallo zusammen,

ich habe die Typo3-Version 3.8.1 und die jw_calendar extension installiert. Fast alles läuft - fast alles :-(

Die jw_calendar-Ext. will mir keine Monatsansicht zeigen! Der Browser läd und läd und läd und bricht dann nach einer Minute mit einer Fehlermeldung ab (das Script würde zulange arbeiten). Ich habe die stelle lokalisiert, die solange dauert:

ab Zeile 422 (bei mir) in class.tx_jwcalendar_pi1_views.php
in der Funktion monthsNavi($time)

    $moment = $firstMonth;
    for($moment; $moment <= $lastMonth; $moment = strtotime('+1 month', $moment)){
   	if(strftime('%m', $moment)==strftime('%m', $time)) $monthT = $cMonthT;
      else $monthT = $oMonthT;
		$sims = array(); // Simple markers
      $m = strftime('%b', $moment);

	  $params=array();
 	  $params['time']=$moment;
 	  $params['uid'] = $this->uid;
      $params['view'] = $this->jwOptions['viewmode'];
      if($this->jwVars['cat']){
		 $params['cat'] = $this->jwVars['cat'];
	  }
      $sims['###DATA###'] = $this->pi_linkTP($m,Array($this->prefixId=>$params),$this->caching);
   /* replace it all */
	    $rowsArray[($i/$divider)] .= $this->cObj->substituteMarkerArrayCached($monthT, $sims, array(),array());
      $i++;
    }

Ich versteh leider noch nicht sehr viel Typo3-PHP also hoffe ich einer von euch Cracks könnte mir hierbei helfen ?!

Ich habe die selbe Ext. in der selben Version auch schon einmal benutzt und da funktioniert alles wunderbar! (da habe ich die Extension jedoch installiert, nachdem die Seite online ging - das ist meines Erachtens der einzige Unterschied)

Vielen, vielen Dank,
Marc

erskine ·

Tja man muß nur hartnäckig genug sein :-)

Mithilfe der Extension cc_debug habe ich dann doch noch herausgefunden woran es lag:

die Funktion strtotime() gab FALSE zurück. Damit konnte die Schleife ja nicht funktionieren.

In monthsNavi($time)

$firstMonth = strtotime("1 / 1 / $y");
$lastMonth = strtotime("12 / 31 / $y");

nach

$firstMonth = strtotime("1/1/".$y);
$lastMonth = strtotime("12/31/". $y);

und in calendarTable($time)

$mondayPre = strtotime('last monday', strtotime("$m / 2 / $y 12:00"));
$mondayPost = strtotime('first monday', strtotime(($m + 1)." / 1 / $y 12:00"));

in

$mondayPre = strtotime('last monday', strtotime($m."/2/".$y." 12:00"));
$mondayPost = strtotime('first monday', strtotime(($m + 1)."/1/".$y." 12:00"));

geändert und schon läuft es wie geschmiert!

Schleierhaft bleibt mir jedoch wieso der Fehler nur bei mir auf dem Rechner auftritt und nicht auf der Seite, die ich schon im Netz habe?? Liegt das vielleicht an einer anderen PHP-Version? Ich habe auf meinem Rechner Version 5.1.1 laufen (mit einer Version 4 habe ich es auch versucht, aber da gibt Apache haufenweise Fehler aus!).

Bis dann,

Marc

erskine ·

Übrigens habe ich in dem Zusammenhang noch einen "Fehler" entdeckt:

In calendarTable($time) :

$m = strftime('%m', $time);
$y = strftime('%y', $time);
$mondayPre = strtotime('last monday', strtotime($m."/2/".$y." 12:00"));
$mondayPost = strtotime('first monday', strtotime(($m + 1)."/1/".$y." 12:00"));

funktioniert nicht, wenn man auf den Dezember eines Jahres geht, weil dann $mondayPre größer ist als $mondayPost! Das führt dann später in calendarTableCol($time,$mondayPre,$mondayPost) dazu das eine Schleife gar nicht ausgeführt wird:

$moment = $mondayPre;
for($moment; $moment < $mondayPost; $moment = strtotime('+1 day', $moment)){
/* order it by daytypes not by weeks for vertical weeks */
/* Correction Mo = 0 ... Su = 6 */
$daynr = strftime('%w', $moment) == 0 ? 6 : strftime('%w', $moment)-1;
$daySets[$daynr][] = $moment;
$dayTypes[$daynr] =  substr(strftime('%a', $moment), 0, $this->jwOptions['month']['maxDaynameLenght']); 
}

Also in calendarTable($time):

$m = strftime('%m', $time);
$y = strftime('%y', $time);

$mondayPre = strtotime('last monday', strtotime($m."/2/".$y." 12:00"));
    	
if ($m == 12) {
$m = 1;
$y = $y + 1;
} else {
$m = $m + 1;	
}
    	    	
$mondayPost = strtotime('first monday', strtotime($m."/1/".$y." 12:00"));

... dann gehts!

Wenn ich hier übrigens denn letzten Mist erzähle dann last es mich wissen! :-)

Bis dann,
Marc

cater ·

Herzlichen Dank dafür, ich hab das Problem auch eine ganze Weile gehabt. Aber jetzt hab ich endlich einen Anhaltspunkt zum Suchen gefunden. Und es scheint wirklich an der PHP-Version zu liegen. Allerdings hat deine Lösung bei dir nicht ganz funktioniert, was daran liegen könnte, dass du dich nicht (genauso wie die Extension) ganz an die GNU-Vorgaben zur Zeitdarstellung hältst. Kann sein, dass der sich nur auf dem Linux beschwert oder warum auch immer. Aber hier sind auf jeden Fall meine Änderungen an der class.tx_jwcalendar_pi1_views.php

In der Funktion calendarTable

$mondayPre  = strtotime('last monday',  strtotime($m."/2/".$y."12:00"));
$mondayPost = strtotime('first monday', strtotime(($m + 1)."/1/".$y."12:00"));

In der Funktion monthsNavi

$firstMonth = strtotime($y.'-01-01');
$lastMonth  = strtotime($y.'-12-31');

Dann hatte ich noch einen Fehler, dass ich als Jahresnavigation immer nur 1970 hatte. Dies konnte ich ändern, indem ich in der Funktion monthView die Zuweisung der Jahre wie folgt geändert habe:

$lastYear   = strtotime((strftime('%Y', $time) - 1).'-12-01');
$nextYear   = strtotime((strftime('%Y', $time) + 1).'-01-01');

edit: Das ist übrigens bei der jw_calendar Version 1.3.20. Ich weiß jetzt nicht genau, ob es mittlerweile eine neue gibt, die diese Fehler nicht mehr hat.

zorc68 ·

Hallo erskine

ich habe das gleiche problem wie Du, dass bei mir die Monatsansicht nicht funktioniert. Kannst Du mir als PHP Laien erklären, wie Du es gelöst hast.
Danke
Marc

xtine ·

Vielen Dank erskine, klappt wunderbar!!
Nur ein bißchen abgewandelt bei mir:

$mondayPre = strtotime('last monday', strtotime($y.'-'.$m.'-02 12:00:00'));
if ($m == 12) {
   $m = 1;
   $y = $y + 1;
} else {
   $m = $m + 1;   
}
$mondayPost = strtotime('first monday', strtotime($y.'-'.$m.'-01 12:00:00'));