Problem mit jw_calendar [Gelöst]

  • erskine erskine
    T3PO
    0 x
    18 Beiträge
    0 Hilfreiche Beiträge
    28. 07. 2006, 19:55

    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)

    1. $moment = $firstMonth;
    2. for($moment; $moment <= $lastMonth; $moment = strtotime('+1 month', $moment)){
    3. if(strftime('%m', $moment)==strftime('%m', $time)) $monthT = $cMonthT;
    4. else $monthT = $oMonthT;
    5. $sims = array(); // Simple markers
    6. $m = strftime('%b', $moment);
    7.  
    8. $params=array();
    9. $params['time']=$moment;
    10. $params['uid'] = $this->uid;
    11. $params['view'] = $this->jwOptions['viewmode'];
    12. if($this->jwVars['cat']){
    13. $params['cat'] = $this->jwVars['cat'];
    14. }
    15. $sims['###DATA###'] = $this->pi_linkTP($m,Array($this->prefixId=>$params),$this->caching);
    16. /* replace it all */
    17. $rowsArray[($i/$divider)] .= $this->cObj->substituteMarkerArrayCached($monthT, $sims, array(),array());
    18. $i++;
    19. }

    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


  • 1
  • erskine erskine
    T3PO
    0 x
    18 Beiträge
    0 Hilfreiche Beiträge
    29. 07. 2006, 12:52

    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)

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

    nach

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

    und in calendarTable($time)

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

    in

    1. $mondayPre = strtotime('last monday', strtotime($m."/2/".$y." 12:00"));
    2. $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 erskine
    T3PO
    0 x
    18 Beiträge
    0 Hilfreiche Beiträge
    29. 07. 2006, 14:42

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

    In calendarTable($time) :

    1. $m = strftime('%m', $time);
    2. $y = strftime('%y', $time);
    3. $mondayPre = strtotime('last monday', strtotime($m."/2/".$y." 12:00"));
    4. $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:

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

    Also in calendarTable($time):

    1. $m = strftime('%m', $time);
    2. $y = strftime('%y', $time);
    3.  
    4. $mondayPre = strtotime('last monday', strtotime($m."/2/".$y." 12:00"));
    5.  
    6. if ($m == 12) {
    7. $m = 1;
    8. $y = $y + 1;
    9. } else {
    10. $m = $m + 1;
    11. }
    12.  
    13. $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 cater
    T3PO
    0 x
    13 Beiträge
    0 Hilfreiche Beiträge
    05. 08. 2006, 19:13

    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

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

    In der Funktion monthsNavi

    1. $firstMonth = strtotime($y.'-01-01');
    2. $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:

    1. $lastYear = strtotime((strftime('%Y', $time) - 1).'-12-01');
    2. $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 zorc68
    Jedi-Ritter
    0 x
    140 Beiträge
    0 Hilfreiche Beiträge
    06. 09. 2006, 17:03

    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

  • semidark semidark
    R2-D2
    0 x
    116 Beiträge
    0 Hilfreiche Beiträge
    07. 02. 2008, 15:53

    Hallo erskine,

    danke für diesen Thread. Hat mir ne ganze menge Debugging gespart. ;)

    Gruß Semidark

  • xtine xtine
    TYPO3-Anwärter
    0 x
    7 Beiträge
    0 Hilfreiche Beiträge
    10. 11. 2009, 09:40

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

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

  • 1