Avatar billede rane Nybegynder
07. december 2006 - 12:36 Der er 4 kommentarer og
1 løsning

Cookies og datocheck

Kan det lade sig gøre at detecte hvornår en bruger sidst har været inde på et menupunkt og derefter sætte det op mod en dato variabel der bestemmer hvornår menupunktet er blevet opdateret?

Eks.

Menupunkter:  Produkter, Services, About, Kontakt

Person X besøger alle punkterne den 7. december 2006.  Han besøger siden igen den 14. december 2006.  I mellemtiden er Services siden blevet opdateret indholdsmæssigt den 10. december 2006.  Her vil jeg så vise et "opdateret" ikon ud for Services menupunktet.

Den 10.dec,2006 variablen skal måske tages fra en database via ASP.

Kan det lade sig gøre på en nem og fornuftig måde mon?
Avatar billede roenving Novice
28. december 2006 - 08:50 #1
Nogenlunde fornuftigt, jeg tog for god ordens skyld også tidspunkt med da det næppe vil give noget særligt arbejde, heller ikke serverside !-)

Bemærk i øvrigt, at jeg også bruger et timestamp, Now i updated-variablen, som bruges til at udligne forskellen mellem servertiden og den lokale browsertid:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>ShowUpdatedMenus</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
#menu a{position:relative;}
#menu a img{display:none;position:absolute;top:0px;left:5px;height:6px;border:0;}
</style>
<script type="text/javascript">
//Indsat server-side:
var updated = {Produkter:"29-12-2006 06:00:00",Services:"29-12-2006 06:00:00",About:"27-12-2006 06:00:00",Kontakt:"29-12-2006 06:00:00",Now:"27-12-2006 08:00:00"}
var refDate = new Date();

var prevCookies = retrieveCookies(),newCookies = {};
function retrieveCookies(){
  if(document.cookie){
    var c = document.cookie.split(/; */);
    var retVal = new Array();
    for(i=0;c.length>i;i++){
      c[i] = c[i].split("=");
      retVal[c[i][0]] = unescape(c[i][1]);
    }
    return retVal;
  }
  return null;
}

function updateCookie(elm){
  var pic = elm.getElementsByTagName("img")[0];
  var menu = elm.firstChild.nodeValue;
  newCookies = prevCookies ? prevCookies : {};
  var nu = new Date();
  nu = "" + nu.getDate() + "-" + (nu.getMonth()+1) + "-" + nu.getFullYear() + " " + nu.getHours() + ":" + nu.getMinutes() + ":" + nu.getSeconds();
  newCookies[menu] = nu;
  writeCookies(newCookies);
  prevCookies = newCookies;
}

function writeCookies(cooks){
  var exp = new Date().getTime()+365*24*60*60*1000;
  exp = new Date(exp).toGMTString();
  for(menus in cooks)
    document.cookie = menus + "=" + escape(cooks[menus]) + ";expires=" + exp + ";path=/";
  alert(document.cookie);
}

window.onload = function(){
  if(prevCookies){
    var lnks = document.getElementById("menu").getElementsByTagName("a");
    var tid;
    for(vals in updated){
      tid = updated[vals];
      tid = tid.split(" ");
      tid[0] = tid[0].split("-");
      tid[1] = tid[1].split(":");
      tid = new Date(tid[0][2],tid[0][1]-1,tid[0][0],tid[1][0],tid[1][1],tid[1][2]);
      updated[vals] = tid;
    }
    var timeDiff = updated.Now.getTime() - refDate.getTime();
    var actDates = {};
    for(vals in prevCookies){
      tid = prevCookies[vals];
      tid = tid.split(" ");
      tid[0] = tid[0].split("-");
      tid[1] = tid[1].split(":");
      tid = new Date(tid[0][2],tid[0][1]-1,tid[0][0],tid[1][0],tid[1][1],tid[1][2]);
      actDates[vals] = tid;
    }
    for(i=0,im=lnks.length;im>i;i++){
      var men = lnks[i].firstChild.nodeValue;
      if(actDates[men]){
        lnks[i].getElementsByTagName("img")[0].style.display = actDates[men].getTime() + timeDiff > updated[men].getTime() ? "none" : "block";
      }
    }
  }
}
</script>
</head>
<body>
  <div id="menu">
    <a href="Produkter" onclick="updateCookie(this);">Produkter<img src="../img/updated.gif"></a>
    <a href="Services" onclick="updateCookie(this);">Services<img src="../img/updated.gif"></a>
    <a href="About" onclick="updateCookie(this);">About<img src="../img/updated.gif"></a>
    <a href="Kontakt" onclick="updateCookie(this);">Kontakt<img src="../img/updated.gif"></a>
  </div>
 
</body>
</html>

-- da datoformatet er låst, skal du altså lave tidspunkterne serverside i formatet: dd-mm-åååå tt:mm:ss !o]
Avatar billede roenving Novice
28. december 2006 - 08:52 #2
-- og du skal selvfølgelig fjerne alert-linjen i writeCookies-funktionen !-)
Avatar billede rane Nybegynder
28. februar 2007 - 09:19 #3
Genialt, roenving...sorry jeg har været fraværende fra nettet et stykke tid. Smid lige et svar :)
Avatar billede roenving Novice
28. februar 2007 - 09:24 #4
Velbekomme '-)
Avatar billede roenving Novice
07. marts 2007 - 14:32 #5
-- og tak for point ;~}
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