Avatar billede udvikler Nybegynder
22. januar 2006 - 12:34 Der er 15 kommentarer og
3 løsninger

Hjælp til kalender - hvor skal jeg starte

Jeg har ingen anelse om hvordan jeg skal lave en kalender i php, jeg fundet massere af sourcecodes, men ingen artikler som fortæller hvordan man laver det. Derfor beder jeg jer om IKKE at henvise mig til sourcecodes!

Kalenderen skal være ret simpel. Alle dagene skal være samme farve, men dags dato skal være en anden farve. Den skal også vise om det er mandag,tirsdag,onsdag, osv.

Tak!
Avatar billede jakobdo Ekspert
22. januar 2006 - 12:47 #1
Avatar billede udvikler Nybegynder
22. januar 2006 - 12:51 #2
det er jo en sourcecode ? jeg vil gerne have hjælp til at lave en kalender selv. Har lige hørt at man skal bruge foreach eller lign. passer det ?

men den skal se ud præcis som på dit link.. :)
Avatar billede well_r Nybegynder
22. januar 2006 - 13:07 #3
hør her..
først og fremmest skal du lave en lille plan til dig selv..
således at du på den måde ser det hele i små problemer.. det hjælper tit til at komme igennem problemer.

Du kan f.eks starte med at sige.. nu vil jeg lave noget PHP kode som viser mig hele denne måned..
det kan du bruge date() funktionen til.. ved at give den nogle værdier.. se her:
date("Y-m-d",mktime(0,0,0,1,1,2006)); < sådan fanger du f.eks den første dag i denne måned..
date("Y-m-d",mktime(0,0,0,1,date("t"),2006)); < sådan får du sidste dag i måneden..

ud fra det kan du så lave en iteration:
for ($dag=1;$dag<=date("t");$dag++){
  print date("Y-m-d",mktime(0,0,0,1,$dag,2006));
}
Avatar billede well_r Nybegynder
22. januar 2006 - 13:09 #4
mit script er så lavet meget simpelt og vil derfor kun virke for januar i år..
hvis du selv er i stand til det vil det også være en udfordring for dig at tænke dig frem til en algoritme som gør det muligt at lave et script som kan passe ind i hvilken som helst sammenhæng.

husk at dag, måned og år alle er dynamiske i en kalender. Hvis du også ønsker mulighed for skrive bestemte ting ind pr. dag, skal du også tage højde for time, min og sec
Avatar billede udvikler Nybegynder
22. januar 2006 - 13:14 #5
Som sagt ved jeg intet om hvordan man laver en kalender, så kan du ikke hjælpe mig lidt?
Det ser fint ud, det som du har lavet, men jeg vil gerne have at den viser det sådan her:

        January 2006

Sun Mon Tue Wed Thu Fri Sat
1    2  3  4  5  6  7
8    9  10  11  12  13  14
15  16  17  18  19  20  21
22  23  24  25  26  27  28
29  30  31

hvordan kan det lade sig gøre ?
Avatar billede well_r Nybegynder
22. januar 2006 - 13:16 #6
Vil du have at jeg skal lave det for dig eller at du skal prøve at komme ind på det selv?
Avatar billede udvikler Nybegynder
22. januar 2006 - 13:18 #7
At jeg skal prøve at komme ind på det selv, men det nytter jo ikke at du bare giver mig et script ;-)

Vil bare gerne have forklaret hvordan ovenståene kan laves ? :)
Avatar billede well_r Nybegynder
22. januar 2006 - 13:26 #8
ok.
start med at lave en tabel
i denne tabel laver du 7 kolonner
så laver du en tællevariabel, kald den $dag.
denne dag itereres igennem mit script, som kører antal gange = antal dage i måned.
ud over det har du en tælle variabel som hedder $i.

inde i din for-løkke skal du så have kontrolleret hvor dagen 1,2,3 osv skal stå henne hhv i man,tirs,ons osv.
dette gøres ved at sige:
if ($i != 0 && $i%7 == 1){ print luk rækken, start ny række}
skriv rækken ind </td><td>

$i%7 er modulus.. dvs.. man har $i som man deler med 7 og ser på resten.
i tilfælde hvor resten er 1, (dvs når tallet $i = 8,15,22 osv) så skal den starte med på en ny TR og selvfølgelig.. huske at lukke den gamle række (/TR)
Avatar billede udvikler Nybegynder
22. januar 2006 - 13:38 #9
Det forstod jeg næsten intet af, men jeg prøver dog lige. Sig venligst hvad jeg gør forkert:

<table>
<?php
if ($i != 0 && $i%7 == 1){
  echo "<tr>";
  echo "<td>";
  for ($dag=1;$dag<=date("t");$dag++){
  echo date("Y-m-d",mktime(0,0,0,1,$dag,2006));
  }
  echo "</td>";
  echo "</tr>";
}
?>
</table>

den udskriver intet som helst
Avatar billede well_r Nybegynder
22. januar 2006 - 15:10 #10
<table>
<?php
  echo "<tr>";
  for ($dag=1;$dag<=date("t");$dag++){
    if ($i != 0 && $i%7 == 1){
      echo "</tr>";
      echo "<tr>";
    }
    echo "<td>";
    echo date("Y-m-d",mktime(0,0,0,1,$dag,2006));
    echo "</td>";
  }
  echo "</tr>";
}
?>
</table>


noget i den stil
Avatar billede udvikler Nybegynder
22. januar 2006 - 17:19 #11
enexpected } på linie 14

og jeg har kun et blankt dokument med det du skrev i
Avatar billede jakobdo Ekspert
22. januar 2006 - 21:15 #12
Mere noget i denne stil:

<table>
<?php
//http://www.eksperten.dk/spm/681692

echo "<tr>";

for ($dag=1;$dag<=date("t");$dag++)
{
    echo "<td>";
    echo date("d",mktime(0,0,0,1,$dag,2006));
    echo "</td>";
   
    if (($dag%7) == 1)
    {
        echo "</tr><tr>";
    }
}

echo "</tr>";

?>
</table>

Der mangler dog at flytte 01 til sidste TD og ikke som første, som den er nu.
Avatar billede well_r Nybegynder
23. januar 2006 - 01:07 #13
som sagt..del tingene op i små problemstillinger.. nu har du fået den til at vise det korrekt i en tabel..nu skal du tage stilling til hvilken dag den starter ved :)
dette kan gøres i den indledende fase, dvs FØR for-løkken eller INDE i for-løkken:
$diff = date("w",mktime(0,0,0,1,$dag,2006));
for ($space=0;$space<$diff;$space++)
{
  print "<td></td>";
}
for ($dag=1;$dag<=date("t");$dag++)
{
    echo "<td>";
    echo date("d",mktime(0,0,0,1,$dag,2006));
    echo "</td>";
   
    if ((($dag-$diff+7)%7) == 1)
    {
        echo "</tr><tr>";
    }
}

har ikke testet.. men prøver at give dig en idé om hvordan du kan gribe problemet an..
Avatar billede udvikler Nybegynder
23. januar 2006 - 14:37 #14
Dette virker:

<table>
<tr>
<td>M</td>
<td>T</td>
<td>O</td>
<td>T</td>
<td>F</td>
<td>L</td>
<td>S</td>
</tr>
<?php

echo "<tr>";

for ($dag=1;$dag<=date("t");$dag++)
{
    echo "<td>";
    echo date("d",mktime(0,0,0,1,$dag,2006));
    echo "</td>";
   
    if (($dag%7) == 1)
    {
        echo "</tr><tr>";
    }
}

echo "</tr>";

?>
</table>


Læg et svar jakobdo, for det var den du kom med :-)
Så kan dig og well_r bare dele, eller hvad ?
For well_r gav mig jo en forståelse for tingene, men du kom med koden og lidt af forståelsen.
Avatar billede well_r Nybegynder
23. januar 2006 - 14:46 #15
lyder godt at du fandt ud af det.. måske skulle jeg selv kopiere den kode og selv bruge den :)
hvis du virkelig vil gøre dig selv en tjeneste så programmer den således at du kan bruge den i flere sammenhænge.. på den måde kan du bare inkludere den i forskellige dokumenter som et "plugin" :)
det hjælper tit at have tingene klar..for så behøver ikke at lave det samme flere gange.. :)
Avatar billede jakobdo Ekspert
23. januar 2006 - 17:30 #16
Svar!
Avatar billede jakobdo Ekspert
23. januar 2006 - 21:29 #17
Jeg takker for point!
Synes nu ellers nok de fleste af pointene skulle tilfalde well_r, hvis du vil have lidt flere point, så sig til Well_r
Avatar billede well_r Nybegynder
23. januar 2006 - 21:47 #18
ellers tak du! :)
jeg har jo også fået noget ud af at hjælpe her! :)

Pointene betyder ikke så meget.. mere at svaret var accepteret der betyder noget.. så kan andre der søger på exp.dk hurtigt finde det de leder efter :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester