Jedním z důležitých ukazatelů úspěšnosti WWW stránek, zabývajících se prodejem zboží či služeb, je počet návštěv webu, které zákazník absolvuje, než se rozhodne objednat si prodávaný produkt. V tomto článku si ukážeme, jak tento jednoduchý, avšak cenný parametr sledovat pomocí JavaScriptu a cookies.

Nebudeme se zde zabývat samotným principem techniky cookies, která již byla na Intervalu vysvětlena v jiných článcích. Rovněž si bez rozsáhlejších komentářů uvedeme kód „podpůrných“ funkcí, majících za úkol zjednodušit ne příliš pohodlnou práci s cookies vyplývající z definice jazyka. Namísto nejobvyklejší varianty – dvojice funkcí SetCookie a GetCookie, která má svůj prapůvod snad již v dřevních dobách Netscape, využijeme elegantnější a hlavně kratší řešení pomocí definice objektové třídy MyCookie:

var MyCookie = {
    Write:function(name,value,days) {
        var D = new Date();
        D.setTime(D.getTime()+86400000*days)
        document.cookie = escape(name)+"="+escape(value)+
            ((days == null)?"":(";expires="+D.toGMTString()))
        return (this.Read(name) == value);
    },
    Read:function(name) {
        var EN=escape(name)
        var F=‘ ‚+document.cookie+‘;‘, S=F.indexOf(‚ ‚+EN);
        return S==-1 ? null : unescape(     F.substring(EN=S+EN.length+2,F.indexOf(‚;‘,EN))    );
    }
}

Předešlý kód definujeme buď v hlavičce stránky, nebo v samostatném .js souboru. Způsob použití těchto funkcí je myslím zřejmý z předchozího i dalšího kódu, pozastavíme se zde jen u třetího parametru funkce MyCookie.Write – jeho hodnota udává počet dní, po který se má zapisovaná cookie uchovat na počítači návštěvníka – jinými slovy, jde o parametr typu expires.

Hlavní – a jedinou – funkci, která bude počítat počet návštěv konkrétního návštěvníka našeho webu, nazveme IncrementVisitsCount. Zde je nejprve její kód:

function IncrementVisitsCount() {
    if ((visits=MyCookie.Read(‚Visits‘)) == null ) {
        MyCookie.Write(‚Visits‘, ‚1‘, 365)
    } else {
        MyCookie.Write(‚Visits‘, (parseInt(visits)+1) + "", 365 )
    }
}

Počet návštěv se (zjednodušeně řečeno) ukládá do cookie nazvané Visits. Dobu, po kterou ponecháváme cookie na počítači návštěvníka, jsme stanovili na jeden rok – tuto hodnotu lze samozřejmě modifikovat podle konkrétních potřeb webu.

Kód uvedené funkce umístíme do hlavičky domovské stránky našeho webu, kde také zabezpečíme její volání. Ve chvíli, kdy potřebujeme zjistit uložený počet návštěv (to již může být na jiné stránce), použijeme ke zjištění – a vypsání – hodnoty například následující kód:

document.write( "Tento web jste navštívil " + MyCookie.Read(‚Visits‘) + " x (včetně této návštěvy)<br>")

Který pracuje takto (pokud tuto stránku obnovíte, vypisovaná hodnota se změní):

Většinou ovšem potřebujeme uvedenou informaci spíše dostat na náš server než vypsat ji návštěvníkovi. Jak jsme si řekli v úvodu článku, počet absolvovaných návštěv je užitečný například ve spojitosti s konkrétní objednávkou. V objednávkovém formuláři proto využijeme pole s atributem hidden, do nějž počet návštěv uložíme – například takto:

document.write( ‚<input type="hidden" name="VisitsToBuy" value="‘ + MyCookie.Read(‚Visits‘) + ‚">‘ )

Po odeslání formuláře – ať již do ASP či PHP skriptu nebo pomocí nějaké serverové komponenty přímo na náš mail – se mezi ostatními položkami formuláře objeví i pole nazvané VisitsToBuy, které nám přináší kýženou informaci.

Co to vlastně počítáme – návštěvy nebo shlédnutí stránek?

Mnohým z vás určitě neuniklo, že výše popsaný skript nepočítá přísně vzato návštěvy webu (tedy něco jako „Sessions“) – ale počet shlédnutí stránek (v terminologii reklamních kampaní „pageviews“).

Co z toho vyplývá? Především to, že funkci IncrementVisitsCount bychom měli volat skutečně jen a pouze na jediné – nejlépe domovské stránce webu. I tak ale při každém návratu na domovskou stránku dojde k inkrementaci počitadla, takže se takto zjištěná hodnota bude vyznačovat větší či menší mírou nepřesnosti. Pomůžeme si vylepšením funkce IncrementVisitsCount, a to tak, že inkrementaci počitadla omezíme časovým intervalem: jinými slovy, pokud dojde k reloadu stránky během nastaveného intervalu (dejme tomu jedné hodiny), hodnota počitadla se nezvýší. Díky této úpravě rovněž nevadí opakované volání téže funkce z více stránek, nejen z domovské.

function IncrementVisitsCount( hoursInterval ) {
    currentDate = new Date()
    if ((visits=MyCookie.Read(‚Visits‘)) == null ) {
        MyCookie.Write(‚Visits‘, ‚1‘, 365)
        MyCookie.Write( ‚LastVisit‘, currentDate.getTime(), 365 );
    } else {
        oldDate=MyCookie.Read(‚LastVisit‘)
        if( (parseInt(oldDate)+hoursInterval*3600000) < currentDate.getTime() ) {
            MyCookie.Write(‚Visits‘, (parseInt(visits)+1) + "", 365 )
            MyCookie.Write( ‚LastVisit‘, currentDate.getTime(), 365 );
        }
    }
}

Parametr hoursInterval upravené funkce určuje v hodinách délku intervalu, po který nedochází ke změně hodnoty počitadla. Můžete si to vyzkoušet na následujícím řádku – k inkrementaci počitadla nedojde při „obyčejném“ reloadu stránky, ale až poté, co před reloadem posunete svůj systémový čas nejméně o hodinu dopředu.

A to je pro tentokrát vše, přeji vám příjemný den.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět