Avatar billede mantichora Nybegynder
29. april 2008 - 11:45 Der er 11 kommentarer og
2 løsninger

Vægtet, roterende bannersystem - hvordan?

Jeg sidder og laver et bannersystem for min arbejdsgiver, som forlanger at det skal være roterende og vægtet.
Dvs. det må ikke være random-baseret, men skal rotere, så man er sikker på at alle bannere bliver ligeligt vist, selv ved korte kampagner.
OG samtidig skal det være vægtet, så man kan specificere hvor mange procent af gangene et bestemt banner skal vises.
Altså noget i stil med: if (rand(0,100)<70) vis_banner(1);
- Men det må som sagt ikke være random-baseret.

Dette script:
http://www.tacktech.com/display.cfm?ttid=187
...er det bedste jeg kan finde af idéer på nettet, men det er ikke helt godt, da man kun kan give bannere en højere prioritet, men ikke specificere en procent. Jeg vil have at hvis jeg giver et banner 90% prioritet, så bliver de andre kun vist 10% af gangene.

Kan det overhovedet lade sig gøre, eller må jeg bede chefen dæmpe sine krav?
Avatar billede jakobdo Ekspert
29. april 2008 - 12:11 #1
Har du kigget på: http://www.openx.org/
Avatar billede mantichora Nybegynder
29. april 2008 - 12:26 #2
Nu har jeg, men... det indeholder over 2500 filer og 764KB PHP-kode... det er lidt voldsomt at kigge igennem.

Det jeg leder efter er ikke kode eller et eksisterende projekt, men en idé til en måde det kan gøres på. Ved du hvordan de gør det?
Avatar billede jakobdo Ekspert
29. april 2008 - 12:37 #3
Man kunne jo lave det på følgende måde:
Banner1 - vises 25%
Banner2 - vises 25%
Banner3 - vises 50%
Så fylder man en temp tabel op med bannerne:
banner1, banner2, banner3, banner3 = 100%
Så vises man banner2 og fjerner det fra temp tabellen.

Når temp-tabellen så er tom, kunne man fylde den op igen?
Men det kræver selvfølgelig at tabellen er tom, før den kan rettes, med mindre man laver et script, som kan tømme og presse en evt. ændring igennem.
Avatar billede mantichora Nybegynder
29. april 2008 - 13:21 #4
Ja, det er også hvad det script fra tacktech gør. Det er også det nærmeste jeg selv kommer, men hvis jeg f.eks. har 3 bannere, og sætter banner3 til 100% - så bliver den jo ikke vist 100% af tiden.
Avatar billede pidgeot Nybegynder
29. april 2008 - 13:45 #5
Du bliver nok nødt til at lade det være brugerens ansvar at administrere en ordentlig fordeling af satserne - det er muligt at genberegne satser automatisk (du kan skalere dem med lidt simpel procentregning), men det kan godt være lidt besværligt at lave det så administratoren kan ende med de ønskede vægte, særligt hvis der skal ændres mere end en vægt.

Du kunne i stedet overveje at lave en side hvor alle bannerne listes, og hvor der kan tastes ind hvor mange gange hvert banner skal listes i en cyklus - det benytter du så til at opbygge den temp-tabel som jakobdo nævner.
Avatar billede mantichora Nybegynder
05. maj 2008 - 09:12 #6
Beklager, mit hjemme-internet har været nede, så jeg måtte vente til jeg kom på arbejde igen med at svare.

pidgeot - I dette tilfælde er der ingen forskel på brugere og administratorer. Det er et internt bannersystem til vores egne kunder. Når de køber en jobannonce, lægger vi i firmaet dem ind, og de bliver så vist på vores egne sider. Gør det nogen forskel?

Grundlæggende er det vel umuligt at lave et sådant system, der gør det muligt at skrive 90 i bias for en bestemt annonce, og så bliver den vist 9 ud af 10 gange, lige meget hvad. Er det konklusionen?
Avatar billede jakobdo Ekspert
05. maj 2008 - 09:54 #7
Det bør være muligt at lave noget kode som viser annoncen 9 ud af 10 gange, hvis det ønskes.
Det burde mit forsøg på en løsning stadig kunne klare.
Avatar billede pidgeot Nybegynder
05. maj 2008 - 09:56 #8
Jakob, jeg tror primært hans problem nu er når vægtene redigeres :)

Det er ikke umuligt - men det er heller ikke helt let.

Du kan jo meget nemt skalere de andre vægte når en vægt ændres:

SkaleretVægt = GammelVægt * (100% - ÆndretVægt) / (100% - VægtFørÆndring)

Eks. A=20%, B=30%, C=50% - C ændres til 90%:
A = 20% * 10% / 50% = 4%
B = 30% * 10% / 50% = 6%

Du skal dog lige være opmærksom på de situationer hvor en vægt var 100%, og du ændrer denne - der vil det nok være bedst at fordele resten ligeligt.

På det interface du laver til at administrere disse vægte, må du dog nok forvente at man vil kunne undgå skalering af bestemte vægte. Her er du så nødt til på en eller anden måde at lade brugeren markere dette, eller lade ham angive flere vægte på en gang (og så løse problemet på den måde).

Skaleringen af de andre vægte er dog stadig meget simpel, eneste forskel er at ÆndretVægt og VægtFørÆndring skal være summen af de vægte der blev ændret manuelt.

Eks. A=15%, B=30%, C=25%, D=30% - C ændres til 50%, B ændres til 20%:
A = 15% * 30% / 45% = 10%
D = 30% * 30% / 45% = 20%

Som det sidste punkt, skal du lige finde ud af hvordan du skal håndtere afrunding - for havde A nu været 20% før ændring i sidste eksempel, var du endt med 13 1/3%, og det vil nok være en del lettere at holde styr på den bannertabel hvis du begrænsede dig til et vist antal decimaler. Det er dog bare et spørgsmål om efter afrundingen at checke at summen af dine vægte er 100% - er de ikke det, må du så smide resten på en af vægtene (men hvor den skal hen, er så et andet spørgsmål)
Avatar billede jakobdo Ekspert
05. maj 2008 - 10:18 #9
Så skal man begynde at kigge på sådan en control her måske:
http://www.blueshoes.org/en/javascript/slider/
og så linke dem sammen, så man sikrer visning ikke ryger over 100%.
Avatar billede mantichora Nybegynder
07. maj 2008 - 10:18 #10
I har i hvert fald givet mig nogle udmærkede idéer, tak for hjælpen :)

Svar gerne.
Avatar billede jakobdo Ekspert
07. maj 2008 - 10:22 #11
Svar!
Avatar billede pidgeot Nybegynder
07. maj 2008 - 12:20 #12
Værsgo :)
Avatar billede jakobdo Ekspert
08. maj 2008 - 09:40 #13
Takker 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