Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Kalendriga natuke abi tarvis märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
redenergy
HV veteran
redenergy

liitunud: 22.03.2004




sõnum 12.06.2010 17:20:12 Kalendriga natuke abi tarvis vasta tsitaadiga

Tervist, pärast 2 päeva otsides ja uurides erinevaid kalendreid leidsin lõpuks korraliku ja sobiva.
Toon lingi ka ära kui kellelgi veel peaks vaja minema: http://keithdevens.com/software/php_calendar

Nüüd teen seda natuke ümber. Nimelt lisan oma moodi eelmine ja järgmine kuu, et klikkides näiteks
järgmisel kuul tuleks aaddressi ribale calendar.php?year=2010&month=6
Hiljem üritan selle kalendri panna kuvama päevi mil on tehtud sisestus sql andmebaasi. Arvatavasti läheks sellega ka natuke abi vaja hiljem.

Probleem seisneb selles, et aaddressi ribal kuvatakse ainult kuu, aastat mingil põhjusel ei kuvata!?
Kas keegi targem teab põhjust?

php:
  1.  
  2. <?php
  3. # PHP Calendar (version 2.3), written by Keith Devens
  4.         if (!isset($_REQUEST["month"])) $_REQUEST["month"] = date("n");
  5.         if (!isset($_REQUEST["year"]))  $_REQUEST["year"]  = date("Y");
  6.        
  7.   $month = $_REQUEST["month"];
  8.   $year  = $_REQUEST["year"];
  9.                
  10.         $prev_month = $month-1;
  11.         $next_month = $month+1;
  12.  
  13.         if ($prev_month == 0 ) {
  14.     $prev_month = 12;
  15.     $prev_year = $year - 1;
  16.   }
  17.         if ($next_month == 13 ) {
  18.     $next_month = 1;
  19.     $next_year = $year + 1;
  20.   }
  21. function generate_calendar($year, $month, $days = array(), $day_name_length = 3, $month_href = NULL, $first_day = 0, $pn = array()){
  22.     $first_of_month = gmmktime(0,0,0,$month,1,$year);
  23.     #remember that mktime will automatically correct if invalid dates are entered
  24.     # for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998
  25.     # this provides a built in "rounding" feature to generate_calendar()
  26.  
  27.     $day_names = array(); #generate all the day names according to the current locale
  28.     for($n=0,$t=(3+$first_day)*86400; $n<7; $n++,$t+=86400) #January 4, 1970 was a Sunday
  29.         $day_names[$n] = ucfirst(gmstrftime('%A',$t)); #%A means full textual day name
  30.  
  31.     list($month, $year, $month_name, $weekday) = explode(',',gmstrftime('%m,%Y,%B,%w',$first_of_month));
  32.     $weekday = ($weekday + 7 - $first_day) % 7; #adjust for $first_day
  33.     $title   = htmlentities(ucfirst($month_name)).'&nbsp;'.$year#note that some locales don't capitalize month and day names
  34.  
  35.     #Begin calendar. Uses a real <caption>. See http://diveintomark.org/archives/2002/07/03
  36.     @list($p, $pl) = each($pn); @list($n, $nl) = each($pn); #previous and next links, if applicable
  37.     if($p) $p = '<span class="calendar-prev">'.($pl ? '<a href="'.htmlspecialchars($pl).'">'.$p.'</a>' : $p).'</span>&nbsp;';
  38.     if($n) $n = '&nbsp;<span class="calendar-next">'.($nl ? '<a href="'.htmlspecialchars($nl).'">'.$n.'</a>' : $n).'</span>';
  39.     $calendar = '<table class="calendar">'."\n".
  40.         '<caption class="calendar-month">'.$p.($month_href ? '<a href="'.htmlspecialchars($month_href).'">'.$title.'</a>' : $title).$n."</caption>\n<tr>";
  41.  
  42.     if($day_name_length){ #if the day names should be shown ($day_name_length > 0)
  43.         #if day_name_length is >3, the full name of the day will be printed
  44.         foreach($day_names as $d)
  45.             $calendar .= '<th abbr="'.htmlentities($d).'">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>';
  46.         $calendar .= "</tr>\n<tr>";
  47.     }
  48.  
  49.     if($weekday > 0) $calendar .= '<td colspan="'.$weekday.'">&nbsp;</td>'; #initial 'empty' days
  50.     for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){
  51.         if($weekday == 7){
  52.             $weekday   = 0; #start a new week
  53.             $calendar .= "</tr>\n<tr>";
  54.         }
  55.         if(isset($days[$day]) and is_array($days[$day])){
  56.             @list($link, $classes, $content) = $days[$day];
  57.             if(is_null($content))  $content  = $day;
  58.             $calendar .= '<td'.($classes ? ' class="'.htmlspecialchars($classes).'">' : '>').
  59.                 ($link ? '<a href="'.htmlspecialchars($link).'">'.$content.'</a>' : $content).'</td>';
  60.         }
  61.         else $calendar .= "<td>$day</td>";
  62.     }
  63.     if($weekday != 7) $calendar .= '<td colspan="'.(7-$weekday).'">&nbsp;</td>'; #remaining "empty" days
  64.  
  65.     return $calendar."</tr>\n</table>\n";
  66. }
  67.  
  68. $time = time();
  69.  
  70. $oldlocale = setlocale(LC_TIME, NULL); #save current locale
  71.  
  72. setlocale(LC_TIME, 'et_EE');
  73.  
  74. $today = date('j',$time);
  75.  
  76. $days = array($today=>array(NULL,NULL,'<span style="color: red; text-decoration: underline;">'.$today.'</span>'),
  77.  
  78.         2=>array('/weblog/archive/2010/6/02','linked-day'),
  79.  
  80.         3=>array('/weblog/archive/2010/6/03','linked-day'),
  81.  
  82.         8=>array('/weblog/archive/2010/6/08','linked-day'),
  83.  
  84.         22=>array('/weblog/archive/2010/6/22','linked-day'),
  85.     );
  86.  
  87.     echo generate_calendar($year, $month, $days, 1, NULL, 1);
  88.  
  89. setlocale(LC_TIME, $oldlocale);
  90. ?>
  91.                 <table border="0" cellpadding="0" cellspacing="0" width="150px">
  92.                 <tr>
  93.                 <td colspan="7" bgcolor="#FFFFFF" align="center" class="paev">
  94.                  <a href="<?php echo $_SERVER["PHP_SELF"] . "?month=". $prev_month . "&year=" . $prev_year; ?>" style="color:#000">&lt; Eelmine</a>
  95.                  <a href="<?php echo $_SERVER["PHP_SELF"] . "?month=". $next_month . "&year=" . $next_year; ?>" style="color:#000">Järgmine &gt;</a>
  96.                 </td>
  97.                 </tr>
  98.                 </table>
  99.  
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 9
tagasi üles
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 12.06.2010 17:30:03 vasta tsitaadiga

$prev_year ja $next_year on defineerimata ju enamus juhtudel
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 12.06.2010 17:38:18 vasta tsitaadiga

Viga peaks sul siin olema, $prev_month = $month-1; ja $next_month = $month+1; arvutatakse välja, kuid nüüd tuleb kontroll, kui $prev_month == 0; siis ta võrdub 12 ja sama kontrolli sees arvutatakse ka eelmine aasta.
See on kõik hea, kui sa küsid kuid järjest, aga kui sinu kuu päring on näiteks nüüd juuni (6) ja eelmine aasta, siis $prev_year = $year - 1; ei toimugi ja su lingil pole seda kusagilt võtta.


$month = $_REQUEST["month"];
  $year  = $_REQUEST["year"];
               
        $prev_month = $month-1;
        $next_month = $month+1;

        if ($prev_month == 0 ) {
    $prev_month = 12;
    $prev_year = $year - 1;
  }
        if ($next_month == 13 ) {
    $next_month = 1;
    $next_year = $year + 1;
  }


Sa peaksid selle aasta otse lingi sees välja arvutama, või siis koodi lõpus

<a href="<?php echo $_SERVER["PHP_SELF"] . "?month=". $prev_month . "&year=" .  ($year - 1); ?>" style="color:#000">&lt; Eelmine</a>
                 <a href="<?php echo $_SERVER["PHP_SELF"] . "?month=". $next_month . "&year=" .  ($year + 1); ?>" style="color:#000">Järgmine &gt;</a>


Edit: Näe ette jõuti, kole pikalt kirjutasin.

Kas seda kalendrit oled vaadanud, seal peaks olema kõik sind huvitavad funktsioonid sees. Ka andmebaasis päevade märkmik.
MF Kalender

Täis versioon

ja link ka moditud css pisikalendrile (sama mootor)
Tilluke versioon

_________________


viimati muutis andrusny 12.06.2010 17:42:05, muudetud 1 kord
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
redenergy
HV veteran
redenergy

liitunud: 22.03.2004




sõnum 12.06.2010 20:52:24 vasta tsitaadiga

Kerge tähelepanematus minupoolt.
Lisasin:
$prev_year = $year;
$next_year = $year;

Ja asi töötab thumbs_up.gif

Teine küsimus oleks ka.

php-brief:
  1. $days = array($today=>array(NULL,NULL,'<span style="color: red; text-decoration: underline;">'.$today.'</span>'),
  2.  
  3.         2=>array('/weblog/archive/2010/6/02','linked-day'),
  4.  
  5.         3=>array('/weblog/archive/2010/6/03','linked-day'),
  6.  
  7.         8=>array('/weblog/archive/2010/6/08','linked-day'),
  8.  
  9.         22=>array('/weblog/archive/2010/6/22','linked-day'),
  10.  


Kas on mingit valemit sellele, et nende 2, 3, 8, 22 (kuupäevade) asemele saaks panna kuidagi sql tabelist võetud päeva

Näiteks sellisel kujul see ei tööta. Aga kuidas selle "point'i" saaks tööle teisiti?

php-brief:
  1.  
  2. siin mysql_query jne
  3. while( mysql_fetch_array jne)
  4. {
  5. $paev = date('d',$timestamp);
  6. $days = array(
  7.                          $paev=>array('/2010/6/$paev','linked-day'),
  8.                      );
  9. }
  10.  
  11.  
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 9
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 12.06.2010 21:04:08 vasta tsitaadiga

php:
  1. $days[$paev] = array('/2010/6/$paev','linked-day');
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Kalendriga natuke abi tarvis
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.