Avatar billede cornell22 Nybegynder
30. december 2010 - 21:04 Der er 6 kommentarer og
1 løsning

Daglig planlægning og aktivitet highlightet

Jeg har dag-planlægger hvor man kan indtaste forskellige tidspunkter og aktivitet som man skal lave i løbet af dagen. Jeg vil lave det sådan at den aktivitet der er aktiv lige nu bliver highlightet - det forrige (eller dem der er udløbet) er blevet grå og de næste aktiviteter har en tredje farve. Well, alt det fungere fint. Dog har jeg problemer med at finde ud af hvordan jeg skal få highlightet den nuværende aktivitet korrekt.
Jeg bruger dato og tid i mysql og kan derfor hente tidspunkterne ud, og derefter har jeg lavet en elseif

$tidspunkt = date('H', strtotime($r['tidspunkt']));
$klokken = date('H');

if ($klokken < $tidspunkt) {   
echo "gør noget..";   
} elseif ($klokken > $tidspunkt) {       
echo "gør noget";   
} else {   
echo "bare gør et eller andet";
}
}

Problemet er at jeg ikke kan få den til at highlighte korrekt - hvis jeg har noget fx. kl 17:00 og 17:30 vil den highlighte begge, men forsøger jeg at sætte date('H:i') så den også tæller minutter så er den kun highlightet i 1 minut.

Er der en måde at lave det sådan at den aktivitet der er igang nu bliver ved med at lyse indtil den næste starter, udanset tidspunkt... Håber ikke jeg tåger for meget...

Thomas
Avatar billede webweaver Praktikant
30. december 2010 - 22:30 #1
Du må have 2 tider på din aktivitet. Hvornår den starter og hvornår den slutter. Så burde det bare være at checke om nuværende tidspunkt er indenfor dette, og ja.. hvis den er, så highlighter den :)
Avatar billede cornell22 Nybegynder
30. december 2010 - 22:46 #2
Kan man kun lave det med at have 2 tider på?! Kunne godt tænke mig at lave det uden, så man kun indtastede 17:00 og så fandt scriptet selv ud af hvornår det skal skifte til 17:30 når den næste aktivitet starter...
Avatar billede webweaver Praktikant
30. december 2010 - 23:03 #3
Nej du skal bruge 2 referencer for at vide hvad der skal highlightes. Ellers vil den jo bare highlighte alt efter 17.00 fx. Hvis dine aktiviter altid er sådan, at de slutter, når den næste begynder, burde du godt kunne bruge næste aktivitet som slutreference også. Så har du også 2 tider. Starttidspunkt 17.00 - sluttidspunkt 17.30, som så også er starttidspunkt for næste aktivitet.

Ville dog være meget nemmere at lave stadig, hvis du havde 2 tider eller længden på aktiviteten i den samme række!
Avatar billede webweaver Praktikant
30. december 2010 - 23:06 #4
Du kunne måske evt. lave det sådan at når du opretter en ny aktivitet, så opdaterer den samtidig den forgående aktivitet (af den nye som oprettes), så den smider sluttidspunktet ind. På den måde har du 2 tider i samme række, men du taster som du ønsker kun et starttidspunkt. Så finder den selv ud af resten.
31. december 2010 - 18:49 #5
Det tog lidt tid foer jeg kom ud af busken.  Det var lidt kompleks, og jeg skulle lige grunde over det. 

Jeg opfatter essensen i dit spoergsmaal saaledes:  Du har en raekke tidspunkter i timer og minutter spredt ud over dagen.  Dem viser du paa en hjemmeside der (ved jeg fra anden kilde) forfriskes hvert 30 sekunder.  Af din reaktion paa andre indlaeg forstaar jeg at du ikke er interesseret i at skulle angive TIDSRUM, kun TIDSPUNKTER.  Efterhaanden som dagen gaar skal det tidspunkt der er lig med eller tidligere end det klokken er blevet highlightes og forblive highlighted indtil klokken passerer det naeste tidspunkt som saa i stedet skal highlightes.  Hvis for eksempel du har tidspunkterne t1=12:13, t2=12:45, og t3=13:07 saa skal der foerst ikke hightes noget.  Naar klokken bliver 12:13 skal t1 highlightes og forblive highlighted indtil klokken 12:45 hvorefter t2 skal highlightes o.s.v.  Tidspunkter der er tidligere end det highlightede tidspunkt skal vises i graat og tidspunkter der er senere end det highlightede tidspunkt skal vises, for eksempel, i roedt.

Loesningen maa ligge i at definere en variabel, lad os kalde den $highlighted, der oprindelig har vaerdien "" (altsaa ingen.)  Hver gang siden refreshes testes hvert tidspunkt saa, i raekkefoelge, om tidspunktet er forskelligt fra $highlighed men lig med date('H:i').  Hvis ja, saa saettes $highlighted lig med dette tidspunkt.

Saa klokken 12:12 er vaerdien af $highlighed = "".
Klokken 12:13 er t1 != $highlighted og == date('H:i').  Derfor gives $highlighted vaerdien '12:13'.
30 sekunder senere forfriskes siden.  Nu er t1 stadig == date('H:i') men ikke laengere forskellig fra $highlighted, saa ingenting aendres. Og til og med 12:44 er der inten tid der er lig med date('H:i').  Klokken 12:45 forekommer det igen at en tid, t2, == date('H:i') og != $highlighted, saa $higlighted antager vaerdien '12:45'.

Saa skal de tider der er mindre end $highlighted vises i graat, de der er stoerre end $highlighted vises i roedt, og de der er lig med $highlighted vises highlighted.

Problemet ligger i at goere variabelen $highlighted persistend saa den ikke forfriskes naar resten af siden forfriskes.  Du bruger (ved jeg fra anden side) en jquery funktion til at forfriske.  Det kender jeg ikke saa meget til, saa jeg ved ikke om du for eksempel kan gemme $highlighted sikkert i en session variabel, men ellers kan du jo altid gemme den i databasen, for eksempel i en tabel Highlight med en raekke og en kolonne.  Jeg antager videre at du har dine aktiviteter med deres tidspunkter gemt for eksempel i en tabel Aktiviteter med kolonnerne aktivitet og dato.  Den kode der saa koeres hver 30 sekunder kunne saa vaere noget i denne retning:

$h = mysql_query(SELECT * FROM Highlight);
$highligted = mysql_result($h, 0);

$result = mysql_query("SELECT * FROM Aktivitet WHERE DATE(dato) = DATE(NOW())");
while($row = mysql_fetch_array($result))
{
  $aktivitet = $row['aktivitet'];
  $tidspunkt = date('H:i', strtotime($row['dato']));
  if($tidspunkt != $highlight && $tidspunkt == date('H:i') $highlight = $tidspunkt;
  if($tidspunkt <$highlighted) echo [....et eller andet i graat];
  if($tidspunkt == $highlighted) echo [....et eller andet highlighted];
  if($tidspunkt > $highlighted) echo [....et eller andet i roedt];
}
mysql_query = ("DELETE FROM Highlighted");
mysql_query = ("INSERT INTO Highlighted VALUES('$highlighted')");

Men hvis du vil undgaa at nulstille manuelt hver dag vil jeg foreslaa at holde dine variable i dato og tid i stedet for bare i tid.  Du kan sagtens have en variablen der indeholder dato og tid og kun vise tiden.

Det blev en laengere historie.  Jeg haaber du kan bruge det.
02. januar 2011 - 06:15 #6
cornell22, hvad saa, fik du mit indlaegt?  Jeg er spaendt paa din reaktion, om det var nyttigt eller om jeg helt havde misforstaaet problemstillingen.
Avatar billede cornell22 Nybegynder
03. januar 2011 - 16:26 #7
Hej Christian..
Genialt det dér :) Nej, kan ikke få det til at virke direkte ud-af-boksen, men jeg kan sagtens se hvad du mener og jeg tror jeg snart har fundet en løsning, med din hjælp. Tusind tak for svaret og du har virkelig fortjent pointene...
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