Máte vlastní www stránky? Jsou jejich součástí odkazy na „spřátelené“ stránky? A je jich už tolik, že vám zabírají místo? Pokud odpověď na tyto tři otázky zní ano, bude se vám možná hodit následující vylepšený generátor náhodných odkazů.

Řečeno jazykem televizní reklamy: „Běžný“ generátor odkazů používá pro výběr pouze náhodu, zatímco tento „vylepšený“ generátor umožňuje navíc jednotlivým odkazům přiřadit jejich váhu – tedy upravit pravděpodobnost, s jakou se budou na stránce objevovat. Podívejme se nejdříve na jednoduchý příklad:

V předchozím odstavci byste měli vidět několik odkazů, náhodně generovaných z předem zadaného pole. Jednotlivým odkazům je přiřazena pravděpodobnost, s jakou se mají objevovat: pokud zkusíte několikrát obnovit (reload) tuto stránku, odkazy se pravděpodobně změní; nejčastěji by se však měly objevovat odkazy na Yahoo, Google a Altavistu.

Nyní k samotnému kódu. Potřebujeme především nějaká vstupní data, proto si nejprve pomocí konstruktoru CreateArray vytvoříme 3 pole se vstupními údaji:

function CreateArray(){
    this.length = CreateArray.arguments.length
    for (var i = 0; i < this.length; i++)
    this[i + 1] = CreateArray.arguments[i]
}

Pokračujeme dále, jedno pole bude obsahovat cílová URL, druhé nadpisy nad generovanými odkazy a třetí pravděpodobnost (váhu) dotyčných odkazů:

var ArrayURLs = new CreateArray(
    "http://www.altavista.com",
    "http://www.yahoo.com",
    "http://www.google.com",
    "http://www.seznam.cz",
    "http://www.atlas.cz",
    "http://www.redbox.cz",
    "http://www.centrum.cz"
);
var ArrayNames = new CreateArray(
    "Altavista",
    "Yahoo",
    "Google",
    "Seznam",
    "Atlas",
    "RedBox",
    "Centrum"
);
var ArrayWeights = new CreateArray(
    20,
    50,
    40,
    10,
    5,
    5,
    15
);

Váha v posledním z polí je celé číslo větší nebo rovné jedné – nejedná se o procenta, můžeme tedy zadat váhu např. 500. Platí, že čím větší váha, tím větší je pravděpodobnost, že se daný odkaz (tím se rozumí odkaz se stejným indexem v poli ArrayURLs) na stránce objeví.

Dále budeme potřebovat jednu pomocnou proměnnou – nebo spíše konstantu. Ta udává, kolik odkazů se má maximálně zobrazit:

var iWriteMax = 3

Protože generování odkazů je náhodné, napíšeme si pro naše pohodlí ještě upravený generátor náhodných čísel. Vrací celé číslo v rozmezí 1..num, kde num je parametr na vstupu funkce:

function randNum(num) {
    var rnd1 = Math.round( (num-1) * Math.random() + 1 )
    return rnd1;
}

Největší díl práce vykoná následující funkce createBanners(). Ta provede na základě náhodného klíče a váhy výběr a vypsání několika odkazů. Zde je její kód:

function createBanners() {
var weightSum = 0
var written = 0
    for( i=1; i<=ArrayWeights.length; i++ )
        weightSum +=ArrayWeights[i]
    for( i=1; i<=ArrayWeights.length; i++ ) {
        if ( ( written<iWriteMax) &&
        ( randNum(weightSum/iWriteMax) <= ArrayWeights[i] ) ) {
            written++;
            document.write( "<a href=\"" + ArrayURLs[i] + "\">" );
            document.write( ArrayNames[i] );       
            document.writeln( "</a><br>" );
        }
    }
}

Funkce nejprve do pomocné proměnné weightSum sečte sumu všech vah jednotlivých odkazů (takový údaj potřebujeme pro výpočet pravděpodobnosti zobrazení jednoho každého odkazu). Poté ve smyčce prochází všechny odkazy a u každého (pomocí generátoru náhodných čísel) rozhoduje o jeho zobrazení. Zároveň je maximální počet zobrazených odkazů omezen za použití pomocné proměnné written. Vybrané odkazy jsou vypisovány ve standardním tvaru; výpis lze samozřejmě upravit např. o vlastnost target či jiné atributy.

Na závěr – v místě, kde budeme chtít odkazy zobrazit – zavoláme funkci createBanners():

createBanners();

Jak je z uvedeného dobře vidět, kód se po malé úpravě hodí i k náhodnému zobrazení odkazů ve formě obrázků – bannerů. Nehodí se však k zobrazení bannerů výměnných sítí typu Billboard či Mr.Lin(x) – ty jsou komplikovanější a používají vlastní JavaScript.

Uvedený kód dále nezaručuje přesné procento zobrazení pro jednotlivé odkazy. Byl psán s ohledem na maximální jednoduchost: pokud si někdo dá práci a spočítá statistické procento zobrazení u jednotlivých odkazů, zjistí, že odkazy na konci pole jsou poněkud znevýhodněny. Kód rovněž nezaručuje, že se zobrazí přesně iWriteMax odkazů: někdy se jich může zobrazit méně, v extrémním případě dokonce žádný. Pro běžné použití však – domnívám se – vcelku postačuje.

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