Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ajax Calendar
Forum PHP.pl > Forum > PHP
Bajki
Witam
szukalem jakis czas ladnego skryptu ajax generujacego kalendarz (z wykorzystaniem php - poniewaz chcialem wzbogacić go o wyświetlanie wydarzen) no i znalazłem coś takiego :

http://www.bmgadg.com/ajax_calendar.php

i mam pare pytań do tego skryptu jak już napisałem w opisie winksmiley.jpg po pierwsze - i może narazie do tego sie ogranicze - kalendarz ten pokazuje tydzien zaczynając od niedzieli...macie pomysł jak zmodyfikować kod tak, aby zaczynał od poniedziałku ? winksmiley.jpg z chęcia zrobił bym to sam ale poprostu kod tego kalendarza (jak i każdego innego) jest dla mnie troche niezrozumiały ;/

oto kod pliku php :

  1. <? 
  2.  
  3. $output = '';
  4. $month = $_GET['month'];
  5. $year = $_GET['year'];
  6.  
  7. if($month == '' && $year == '') { 
  8. $time = time();
  9. $month = date('n',$time);
  10. $year = date('Y',$time);
  11. }
  12.  
  13. $date = getdate(mktime(0,0,0,$month,1,$year));
  14. $today = getdate();
  15. $hours = $today['hours'];
  16. $mins = $today['minutes'];
  17. $secs = $today['seconds'];
  18.  
  19. if(strlen($hours)<2) $hours="0".$hours;
  20. if(strlen($mins)<2) $mins="0".$mins;
  21. if(strlen($secs)<2) $secs="0".$secs;
  22.  
  23. $days=date("t",mktime(0,0,0,$month,1,$year));
  24. $start = $date['wday']+1;
  25. $name = $date['month'];
  26. $year2 = $date['year'];
  27. $offset = $days + $start - 1;
  28.  
  29. if($month==12) { 
  30. $next=1; 
  31. $nexty=$year + 1; 
  32. } else { 
  33. $next=$month + 1; 
  34. $nexty=$year; 
  35. }
  36.  
  37. if($month==1) { 
  38. $prev=12; 
  39. $prevy=$year - 1; 
  40. } else { 
  41. $prev=$month - 1; 
  42. $prevy=$year; 
  43. }
  44.  
  45. if($offset <= 28) $weeks=28; 
  46. elseif($offset > 35) $weeks = 42; 
  47. else $weeks = 35; 
  48.  
  49. $output .= "
  50. <table class='cal' cellspacing='1'>
  51. <tr>
  52. <td colspan='7'>
  53. <table class='calhead'>
  54. <tr>
  55. <td>
  56. <a href='javascript:navigate($prev,$prevy)'><img src='./calendar/calLeft.gif' alt='Poprzedni miesiac' title='Poprzedni miesiac'></a> <a href='javascript:navigate(\"\",\"\")'><img src='./calendar/calCenter.gif' alt='Aktualny miesiac' title='Aktualny miesiac'></a> <a href='javascript:navigate($next,$nexty)'><img src='./calendar/calRight.gif' alt='Nastepny miesiac' title='Nastepny miesiac'></a>
  57. </td>
  58. <td align='right'>
  59. <div>$name $year2</div>
  60. </td>
  61. </tr>
  62. </table>
  63. </td>
  64. </tr>
  65. <tr class='dayhead'>
  66. <td>Ndz</td>
  67. <td>Pon</td>
  68. <td>Wt</td>
  69. <td>Sr</td>
  70. <td>Czw</td>
  71. <td>Pt</td>
  72. <td>Sob</td>
  73. </tr>";
  74.  
  75. $col=1;
  76. $cur=1;
  77. $next=0;
  78.  
  79. for($i=1;$i<=$weeks;$i++) { 
  80. if($next==3) $next=0;
  81. if($col==1) $output.="<tr class='dayrow'>"; 
  82.  
  83. $output.="<td valign='top' onMouseOver=\"this.className='dayover'\" onMouseOut=\"this.className='dayout'\">";
  84.  
  85. if($i <= ($days+($start-1)) && $i >= $start) {
  86. $output.="<div class='day'><b";
  87.  
  88. if(($cur==$today[mday]) && ($name==$today[month])) $output.=" style='color:#C00'";
  89.  
  90. $output.=">$cur</b></div></td>";
  91.  
  92. $cur++; 
  93. $col++; 
  94.  
  95. } else { 
  96. $output.="&nbsp;</td>"; 
  97. $col++; 
  98. }
  99.  
  100. if($col==8) { 
  101. $output.="</tr>"; 
  102. $col=1; 
  103. }
  104. }
  105.  
  106. $output.="</table>";
  107.  
  108. echo $output;
  109.  
  110. ?>


Pozdrawiam i z góry dziękuje za odpowiedzi
Cezar708
Po pierwsze:

zamień odpowiedni kod od linii 65 na:
  1. <tr class='dayhead'>
  2. <td>Pon</td>
  3. <td>Wt</td>
  4. <td>Sr</td>
  5. <td>Czw</td>
  6. <td>Pt</td>
  7. <td>Sob</td>
  8. <td>Ndz</td>
  9. </tr>


czyli po prostu zamień tak aby Ndz była ostatnia

następnie zmień linię 24 z
  1. <?php
  2. $start = $date['wday']+1;
  3. ?>

na
  1. <?php
  2. $start = $date['wday'];
  3. ?>


usuwając to +1

to wszystko, Twój kalendarz zaczyna się od poniedziałku.

Pozdrawiam
Cezar708
Bajki
haha o kurcze nie wiedzialem ze to takie proste biggrin.gif myslalem, ze trzeba bedzie diametralnie zmienić cały kod winksmiley.jpg dzięki wielkie exclamation.gif

teraz pora na cos bardziej skomplikowanego tongue.gif mianowicie mam tabele z wydarzeniami :
kolumny : id, date, text (opis wydarzenia), user_id (id uzytkownika, który dodał wydarzenie)

i chciałbym, aby kod odpowiedzialny za wyświetlanie kalendarza, przy wyświetlaniu każdego dnia z kolei sprawdzał, czy istnieje w bazie wpis o dacie takiej jak ten dzień a jeśli tak, to zamienia numer na link...jednak moja obsługa mysqla do tej pory opierała się na wczytywaniu zawartości tabeli sql do tablicy i wyswietlaniu jej w pętli...a że w tym skrypcie dni wyświetla również pętla to troche nie wiem jak to ze sobą połączyć ;/
Cezar708
Linię 90 ZAMIENIASZ na to:
  1. <?php
  2. $curDate = "$year2-" . ($month<10 ? "0$month" : $month) . "-" . ($cur<10 ? "0$cur" : $cur);
  3.  
  4. if ($recordLink = getRecordLink($curDate)) {
  5. $output.="><a href='$recordLink'>$cur</a></b></div></td>";
  6. } else {
  7. $output.=">$cur</b></div></td>";
  8. }
  9. ?>


następnie musisz sam napisać funkcję getRecordLink($curDate). $curDate to data odpowiadająca numerowi dnia, która ma być podlinkowana.

Format daty to YYY-MM-DD

Twoja funkcja getRecordLink($curDate) musi zwracać poprawny likn do zasobu, który ma obsłużyć, wartość zwrócona przez funkcję będzie wpisana <a href="TUTAJ">...

Zrobisz po prostu w niej przeszukanie Twojej bazy danych i jeśli coś istnieje tworzysz adres, a jeśli nie zwracaj false, 0 lub NULL.

Pozdrawiam
Bajki
ok super wszystko dziala ! winksmiley.jpg

teraz chyba ostatnie pytanie, czyli jak przetlumaczyc nazwy miesiecy na polskie. Pewnie trzeba stworzyc tablice z polskimi nazwami a potem jakos je pozamieniac ale poraz kolejny niebardzo mam pomysł jak to zrobić :/
Cezar708
Cytat(Bajki @ 18.05.2008, 13:06:53 ) *
ok super wszystko dziala ! winksmiley.jpg

teraz chyba ostatnie pytanie, czyli jak przetlumaczyc nazwy miesiecy na polskie. Pewnie trzeba stworzyc tablice z polskimi nazwami a potem jakos je pozamieniac ale poraz kolejny niebardzo mam pomysł jak to zrobić :/


dobrze prawisz... zrób to mniej więcej tak, zamień linię 25 na:

  1. <?php
  2. $polishMonths = array(
  3. 'January' => 'styczeń',
  4. 'February' => 'luty',
  5. /// pozostale miesiace to juz sam wpisz wg podanego wzoru
  6. 'May' => 'maj',
  7. /// pozostale miesiace to juz sam wpisz wg podanego wzoru
  8. 'December' => 'grudzień'
  9. );
  10.  
  11. $name = $polishMonths[trim($date['month'])];
  12. ?>


Pozdrawiam
Bajki
ok sa polskie nazwy ale jest jeden maly problem, chodzi o linijke 88... wydaje mi sie, ze skrypt przez to przetlumaczenie nazw na polski, nie potrafi rozpoznac czy aktualnie 'pokazywany' dzien jest dniem dzisiejszym snitch.gif
Cezar708
Cytat(Bajki @ 18.05.2008, 15:26:17 ) *
ok sa polskie nazwy ale jest jeden maly problem, chodzi o linijke 88... wydaje mi sie, ze skrypt przez to przetlumaczenie nazw na polski, nie potrafi rozpoznac czy aktualnie 'pokazywany' dzien jest dniem dzisiejszym snitch.gif


ano fakt, w zasadzie to Ty tej zmiennej w takiej postaci nie potrzebujesz, więc zrób:
  1. <?php
  2. $nameToPrint = $polishMonths[trim($date['month'])];
  3. $name = $date['month'];
  4. ?>

zamiast
  1. <?php
  2. $name = $polishMonths[trim($date['month'])];
  3. ?>


oraz
  1. <div>$nameToPrint $year2</div>

zamiast
  1. <div>$name $year2</div>


Powinno wystarczyć

Pozdrawiam
Bajki
okej ! teraz wszystko dziala poza jedna mala rzecza...chodzi oto, ze zmodyfikowalem nieco skrypt tak aby dla dni z przypisanym eventem wczytywany byl inny styl, dla dni bez eventa inny (domyślny) a dla dnia dzisiejszego z eventem jeszcze inny. w rezultacie niestety dla dnia dzisiejszego (bez eventa) przypisywany jest styl, ktory powinien byc przy dniu dzisiejszym ale Z eventem. Nie wiem czy jasno sie wyrazilem ;P jak nie to wyjasnie od nowa jeszcze raz biggrin.gif

kod pliku calendar.php :
  1. <? 
  2.  
  3. include('../includes/db_connect.php');
  4.  
  5. function getRecordLink($curDate) {
  6.  
  7. $sql = mysql_query("SELECT * FROM calendar_events WHERE date='".$curDate."'");
  8.  
  9. if($wiersz = mysql_fetch_array($sql))
  10. return strtotime($wiersz['date']);
  11.  
  12. else return 0;
  13.  
  14. }
  15.  
  16. $output = '';
  17. $month = $_GET['month'];
  18. $year = $_GET['year'];
  19.  
  20. if($month == '' && $year == '') { 
  21. $time = time();
  22. $month = date('n',$time);
  23. $year = date('Y',$time);
  24. }
  25.  
  26. $date = getdate(mktime(0,0,0,$month,1,$year));
  27. $today = getdate();
  28. $hours = $today['hours'];
  29. $mins = $today['minutes'];
  30. $secs = $today['seconds'];
  31.  
  32. if(strlen($hours)<2) $hours="0".$hours;
  33. if(strlen($mins)<2) $mins="0".$mins;
  34. if(strlen($secs)<2) $secs="0".$secs;
  35.  
  36. $days=date("t",mktime(0,0,0,$month,1,$year));
  37. $start = $date['wday'];
  38. $polishMonths = array(
  39. 'January' => 'Styczen',
  40. 'February' => 'Luty',
  41. 'March' => 'Marzec',
  42. 'April' => 'Kwiecien',
  43. 'May' => 'Maj',
  44. 'June' => 'Czerwiec',
  45. 'July' => 'Lipiec',
  46. 'August' => 'Sierpien',
  47. 'September' => 'Wrzesien',
  48. 'Octover' => 'PaĽdziernik',
  49. 'November' => 'Listopad',
  50. 'December' => 'Grudzien',
  51. );
  52. $nameToPrint = $polishMonths[trim($date['month'])];
  53. $name = $date['month'];
  54. $year2 = $date['year'];
  55. $offset = $days + $start - 1;
  56.  
  57. if($month==12) { 
  58. $next=1; 
  59. $nexty=$year + 1; 
  60. } else { 
  61. $next=$month + 1; 
  62. $nexty=$year; 
  63. }
  64.  
  65. if($month==1) { 
  66. $prev=12; 
  67. $prevy=$year - 1; 
  68. } else { 
  69. $prev=$month - 1; 
  70. $prevy=$year; 
  71. }
  72.  
  73. if($offset <= 28) $weeks=28; 
  74. elseif($offset > 35) $weeks = 42; 
  75. else $weeks = 35; 
  76.  
  77. $output .= "
  78. <table class='cal' cellspacing='1'>
  79. <tr>
  80. <td colspan='7'>
  81. <table class='calhead'>
  82. <tr>
  83. <td>
  84. <a href='javascript:navigate($prev,$prevy)'><img src='./calendar/calLeft.gif' alt='Poprzedni miesiac' title='Poprzedni miesiac'></a> <a href='javascript:navigate(\"\",\"\")'><img src='./calendar/calCenter.gif' alt='Aktualny miesiac' title='Aktualny miesiac'></a> <a href='javascript:navigate($next,$nexty)'><img src='./calendar/calRight.gif' alt='Nastepny miesiac' title='Nastepny miesiac'></a>
  85. </td>
  86. <td align='right'>
  87. <div>$nameToPrint $year2</div>
  88. </td>
  89. </tr>
  90. </table>
  91. </td>
  92. </tr>
  93. <tr class='dayhead'>
  94. <td>Pon</td>
  95. <td>Wt</td>
  96. <td>Sr</td>
  97. <td>Czw</td>
  98. <td>Pt</td>
  99. <td>Sob</td>
  100. <td>Ndz</td>
  101. </tr>";
  102.  
  103. $col=1;
  104. $cur=1;
  105. $next=0;
  106.  
  107. for($i=1;$i<=$weeks;$i++) { 
  108. if($next==3) $next=0;
  109. if($col==1) $output.="<tr class='dayrow'>"; 
  110.  
  111. $output.="<td valign='top'style='font-weight: bold;' onMouseOver=\"this.className='dayover'\" onMouseOut=\"this.className='dayout'\">";
  112.  
  113. if($i <= ($days+($start-1)) && $i >= $start) {
  114. $output.="<div class='day'><div";
  115.  
  116. if(($cur==$today[mday]) && ($name==$today[month])) $output.=" id='today'";
  117.  
  118. // SEARCH FOR EVENT FUNCTION
  119.  
  120. $curDate = "$year2-" . ($month<10 ? "0$month" : $month) . "-" . ($cur<10 ? "0$cur" : $cur);
  121.  
  122. if ($recordLink = getRecordLink($curDate)) {
  123. $output.=" id='normal_day'><a href='./calendar/event.php?d=$recordLink' class='calendar_link' title='$curDate' onclick='Modalbox.show(this.href, {title: this.title, width: 300}); return false;'> 
  124. $cur</a></b></div></td>";
  125. } else {
  126. $output.="><a href='./calendar/event.php?d=".strtotime($curDate)."' class='calendar_link' title='Dodaj wydazenie :: $curDate' onclick='Modalbox.show(this.href, {title: this.title, width: 300}); return false;'>$cur</a></p></div></td>";
  127. }
  128.  
  129. $cur++; 
  130. $col++; 
  131.  
  132. } else { 
  133. $output.="&nbsp;</td>"; 
  134. $col++; 
  135. }
  136.  
  137. // END OF FUNCTION
  138.  
  139. if($col==8) { 
  140. $output.="</tr>"; 
  141. $col=1; 
  142. }
  143. }
  144.  
  145. $output.="</table>";
  146.  
  147. echo $output;
  148.  
  149. ?>


style :
  1. td {
  2. font-family: "Trebuchet MS", Arial, Veranda, sans-serif;
  3. padding: 3px;
  4. }
  5.  
  6. #calback {
  7. background: #FFF url('calWaiting.gif') no-repeat 50% 100px;
  8. margin: 0 auto;
  9. width: 700px;
  10. }
  11.  
  12. #calendar {
  13. width: 100%;
  14. height: 100%;
  15. }
  16.  
  17. .cal {
  18. background: #000;
  19. width: 100%;
  20. }
  21.  
  22. .calhead {
  23. width: 100%;
  24. font-weight: bold;
  25. color: #FFF;
  26. font-size: 20px;
  27. }
  28.  
  29. .calhead img {
  30. border: none;
  31. }
  32.  
  33. .dayhead {
  34. height: 25px;
  35. background: #EEE;
  36. }
  37.  
  38. .dayhead td {
  39. text-align: center;
  40. color: #000;
  41. }
  42.  
  43. .dayrow {
  44. background: #FFF;
  45. height: 40px;
  46. }
  47.  
  48. .dayrow td {
  49. width: 50px;
  50. color: #000;
  51. font-size: .7em;
  52. }
  53.  
  54. .day {
  55. text-align: center;
  56. font-family: arial;
  57. font-size: 20pt;
  58. }
  59.  
  60. .dayover {
  61. background: #EEE;
  62. }
  63.  
  64. .dayout {
  65. background: #FFF;
  66. }
  67.  
  68. #today {
  69. width: 100%;
  70. height: 100%;
  71. }
  72.  
  73.  
  74. #today a{
  75. color: #CC0000;
  76. display: block;
  77. background-color: #EEEF77;
  78. margin: 0;
  79. padding: 0;
  80. }
  81.  
  82. #normal_day a{
  83. color: #000000;
  84. display: block;
  85. background-color: #EEEF77;
  86. }
  87.  
  88. a.calendar_link {
  89. color: #000000;
  90. }
xx88zg
Witam,

mam problem, ponieważ w momencie zmiany kalendarza na wyświetlanie od poniedziałku pojawił się problem, w przypadku miesiąca lutego - a co za tym idzie każdy kolejny miesiące jest źle wyświetlany.

W chwili obecnej wyświetla 27 dni i w dodatku wszystkie dni są przesunięte o 1 w przód - czyli dzisiaj jest 13 piątek, to w kalendarzy mamy 13 sobota.

Siedzę już nad tym trochę i nie mogę znaleźć błędu.

pozdrawiam

edit//

dodam jeszcze że przed zmianą czyli tydzien zaczyna się od niedzieli działa poprawnie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.