Avatar billede skovjuul Nybegynder
18. januar 2007 - 21:22 Der er 2 kommentarer og
1 løsning

Hjælp til dynamisk tabel

Ved ikke om dette er det rette sted eller om det hører til et andet sted, men...

Jeg har en database-tabel som indeholder nogle kalender-aftaler. På min hjemmeside vil jeg så vise hvornår på dagen jeg er optaget. Aftalerne er ikke nødvendigvis lige lange. Hvordan gør jeg det på færrest mulige kald til databasen?

Tabellen på hjemmesiden har i øverste vandrette række først et tomt felt og så mandag, tirsdag, onsdag.. frem til søndag.
I lodrette rækker er først et tomt felt og så klokke-slet, f.eks.
09:00
10:00
11:00
osv. derned af.

Umiddelbart kan jeg godt ha' aftaler om mandagen der går fra 9-9:45 efterfulgt af en halv times pause og så aftale fra 10:15 til 11:30 osv. Tirsdag er det måske 9-9:30 og 9:30-10:30 osv.
Hvordan får jeg "farvet" dags-kollonnerne grønne i tidrummet hvor jeg er ledig og røde når jeg er optaget, når felterne i de forskellige rækker/kollonner ikke er lige store?
Jeg kan sagtens få det til at virke hvis jeg holder samme aftale-størrelse som tiden der bliver vist i venstre side, men sådan er virkeligheden bare ikke...
Håber I har et godt bud, ved ikke om det overhovedet kan lade sig gøre?

Hilsen
Jesper
Avatar billede intenz Novice
19. januar 2007 - 09:40 #1
Her kommer et udkast, som burde give dig en ide til hvordan det skal gøres. Selve programmeringen mangler stadig:

<table bgcolor="white"><tr>
<?
// hent data ud af databasen
// klip og klistre lidt, så vi finder ud af hvor mange minutter der er brugt af denne time.
// finder ud af hvor stor procentdel det er af timen
// find ud af om det er i starten eller slutningen af timen, aftalen ligger.

$position = 0; // Ligger til slut, sættes til 0. Start sættes til 1, både start og slut sættes til 2, midt i timen sættes til 3.

$optaget_1 = 50; // procentdel
$optaget_2 = 0; // procentdel (bruges ved to aftaler indenfor samme time, både start og slut)
$ledig = 100-$optaget_1-$optaget_2;
?>
<td width="100" height="100" valign="top">
<?
if ($position == 1) {
?>
<div style="height: <?=$optaget_1?>%; background-color:red;"></div>
<div style="height: <?=$ledig?>%; background-color:green;"></div>
<?
} elseif ($position == 2) {
?>
<div style="height: <?=$optaget_1?>%; background-color:red;"></div>
<div style="height: <?=$ledig?>%; background-color:green;"></div>
<div style="height: <?=$optaget_2?>%; background-color:red;"></div>
<?
} elseif ($position == 3) {
?>
<div style="height: <?=$ledig?>%; background-color:green;"></div>
<div style="height: <?=$optaget_1?>%; background-color:red;"></div>
<div style="height: <?=$ledig?>%; background-color:green;"></div>
<?
} else {
?>
<div style="height: <?=$ledig?>%; background-color:green;"></div>
<div style="height: <?=$optaget_1?>%; background-color:red;"></div>
<?
}
?>

</td>
</tr></table>
Avatar billede skovjuul Nybegynder
20. januar 2007 - 14:21 #2
Lækkert forslag... jeg brugte hele dagen i går på at kode det lidt om og kom frem til en fin løsning... næsten.
Når jeg sætter <div style=height:0></div> så fylder den stadig lidt, ligesom hvis jeg sætter den til et andet lille tal, så er det ligesom den har en minimum-højde.
F.eks er en højde på 2,7% og 5% lige høje, hvilket giver et lidt forkert billede.
Er det muligt at rette på det?
Jesper
Avatar billede skovjuul Nybegynder
31. maj 2007 - 23:54 #3
Undskyld jeg ikke har givet dig pointene før, jeg troede egentlig jeg havde fået lukket tråden.
Og tak for hjælpen, det lykkedes til sidst.
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