Avatar billede kimlarsen1978 Nybegynder
15. juli 2007 - 19:53 Der er 15 kommentarer og
2 løsninger

Bannere: roterende rækkefølge pr. sidevisning

Hejsa
Jeg er ved at lave et banner-script til min side, og der skal fungere sådan, at de enkelte bannere skiftet til at være nr.1. Den skal altså kunne huske hvordan de sidste blev vist. Hvis jeg eksempelvis har 4 bannere 1,2,3,4 og gerne se 3 af gangen skal de vises sådan her (de skifter pr. sidevisning)

1. sidevisning
1,2,3

2. sidevisning
2,3,4

3. sidevisning
3,4,1

4. sidevisning
4,1,2

5. sidevisning
1,2,3

og så videre....

Til at håndtere optællingen og huske hvorlangt jeg er kommet i optællingen har jeg forsøgt at bruge Application, og ud fra værdien i den flytte mig rundt til post som skal skrives ud først:

***************
id = cInt(request.QueryString("id"))
intAntalannoncerTilUdskrivning = cInt(request.QueryString("antal"))
strHusk = "HuskForId" & Id

strSQL = "SELECT count(*) as Found FROM banner"
Set RS =  Conn.Execute(strSQL)

intIalt = cInt(RS("Found")) 'Det antal bannere der findes i databasen

strSQL = "SELECT * FROM banner ORDER BY sortering"
Set RS = Conn.Execute(strSQL)

for n = 1 to intAntalannoncerTilUdskrivning
if Application(strHusk) > intIalt then
  Application(strHusk) = 0
end if
if n = 1 then     
  'Flyt til den post vi er kommet til
    for i = 1 to Application(strHusk) - 1
      RS.MoveNext
      if RS.EOF then
        RS.MoveFirst
      end if
    next
else
  RS.MoveNext
  if RS.EOF then
    RS.MoveFirst
  end if
end if   
           
Application.Lock
  Application(strHusk) = Application(strHusk)+1
Application.Unlock
           
response.Write "skriv selve banneret ud"
Next
***********************

Mit problem er (sjovt nok) at det ikke virker helt som det skal. Den "glemmer" nogle gange at flytte sig så den fx udskriver det samme 2 gange i træk inden den så igen begynder at flytte sig rundt...

Nogle der kan hjælpe med dette? Eller måske nogle der har en helt anden måde at gøre det på?
Avatar billede The Real Yoda Juniormester
15. juli 2007 - 20:07 #1
hvis nu du updater på banneret i databasen .. og laver et felt der hedder visninger .. hver gang du viser et banner..
så kan du bare trække de 3 bannere der er vist færrest gange..

order by visninger,sortering
Avatar billede kimlarsen1978 Nybegynder
15. juli 2007 - 20:15 #2
Ja, men de kan jo godt være vist lige mange gange, det der er interessant er også om de har været øverst lige mange gange - derfor vil jeg gerne de kører i "rotation"
Avatar billede kimlarsen1978 Nybegynder
15. juli 2007 - 20:16 #3
Der udskrives "muligvis" mere end ét banner pr. side...

for n = 1 to intAntalannoncerTilUdskrivning
...
next
Avatar billede kimlarsen1978 Nybegynder
15. juli 2007 - 20:34 #4
Et eksempel mere:

Jeg har 3 bannere i databasen og jeg vil gerne udskrive 3 altså:

intIalt = 3
intAntalannoncerTilUdskrivning = 3

De kommer ud sådan her:

1. sidevisning - OK!
1,2,3

2. sidevisning - OK!
3,1,2

3. sidevisning - OK!
2,3,1

4. sidevisning - OK!
1,2,3

5. sidevisning - FEJL!
1,2,3

6. sidevisning - OK!
3,1,2

Hvorfor "strander" den lige én gang ved den 5. sidevisning?
Avatar billede The Real Yoda Juniormester
15. juli 2007 - 20:57 #5
tjae.. nu bruger du jo application og ikke session .. dvs .. andres sidevisninger tæller jo også med..

hvis du laver sidevisning 4.. og så en anden laver to .. eller to andre laver en ,.. inden du når at lave nr 5.. så får du jo samme positioner igen ..
Avatar billede kimlarsen1978 Nybegynder
15. juli 2007 - 21:09 #6
Det er helt meningen at ALLE sidevisninger tæller med - men jeg ved bare med 100% garanti - at i mit testeksempel er det mig og kun mig der laver sidevisninger...
Avatar billede kimlarsen1978 Nybegynder
15. juli 2007 - 21:36 #7
Cyklus'en fortsætter så sidevisning 8 og 9 er også ens.

7. sidevisning - OK!
2,3,1

8. sidevisning - OK!
1,2,3

9. sidevisning - FEJL!
1,2,3

10. sidevisning - OK!
3,1,2

også videre...

Der må være en grund til at den strander og derefter fortsætter igen????
Avatar billede The Real Yoda Juniormester
15. juli 2007 - 23:33 #8
Hmm .. måske dette vil virke bedre..

***************
id = cInt(request.QueryString("id"))
intAntalannoncerTilUdskrivning = cInt(request.QueryString("antal"))
strHusk = "HuskForId" & Id

strSQL = "SELECT count(*) as Found FROM banner"
Set RS =  Conn.Execute(strSQL)

intIalt = cInt(RS("Found")) 'Det antal bannere der findes i databasen

strSQL = "SELECT * FROM banner ORDER BY sortering"
Set RS = Conn.Execute(strSQL)

for n = 1 to intAntalannoncerTilUdskrivning
if Application(strHusk) > intIalt then
  Application(strHusk) = 1
end if
if n = 1 then     
  'Flyt til den post vi er kommet til
    for i = 1 to Application(strHusk) - 1
      RS.MoveNext
      if RS.EOF then
        RS.MoveFirst
      end if
    next
else
  RS.MoveNext
  if RS.EOF then
    RS.MoveFirst
  end if
end if   
           
Application.Lock
  Application(strHusk) = Application(strHusk)+1
Application.Unlock
           
response.Write "skriv selve banneret ud"
Next
***********************
Avatar billede The Real Yoda Juniormester
15. juli 2007 - 23:34 #9
tror fejlen ligger i at du har .. når den skulle starte forfra, sat strhusk til 0..

herover sættes den til 1 ved nulstilling.. for det passer med hver gang den nulstiller at den laver dobbelt.. og det kunne meget vel være en 0/1 fejl..

alt den køre samme sted om der står 0 eller 1..
Avatar billede kimlarsen1978 Nybegynder
16. juli 2007 - 16:36 #10
Er ikke lige ved min test PC nu - kommer senere i aften - men jeg mener bestemt at jeg prøvede netop det igår og resultatet var at den slet ikke flyttede sig - altså:

1. sidevisning - OK!
1,2,3

2. sidevisning - FEJL!
1,2,3

3. sidevisning - FEJL!
1,2,3
Avatar billede The Real Yoda Juniormester
16. juli 2007 - 17:26 #11
det er enten
if Application(strHusk) > intIalt then
  Application(strHusk) = 1

eller
if Application(strHusk) = intIalt then
  Application(strHusk) = 0

der bør løse fejlen
Avatar billede kimlarsen1978 Nybegynder
16. juli 2007 - 19:32 #12
Hmmm...
Uanset hvilken jeg vælger skifter den slet ikke mere...
Avatar billede kimlarsen1978 Nybegynder
16. juli 2007 - 19:34 #13
Siger jeg

if Application(strHusk) = intIalt then
  Application(strHusk) = 1

så hopper den skiftevis imellem

1,2,3

og

2,3,1
Avatar billede kimlarsen1978 Nybegynder
16. juli 2007 - 19:37 #14
Samme med

if Application(strHusk) >= intIalt then
  Application(strHusk) = 1

her hopper den også skiftevis imellem 1,2,3 og 2,3,1

siger jeg

if Application(strHusk) >= intIalt then
  Application(strHusk) = 0

så skifter den slet ikke så er det bare 1,2,3 hele tiden
Avatar billede kimlarsen1978 Nybegynder
16. juli 2007 - 22:07 #15
Hmmm - hvis der er et ulige antal til udskrivning så virker det her

****************
if n = 1 then     
  'Flyt til den post vi er kommet til
  for i = 1 to Application(strHusk) - 1
  RS.MoveNext
    if RS.EOF then
      RS.MoveFirst
    end if
  next
  if Application(strHusk) = 0 AND intIaltUlige=true then
    RS.MoveNext
    if RS.EOF then
      RS.MoveFirst
    end if
  end if
else
  RS.MoveNext
  if RS.EOF then
    RS.MoveFirst
  end if
end if   
           
Application.Lock
  Application(strHusk) = Application(strHusk)+1
  if Application(strHusk) > intIalt then
    Application(strHusk) = 0
  end if
  Application.Unlock
end if
********************

Kan bare ikke få det til at virke hvis det er et lige antal ?
Avatar billede kimlarsen1978 Nybegynder
16. juli 2007 - 22:09 #16
Sorry det er

if Application(strHusk) = 0 AND intAntalannoncerTilUdskrivningUlige=true then

i stedet for

if Application(strHusk) = 0 AND intIaltUlige=true then
Avatar billede kimlarsen1978 Nybegynder
17. juli 2007 - 20:44 #17
Prver med en ny og bedre forklaring her: http://www.eksperten.dk/spm/787935

therealyoda -> Tak for indsatsen! 50 points coming your way!

Fortsættes... http://www.eksperten.dk/spm/787935
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
Kurser inden for grundlæggende programmering

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