Avatar billede simonwh Nybegynder
28. september 2008 - 00:11 Der er 7 kommentarer

Funktion der giver mig forsk. counters for forskellige php-var

Jeg er igang med at lave et projekt hvor jeg gerne vil have vist flere counters på samme side. Det er uafhængige countdowns.

Min php er nogenlunde som dette:

<?php
while($row = mysql_fetch_assoc($ingredienserquery)) {
$howmuch = $row['produced'];
$remainingtime = $row['hastighed']-($tidnu-$row['sidsteupdate']);
echo "Tid tilbage: COUNTERHER";
?>

Hvor der står COUNTERHER vil jeg gerne have indsat en timer der tæller nedaf baseret på de sekunder der er angivet i $remainingtime.

Jeg har ikke kunne få dette til at virke når jeg har flere forskellige counters. Min javascript outputter bare den samme counter alle steder.

Nogen idéer til hvordan dette skal gribes an? Jeg er helt ny til javascript :)
Avatar billede roenving Novice
28. september 2008 - 06:58 #1
Mon ikke du kan bygge lidt videre på eksemplet fra http://www.eksperten.dk/spm/722312 ...

-- kig f.eks. også på: http://roenving.users.whitehat.dk/date/roenvingDate.html !-)
Avatar billede simonwh Nybegynder
28. september 2008 - 14:18 #2
Mit problem er at jeg har et antal variabler som jeg ikke kan forudse, og for hver variabel skal jeg bruge en counter. Det er her jeg synes at jeg har et problem. Først og fremmest fordi mine id's ikke skal være det samme, så viser den jo den samme timer over det hele.

Dernest skal javascriptet vel også indrettes til at kunne vise i de forskellige id's, om der så er 2 eller 30.

Kan du følge mig?
Avatar billede roenving Novice
29. september 2008 - 02:43 #3
Ja, derfor henviste jeg også til min demo-ting, for der kører flere forskellige timers samtidigt -- med udgangspunkt i den samme kode !-)

-- skal du lave det ressourcemæssigt helt optimalt skal du lave flere loops på det samme i din php-kode, og så er det et godt spørgsmål, om det ene eller det andet er mest optimalt, for en masse timere, der reagerer med samme interval er selvfølgelig ikke optimalt i js-koden, mens flere loops henover det samme absolut ikke er optimalt i php-koden ...

-- hrm, måske kan man lave en opsamling af noget af det i php-koden, så det kan forenes, tænke, tænke ...

-- altså en variabel, der samler nogle af stumperne sammen før det samlet echo'es til dokumentet ...

-- men så må du jo vise noget mere kode, for der er vel mere end bare linjen med counteren for hver ting ?-)
Avatar billede simonwh Nybegynder
29. september 2008 - 11:52 #4
Jeg kan godt se hvor du vil hen af. Der er faktisk ikke mere end kode end hvad du har set som har relevans til counteren.

While'en kører så længe brugeren har ingredienser, tæller den sammen hvor lang tid der er tilbage til næste update. Det får man så ud i unix timestamp format ($remainingtime) og det er her counteren skal komme ind i billedet og tælle ned.

Har du nogle idéer til hvordan din date-funktion kunne implementeres her?
Avatar billede roenving Novice
29. september 2008 - 15:00 #5
Tjoh ...

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Brug roenvingDate simpelt</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
html,body{height:100%;margin:0px;border:0px;padding:0px;font-family:tahoma,verdana,arial,sans-serif;font-size:small;}
</style>
<script language="javascript" type="text/javascript">
var ids = [], times = [], endDate = [];
function opdater(){
  for(var i=0,im=ids.length;im>i;i++){
    document.getElementById(ids[i]).firstChild.nodeValue = endDate[i].age(0,0,6,1);
  }
}
window.onload = function(){
  var nu = new Date();
  for(var i=0,im=ids.length;im>i;i++){
    endDate[i] = new Date(nu.getTime() + times[i] * 1000);
    document.getElementById(ids[i]).firstChild.nodeValue = endDate[i].age(0,0,6,1);
    alert(i);
  }
  setInterval("opdater()",1000);
}
</script>
<script type="text/javascript" src="roenvingDate.js"></script>
<!--script type="text/javascript" src="../Udvikling/roenvingDate_en.js"></script-->
</head>
<body>

<?php
$i = 0;
while($row = mysql_fetch_assoc($ingredienserquery)) {
$howmuch = $row['produced'];
$remainingtime = $row['hastighed']-($tidnu-$row['sidsteupdate']);
echo "<p>Ingrediens: $row['ingrediens'], nu fremstillet: $howmuch.<br>";
echo "<script type='text/javascript'>ids[ids.length]='iSpan'+$i; times[times.length]=$remainingtime;</script>";
echo "Tid tilbage: <span id='iSpan'+$i>&nbsp;</span></p>";
$i++;
}
?>

<p>Ingrediens: Min1ingrediens, nu fremstillet: 13.<br>
<script type='text/javascript'>ids[ids.length]='iSpan0'; times[times.length]=261230;</script>
Tid tilbage: <span id='iSpan0'>&nbsp;</span></p>
<p>Ingrediens: Min2ingrediens, nu fremstillet: 73.<br>
<script type='text/javascript'>ids[ids.length]='iSpan1'; times[times.length]=6123023;</script>
Tid tilbage: <span id='iSpan1'>&nbsp;</span></p>
</body>

</html>

-- som du kan se har jeg sat nogle fiktive eksempler ind, da jeg jo ikke har din php/mySql-ting !-)
Avatar billede simonwh Nybegynder
02. oktober 2008 - 21:15 #6
Hej Roenvig,

Det er sku rigtig lækkert det du har det.

Hvis jeg kunne få dig til at fortælle mig hvordan jeg kan sætte en action ind, hvis counteren når 0 mens brugeren sidder og kigger? I mit tilfælde skal den køre et script og refreshe siden, men det kan jeg godt selv klare :) Jeg skal bare finde ud hvor jeg skal definere disse actions?
Avatar billede roenving Novice
02. oktober 2008 - 23:41 #7
Hrm, lidt ornsvagt, når vi arbejder med flere counters, men ideen i at bruge arrays skal 'bare' forfølges, f.eks.

<script language="javascript" type="text/javascript">
var ids = [], times = [], endDate = [], actions = [];
function opdater(){
  var nu = new date();
  for(var i=0,im=ids.length;im>i;i++){
    document.getElementById(ids[i]).firstChild.nodeValue = endDate[i].age(0,0,6,1);
    if(endDate[i].getTime() > nu.getTime(){
      (actions[i])();
    }
  }
}

...

</script>

<script type='text/javascript'>ids[ids.length]='iSpan0'; times[times.length]=261230; actions[actions.length]="window.location='http://www.eksperten.dk/spm/847027';";</script>
Tid tilbage: <span id='iSpan0'>&nbsp;</span></p>
<p>Ingrediens: Min2ingrediens, nu fremstillet: 73.<br>

-- absolut utestet !-)
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