Avatar billede lund_dk Praktikant
25. februar 2007 - 13:34 Der er 35 kommentarer og
1 løsning

side antal

Hej!

Jeg har et forum, hvor jeg har 10 poster pr side i en tråd.

I min forum oversigt vil jeg gerne man kan gå direkte til en bestemt side, hvis en tråd har flere sider.

Sagt på anden måde..

Er min tråd på 1-10 indlæg, vis 1
er min tråd på 11-20 indlæg, vis 1,2
er min tråd på 21-30 indlæg, vis 1,2,3
er min tråd på 31-40 indlæg, vis 1,2,3,4

Hvordan gør jeg det?
Avatar billede softspot Forsker
25. februar 2007 - 15:08 #1
Hvis du bruger en Access eller SQL Server kan du benytte ADO's paging-mekanisme. Eksempel kan findes her: http://activedeveloper.dk/artikler/default.asp?articleid=31
Avatar billede lund_dk Praktikant
25. februar 2007 - 15:27 #2
Er ikke et desideret paging system jeg er ude efter
se www.test.brystplastik.dk/sider.jpg
Dette screenshot er taget fra andet forum, er ligesom sådan jeg vil have på mit forum.
Avatar billede softspot Forsker
25. februar 2007 - 15:29 #3
Det er vel et pagingsystem selvom du ikke har en forrige- og næste-knap på din side. Den metode jeg henviser til klarer også den funktionalitet du viser der, du skal som sagt bare undlade at generere forrige og næste navigationsknapperne.
Avatar billede lund_dk Praktikant
25. februar 2007 - 15:32 #4
Har lavet en IF sætning her

if strCount > 0 and strCount < 10 then
strSider = "1"
elseif strCount > 11 and strCount < 20 then
strSider = 2
elseif strCount > 21 and strCount < 30 then
strSider = 3
elseif strCount > 31 and strCount < 40 then
strSider = 4

end if


men måske den kunne gøres lidt mere dynamisk?
Avatar billede softspot Forsker
25. februar 2007 - 15:38 #5
ja, jeg ville jo mene at det måtte kunne klare med lidt matematik:

pageCount = int(strCount / 10)

if strCount = 0 then
  strSider = ""
else
  strSider = pageCount + 1
end if
Avatar billede softspot Forsker
25. februar 2007 - 15:39 #6
...og ja, du har naturligvis ret i at paginering ikke skal bruge i selve oversigten, det er først når selve trådens indlæg skal vises at pagineringen kommer i spil.
Avatar billede lund_dk Praktikant
25. februar 2007 - 16:23 #7
OK, næste problem, som jeg fik nævnt i spørgsmålet :s

if strCount > 1 and strCount < 10 then
strSider = ""
elseif strCount > 10 and strCount < 20 then
strSider = "Side: <a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=1"">1</a>, <a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=2"">2</a>"
elseif strCount > 22 and strCount < 30 then
strSider = "Side: <a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=1"">1</a>, <a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=2"">2</a>, <a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=3"">3</a>"
elseif strCount > 33 and strCount < 40 then
strSider = "Side: <a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=1"">1</a>, <a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=2"">2</a>, <a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=3"">3</a>, <a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=4"">4</a>"
elseif strCount > 40 and strCount < 50 then
strSider = "Side: <a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=1"">1</a>, <a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=2"">2</a>, <a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=3"">3</a>, <a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=4"">4</a>, <a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=5"">5</a>"
end if


Altså, hvis der er 1 side, vis itet,
hvis 2 sider, vis 1,2
hvis 3 sider, vis 1,2,3
osv..
Avatar billede softspot Forsker
25. februar 2007 - 16:36 #8
Så smider man lige en løkke på sideantallet (pageCount) og genererer den liste af sidenumre/-links:

strSider = ""

for i = 1 to pageCount + 1
  if len(strSider) > 0 then
    strSider = strSider & ", "
  end if
  strSider = "<a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=" & i & """>" & i " & "</a>"
next

strSider = "Side: " & strSider
Avatar billede lund_dk Praktikant
25. februar 2007 - 18:10 #9
Af en eller anden grund, så viser den kune side 1 ved alle
Avatar billede softspot Forsker
25. februar 2007 - 18:17 #10
Ja, det er bla. fordi jeg er en båtnakke! Jeg har jo ikke medført de foregående sider i den streng med sidenumre. Så den kode jeg vist før skal se sådan ud i stedet:

strSider = ""

for i = 1 to pageCount + 1
  if len(strSider) > 0 then
    strSider = strSider & ", "
  end if
  strSider = strSider & "<a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=" & i & """>" & i " & "</a>"
next

strSider = "Side: " & strSider

Men ud over det, så undrer det mig at den viser side 1 og ikke den sidste side, f.eks. 3 eller 4 (for de indlæg der har mere end 30+ eller 40+). Hvis du rent faktisk mener at der står tallet 1 for alle, så skal du lige vise hele den kode du benytter for at generere disse sidenumre (det må så være en eller anden kombination af det jeg har foreslået i denne tråd).
Avatar billede lund_dk Praktikant
25. februar 2007 - 19:13 #11
JEg skal ved erstatte pageCount med den sammentælling jeg laver med antal indlæg i en tråd?
Avatar billede lund_dk Praktikant
25. februar 2007 - 19:14 #12
http://test.brystplastik.dk/?S=Forum
i alt fald giver den ikke korrekt resultat :(
Avatar billede lund_dk Praktikant
25. februar 2007 - 19:18 #13
Min kode:

<%
intPage = Request("count")
If isNumeric(intPage) = False Or intPage < 1 Then
  intPage = 1
End If

Set rsIndlaeg= Server.CreateObject("ADODB.RecordSet")
strSQL = "select * from Forum where RID = 0 ORDER BY sidstebesked,dato desc"
rsIndlaeg.CursorLocation = 3
rsIndlaeg.Open strsql, Conn, 1
%>


<table cellpadding="3" cellspacing="0" style="width:100%;" class="forumtabel">
<tr>
        <td style="padding-top:5px;">
        <table cellpadding="3" cellspacing="3" style="width:100%;" class="forumliste">
            <tr>
                <th style="text-align:left;">Tråd</th>
                <th>Sidste indlæg</th>
                <th>Svar</th>
            </tr>
            <%
if rsIndlaeg.EOF or rsIndlaeg.BOF then%>
<tr>
    <td colspan="3">Der er endu ikke oprettet nogle tråde..</td>
</tr>
<%
response.redirect "./?S=Forum"
else
  rsIndlaeg.PageSize = 10
  rsIndlaeg.AbsolutePage = intPage
  intRecCount = rsIndlaeg.PageSize
  intPageCount = rsIndlaeg.PageCount

counter=0

Do While Not rsIndlaeg.EOF And intRecCount > 0


Set rsCount = Conn.Execute("SELECT COUNT(*) AS count1 FROM Forum WHERE RID =  " & rsIndlaeg("ID") & "")
Antal = rsCount("count1")
rsCount. close
set rsCount= Nothing
strCount = antal+1

strSider = ""

for i = 1 to Antal + 1
  if len(strSider) > 0 then
    strSider = strSider & ", "
  end if
  strSider = strSider & "<a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=" & i & """>" & i & "</a>"
next

strSider = "Side: " & strSider


Set rsBilleder = Conn.Execute("SELECT * FROM Forumbilleder WHERE traadID =  " & rsIndlaeg("ID") & "")
if not (rsBilleder.eof or rsBilleder.bof) then
strBilleder = "<img src=""images/photo.gif"" align=""right"" alt=""Der er tilføjet billeder i denne tråd"">"
else
strBilleder = ""
end if

%>

            <tr>
                <td><%=strBilleder%><a href="./?S=Forum&cmd=Traad&id=<%=rsIndlaeg("ID")%>" style="font-size:14px;"><b><%=rsIndlaeg("Overskrift")%></b></a>
                <div style="float:left;"><i>startet af <%=getusername(rsIndlaeg("brugerid"))%></i></div><div style="float:right;"><%=strsider%>  </div>
               
                </td>
                <td style="text-align:center;"><a title="Gå til seneste indlæg" href="./?S=Forum&cmd=Sidste&ID=<%=rsIndlaeg("ID")%>"><%=getdate(rsSeneste("dato"))%></a><%=ny%><br/><i>af <%=getusername(rsSeneste("brugerid"))%></i></td>
                <td style="text-align:center; vertical-align:middle;"><%=antal%></td>
            </tr>
<%
rsSeneste.close
set rsSeneste = nothing

intRecCount = intRecCount - 1
rsIndlaeg.MoveNext
loop
end if
Set rsIndlaeg=Nothing
%>

        </table>
        </td>
    </tr>
</table>
Avatar billede softspot Forsker
25. februar 2007 - 19:37 #14
Først og fremmest kan jeg ikke helt gennemskue hvorfor du lægger en til Antal efter at have hentet antallet af indlæg i forum-tabellen - Antal burde vel indeholde det faktisk antal og ikke antallet plus 1...?

Dernæst så skal du vel dividere antal med 10, når listen af tal skal genereres, for ellers er det jo bare en liste af tal som afspejler et nummer for hvert indlæg. Jeg har divideret pageCount med 10 i mit indlæg fra 25/02-2007 15:38:14 og det synes jeg du mangler...
Avatar billede lund_dk Praktikant
27. februar 2007 - 13:47 #15
"Først og fremmest kan jeg ikke helt gennemskue hvorfor du lægger en til Antal efter at have hentet antallet af indlæg i forum-tabellen - Antal burde vel indeholde det faktisk antal og ikke antallet plus 1...?"

Det antal jeg først finder, viser indlæg og tæller ikke første indlæg med(oprettet tråd), da det er første indlæg/ spørgsmål.. efterfølgende er svar i en tråd..

hvis du forstår? derfor smider jeg +1 på, når det handler om sideantal, for der skal jeg bruge alle poster..
Avatar billede softspot Forsker
27. februar 2007 - 13:51 #16
Jo, det forstår jeg godt, men har du så prøvet at dividere med 10 som jeg foreslog? For det er vel det at der står et nummer pr. indlæg og ikke pr. side, der er et problem, er det ikke?
Avatar billede lund_dk Praktikant
27. februar 2007 - 13:53 #17
Nu ser min kode sådan her ud, men har en tråd med 11 poster, der viser den kun side 1 ?

strCount = antal+1

strSider = ""

for i = 1 to int(strCount / 10)
  if len(strSider) > 0 then
    strSider = strSider & ", "
  end if
  strSider = strSider & "<a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=" & i & """>" & i & "</a>"
next

strSider = "Side: " & strSider
Avatar billede lund_dk Praktikant
27. februar 2007 - 13:58 #18
og det er jo klar, at 11 / 10 = 1, og derved kun 1 side, men nr 11 ligger på side 2
Avatar billede softspot Forsker
27. februar 2007 - 13:58 #19
Jeg havde nu også lagt en til antal sider i mit eksempel fra indlægget 25/02-2007 15:38:14, hvilket du behændigt har undladt... :)  - Bemærk i øvrigt at jeg ogs havde lavet en håndtering af at hvis antallet af sider var 0, så skulle der ikke lægges noget til... check (og brug) evt. det jeg foreslår :-)
Avatar billede lund_dk Praktikant
27. februar 2007 - 14:08 #20
Har ikke undladt noget med vilje i hvert fald
Avatar billede lund_dk Praktikant
27. februar 2007 - 14:13 #21
Kan jeg få dig til at samle det for mig?
For kan slet ikke lige gennemskue hvordan.. sys jeg har prøvet, men uanset hvad, så går det helt galt
Avatar billede softspot Forsker
27. februar 2007 - 14:14 #22
Nej, jeg kan da også se at det jeg lavede ikke var helt det jeg skulle - jeg undskylder. Jeg ville egentlig gerne have lavet følgende:

strCount = int((antal+1) / 10)

if strCount = 0 then
  strCount = strCount + 1
end if

strSider = ""

for i = 1 to strCount
  if len(strSider) > 0 then
    strSider = strSider & ", "
  end if
  strSider = strSider & "<a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=" & i & """>" & i & "</a>"
next

strSider = "Side: " & strSider
Avatar billede lund_dk Praktikant
27. februar 2007 - 14:18 #23
Den fungerer fint, men så er vi stadig tilbage på problemet at hvis der eks er 11 poster, hvor post 11 er på side 2, så skriver den alligevel kun at der er 1 side
Avatar billede softspot Forsker
27. februar 2007 - 14:18 #24
Og heller ikke denne gang lykkes det for mig at få det gjort rigtigt, der skal naturligvis altid lægges en til:

strSider = ""

for i = 1 to int((antal+1) / 10) + 1
  if len(strSider) > 0 then
    strSider = strSider & ", "
  end if
  strSider = strSider & "<a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=" & i & """>" & i & "</a>"
next

strSider = "Side: " & strSider
Avatar billede lund_dk Praktikant
27. februar 2007 - 14:21 #25
og ligeleden en tråd med 36 poster, viser kun 3 sider, selvom post 31,32,33,34,35,35 vises på side 4
Avatar billede softspot Forsker
27. februar 2007 - 14:24 #26
også med dem sidste ændring (27/02-2007 14:18:26)?
Avatar billede lund_dk Praktikant
28. februar 2007 - 11:36 #27
Jep, den fungerede, havde bare lige overset dit indlæg..

Og her på falderebet.. hvis der kun er 1 side, vil jeg ikke have udskrevet noget, kun hvis der er 2 sider eller mere..?
Avatar billede lund_dk Praktikant
28. februar 2007 - 12:46 #28
Har midlertidig løst det med

if strSider = "<a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=1"" title=""Gå til side 1"">1</a>" then
    strSider = ""
else
strSider = "<i>Side: " & strSider & "</i>"
end if


men må kunne gøres mere enkelt :D
Avatar billede softspot Forsker
28. februar 2007 - 17:33 #29
Jeg skulle mene det var noget med at kontrollere antallet af sider inden der genereres en pager:

strSider = ""

if int((antal+1) / 10) + 1 > 1 then
  for i = 1 to int((antal+1) / 10) + 1
    if len(strSider) > 0 then
      strSider = strSider & ", "
    end if
    strSider = strSider & "<a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=" & i & """>" & i & "</a>"
  next

  strSider = "Side: " & strSider
end if
Avatar billede lund_dk Praktikant
28. februar 2007 - 22:14 #30
Noget andet er, den virker faktisk ikke helt 100%

Der der 10 indlæg laver den 2 sider,
er der 20 indlæg, laver den 3 sider,
osv.

10 indlæg burde være én side..

Tror du du kan finde fejlen? Hvis du stadig gider at rode med det ;)
Avatar billede softspot Forsker
28. februar 2007 - 22:26 #31
Jeg vil tro det bare er et spørgsmål om at fjerne den ene der lægges til antal inden divisionen, for så vil det vel passe (vil det ikke):

strSider = ""

if int(antal / 10) + 1 > 1 then
  for i = 1 to int(antal / 10) + 1
    if len(strSider) > 0 then
      strSider = strSider & ", "
    end if
    strSider = strSider & "<a href="".?S=Forum&cmd=Traad&id=" & rsIndlaeg("id") &"&count=" & i & """>" & i & "</a>"
  next

  strSider = "Side: " & strSider
end if
Avatar billede lund_dk Praktikant
28. februar 2007 - 22:35 #32
Jeps, der var den sgu..

SMid et svar, og jeg siger tusinde tak for hjælpen :)
Avatar billede softspot Forsker
28. februar 2007 - 22:39 #33
Velbekomme :)
Avatar billede softspot Forsker
05. marts 2007 - 13:41 #34
lu-u-u-und!? Sker der noget?
Avatar billede lund_dk Praktikant
13. marts 2007 - 13:04 #35
Sorry, havde ikke set.. Men er nu lukket :)
Avatar billede softspot Forsker
13. marts 2007 - 13:16 #36
Fint nok ;-)

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
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