Gilbert Skrevet 3. juli 2004 Del Skrevet 3. juli 2004 (endret) Jeg vil gjerne ha en liten kalender som viser en måned med klikkbare datoer. Målet er at den skal se slik ut: CSS-biten er grei, foreløpig er det viktigste å få kalenderen til å vise rett måneder, datoer, uker og rett markering av søn- og helligdager. Jobber aktivt med saken i dette øyeblikk, oppdaterer posten så snart jeg står fast. Første utfordring: Hvordan få ukedagene til å starte rett? I eksempelet er 1. på en plass midt i uken. Hvordan løse det? Endret 3. juli 2004 av fjartan Lenke til kommentar
TiMMi- Skrevet 3. juli 2004 Del Skrevet 3. juli 2004 (endret) Jeg anbefaler deg til å se på getdate-funksjonen HER. Du kan se om du skjønner selv, ellers kan jeg godt forklare videre! (Regner med at du vil gjøre så mye som mulig selv) EDIT: Glemte mktime-funksjonen. Kan være nyttig den og. HER!. Brukte den sammen med getdate for å finne første dagen i måneden. Endret 3. juli 2004 av TiMMi- Lenke til kommentar
???????? Skrevet 3. juli 2004 Del Skrevet 3. juli 2004 (endret) For lenge siden når jeg holdt på å lære meg php skrev jeg en kalender, koden kan skrives mye bedre - men den gir deg kanskje noen ideer. <?php $monthname = array("", "Januar", "Februar", "Mars", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Desember"); $day = date("d"); $month = date("m"); $year = date("Y"); $first_day_of_month = date("w", mktime (0,0,0,$month,1,$year)); if($first_day_of_month == 0) $first_day_of_month = 7; $days_in_month = cal_days_in_month(CAL_GREGORIAN, $month, $year); echo "<table border=\"1\" cellspacing=0>\n <tr>\n <td colspan=7>\n <center><b>".$monthname[$month]." ".$year."</b></center>\n </td>\n </tr>\n <tr>\n"; echo " <td>\n Man\n </td>\n <td>\n Tirs\n </td>\n <td>\n Ons\n </td>\n <td>\n Tors\n </td>\n <td>\n Fre\n </td>\n <td>\n Lør\n </td>\n <td>\n Søn\n </td>\n"; $the_day = 0; for($i = 1; $i < $days_in_month + $first_day_of_month; $i++){ if($i%7==1){ echo "</tr><tr>"; } if($first_day_of_month > $i){ echo "<td>-</td>"; }else{ $the_day++; echo "<td>$the_day</td>"; } } while($i%7!=1){ echo "<td>-</td>"; $i++; } echo "</table>" ?> EDIT: for å finne første dagen i måneden, dvs. ukedagen, bruker du bare date("w", timestamp); Endret 3. juli 2004 av ???????? Lenke til kommentar
Gilbert Skrevet 3. juli 2004 Forfatter Del Skrevet 3. juli 2004 (endret) hmz... det må være lenge siden, for funksjonen cal_days_in_month() gir meg feilmelding - Fatal error: Call to undefined function: cal_days_in_month() - når jeg forsøker å kjøre skriptet. edit: rart, finner jo funksjonen i manualen. Har phpv- 4.3.6 Endret 3. juli 2004 av fjartan Lenke til kommentar
???????? Skrevet 3. juli 2004 Del Skrevet 3. juli 2004 (endret) Den funksjonen tror jeg at jeg la til senere, men det er uansett lenge siden jeg redigerte på det. Du kan løse det lett likevel, bare lag en array med antallet dager i måneden og så slår du opp i manualen på date() og finner funksjonen for skuddår (leap year). Hvis det er skudd år så legger du bare til en dag ekstra i februar. Eventuelt så kan du bare bruke mktime, sette dagen til 0 og måneden +1. F.eks.: $days_in_month = date("d", mktime(0,0,0,date("m")+1, 0, date("y"))); Som sagt så er det lenge siden jeg lagde det scriptet, og det er mye som kan forbedres. Edit: Måtte teste scriptet, og det fungerer bra på PHP 4.3.7 - uten spesielle endringer i ini filen. Endret 3. juli 2004 av ???????? Lenke til kommentar
RipZ- Skrevet 4. juli 2004 Del Skrevet 4. juli 2004 http://www.sindrem.com/vis_side.php?site=php/sites/cal.php - Denne er en mulighet, men vil sannsynligvis ikke fungere siden de færrste lar brukerene få kjøre egne kommandoer på serveren. fjartan: Grunnen til at ikke funksjonene fungerer til deg, er at alle kalenderfunksjonene inkluderes i en såkalt tillegspakke (extension). Står mer om dette her: http://no2.php.net/manual/en/ref.calendar.php Du burde finne noen scripts du kan bruke på www.hotscripts.com, om du ikke tar utfordringen selv, noe som er mye morsommere. Lenke til kommentar
Gilbert Skrevet 4. juli 2004 Forfatter Del Skrevet 4. juli 2004 Joa, hensikten er jo å gjøre dette selv. Har funnet en funksjon som omgår cal_days_in_month() (noe lignende ?????? har skrevet), men skal ta en titt på linken til RipZ og se om ikke jeg kan få extensionen Lenke til kommentar
Gilbert Skrevet 4. juli 2004 Forfatter Del Skrevet 4. juli 2004 Så er greia. Basert på scriptet til ?????? så vil jeg ha en annen farge på annenhver linje (se illustrasjon ovenfor). Tenkte da å finne ut om $i var mellom 8-14, 22-28 og 36-42. Hva er enkleste da? Array? Lenke til kommentar
Gilbert Skrevet 4. juli 2004 Forfatter Del Skrevet 4. juli 2004 hups, et spørsmål til: i en database er det lagret events med unix timestamp. Hvordan kan jeg enklest hente ut events i en spesiell dato? På hver dato i kalenderen kan man klikke for å få opp events. Variabler som sendes er $vis_dato, $vis_maned og $vis_ar. Lenke til kommentar
RipZ- Skrevet 5. juli 2004 Del Skrevet 5. juli 2004 Tar jeg ikke helt feil blir hver events lagret i unix timestamp hvor også minutter, timer og kanskje sekunder også inngår. Derfor må du finne alle innleggene med et timestamp som er lik eller mer enn 00:00, og mindre enn 24:00 (24 og 00 er egentlig det samme. Men 24 indikerer i dette tilfellet at det er helt på slutten av en dag, altså 00 i en ny dag). Det gjør du f.eks slik: $begynnelse = mktime ( 0, 0, 0, $vis_maned, $vis_dato, $vis_ar); $slutt= mktime ( 0, 0, 0, $vis_maned, $vis_dato + 1, $vis_ar); Nå har du begynnelsen og slutten av dagen i unix timestamps. Så tar du en simpel select spørring. SELECT * from tabell where dato >= $begynnelse and dato < $slutt Lenke til kommentar
???????? Skrevet 5. juli 2004 Del Skrevet 5. juli 2004 Du behøver ikke å bruke mktime, som RipZ- foreslår, mysql har en egen funksjon for dette: UNIX_TIMESTAMP() Videre for å få farger på annen hver linje er ikke array noen god løsning, ta heller utgangspunktet i denne delen av koden: if($i%7==1){ echo "</tr><tr>"; } Legg til en variable som hver gang plusses med 1. if($var%2==1){ echo "</tr><tr>"; }else{ echo "</tr><tr bgcolor="en eller annen farge">"; } Lenke til kommentar
Torbjørn Skrevet 5. juli 2004 Del Skrevet 5. juli 2004 personlig liker jeg itereringen $color = ( $i = 1 - $i ) ? "#505050" : "#a0a0a0"; ... da den har en lineær algebra analogi, og derfor gir en pekepin på hvordan man kan gå fram for å iterere over flere verdier enn to (en og null) hvis ønskelig, men det blir litt perifert. for eksemplet over er det bedre å bruke $i = !$i, men alternativet med mod operatoren ( ++$i % 2 ) er like bra. Lenke til kommentar
???????? Skrevet 5. juli 2004 Del Skrevet 5. juli 2004 Absolutt et meget godt forslag fra Torbjørn! Lenke til kommentar
Gilbert Skrevet 5. juli 2004 Forfatter Del Skrevet 5. juli 2004 torbjørn: forslaget ditt forandret hele kalenderen: med den lineære saken stoppet websiden å loade - så går ut fra at $i forandret noe? Uansett, den andre gjorde at datoene forskjøv seg ujevnt. Lenke til kommentar
Torbjørn Skrevet 5. juli 2004 Del Skrevet 5. juli 2004 ikke noen grunn til at den skal slutte å loade. hvordan ser koden ut? Lenke til kommentar
???????? Skrevet 5. juli 2004 Del Skrevet 5. juli 2004 Du kan ikke bruke $i, antar at Torbjørn mente det som et eksempel. Bruk en variabel som ikke er i bruk! Lenke til kommentar
Gilbert Skrevet 5. juli 2004 Forfatter Del Skrevet 5. juli 2004 (endret) oh yes. ser det nå. eksemplets makt... siden stoppet å laste i den forstand at den ikke stoppet å kjøre $i. Endret 5. juli 2004 av fjartan Lenke til kommentar
Gilbert Skrevet 6. juli 2004 Forfatter Del Skrevet 6. juli 2004 foreløpig er den mye basert på koden til ????????, må jobbe mer med den før jeg kan si at jeg har laget den selv Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå