webForumDet fria alternativet

Hjälp med PatrikB´s Paging script

ASP

13 svar · 292 visningar · startad av jimpa

Medlem sedan jan. 2001361 inlägg
Frågan#1

Hej,
Hittade PatrikB´s paging script, men insåg ganska snabbt att mitt IQ inte räckte till speciellt långt. Så en del hjälp skulle sitta fint!!

Detta är min kod, eller inte hela, sidan är indelad i 3 olika "Case" men det som som skiljer är SQL-frågan och lite html-kod.

Så finns det nån som kan hjälpa mig att få pagingen att passa i min kod?
:) skulle jag bli då!

<%
 '***** Skapar Connection-objektet *****'
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DSN=xxxxxx;Password=xxxxxx"

bkat = Request.Form("bkat")
cross_enduro = Request.Form("cross_enduro")
lage = Request.Form("lage")
fabrikat = Request.Form("fabrikat")
varOrder = Request.Form("sortera") 

Select Case Request.QueryString("kategory")
Case "saljes"
SQL = "Select * From [annons] Where [bkat] in ('saljes') "
If (Request.Form("cross_enduro") = "cross_enduro" ) THEN
SQL = SQL & "AND [cross_enduro] in ('cross','enduro')"
Else
SQL = SQL & "AND [cross_enduro] = '" & cross_enduro & "' "
End If
If (Request.Form("lage") = "Hela,Sverige" ) THEN
SQL = SQL & "AND [lage] LIKE '%' "
Else
SQL = SQL & "AND [lage] = '" & lage & "' "
End If
If (Request.Form("fabrikat") = "Alla" ) THEN
SQL = SQL & "AND [fabrikat] LIKE '%' "
Else
SQL = SQL & "AND [fabrikat] = '" & fabrikat & "' "
End If

SQL = SQL & "ORDER BY " & varOrder & " DESC "

set annons = Connect.Execute(SQL)
set annons2 = Connect.Execute(SQL)
If annons.EOF OR annons.BOF THEN
%> 

En massa htmlkod

<%
Else
Do until annons2.EOF
count = count + 1
annons2.MoveNext
Loop
%>

En massa htmlkod

<%
Do until annons.EOF
counter = counter + 1
if counter Mod 2 = 0 then
color = "4A4A4A"
else
color = "000000"
End if
%>

En massa htmlkod

<%
annons.MoveNext
Loop
End If
%>
<%
Case "kopes"

PatrikB´s kod

<%
Option Explicit
Response.Buffer = FALSE
%>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>
<%

'## -- hämta alla poster --
Function getRecords
	Dim m_objConn
	Dim m_strConnString
	Dim m_strSQL
	Dim m_objRS
	Dim m_arrRecords
	
	m_strConnString = "provider=Microsoft.Jet.OLEDB.4.0;" & _
		"Data Source=" & Server.MapPath("/guest1.mdb")
		
	'## -- skapa connection object och öppna upp databasen --
	Set m_objConn = Server.CreateObject("ADODB.Connection")
		m_objConn.Open m_strConnString
		
		'## -- sql-fråga för att hämta alla poster --
		'## -- denna ska du ändra så att den stämmer
		'##    med det som du vill hämta --
		m_strSQL = "SELECT id, namn, [datum] " & _
			"FROM gastbok " & _
			"ORDER BY [datum] DESC"
						
			'## -- recordset för att hämta alla poster --
			Set m_objRS = m_objConn.Execute(m_strSQL)
			
				If Not m_objRS.EOF Then
					m_arrRecords = m_objRS.GetRows
					getRecords = m_arrRecords
				End If
				
				'## -- clean up --
				m_objRS.Close
			Set m_objRS = Nothing
			
		m_objConn.Close
	Set m_objConn = Nothing

End Function

'## -- skriver ut sidnavigeringen --
'## -- skriv ut föregående sida --
Sub PrevPage(ByVal WichPage)
	Dim strScriptName
	strScriptName = Request.ServerVariables("SCRIPT_NAME")

	'## -- skriv ut en länk till föregående sida --
	If CInt(WichPage) > 1 Then
		Response.Write "<A href='" & strScriptName & "?" & _
			"page=" & WichPage - 1 & "'><< Föregående</A> "
	Else
		Response.Write "<< Föregående "
	End If
End Sub

'## -- skriv ut nästa sida --
Sub NextPage(ByVal HowManyPages, ByVal WichPage)
	Dim strScriptName
	strScriptName = Request.ServerVariables("SCRIPT_NAME")
	
	'## -- skriv ut en länk till nästa sida --
	If CInt(WichPage) < CInt(HowManyPages) Then
		Response.Write "<A href='" & strScriptName & "?" & _
			"page=" & WichPage + 1 & "'>Nästa >></A>"
	Else
		Response.Write " Nästa >>"
	End If

End Sub

'## -- skriv ut sidnummer navigeringen --
Sub PageNumbers(ByVal HowManyPages, WichPage)
	Dim strScriptName
	Dim I
	
	'## -- kolla om det finns några sidor --
	If HowManyPages = 0 Then
		Response.Write "0"
		Exit Sub
	End If
	
	strScriptName = Request.ServerVariables("SCRIPT_NAME")

	'## -- skriv ut länkar till sid nummer n. 
	'##    Den sida som visas ska ej vara länkad --
	For I = 1 To HowManyPages
		If CInt(I) <> CInt(WichPage) Then
			Response.Write "<A href='" & strScriptName & "?" & _
				"page=" & I & "'>" & I & "</A> "
		Else
			Response.Write "<B>" & I & "</B> "
		End If
	Next

End Sub

'## -- vilken post ska pagingen börja på --
Function getStartID(ByVal PageSize, ByVal ViewPage) ' As Integer
	Dim m_intStart
	m_intStart = ((PageSize * ViewPage) - PageSize)
	getStartID = m_intStart
End Function

Function countPages(ByVal HowManyRecords, ByVal PageSize)
	Dim m_intTotalPages
	m_intTotalPages = CInt((HowManyRecords / PageSize) + 0.5)
	'm_intTotalPages = CInt(((HowManyRecords / PageSize) + 1) - 1)
	
	countPages = m_intTotalPages
End Function
'##***********************************************************************************

Dim arrRecords
Dim intPageSize
Dim intPage
Dim intStartID
Dim I
Dim intId
Dim strNamn
Dim dteDatum
Dim intTotalPages
Dim intTotalRecords

'## -- vilken sida ska visas --
intPage = Request.QueryString("page")
If intPage = "" Then intPage = 1

'## -- hur många poster ska visas per sida --
intPageSize = 10

'## -- hämta alla records, hämtas med metoden getrows och returneras 
'##    som en array. --
arrRecords = getRecords

'## -- vilken post är den första --
intStartID = getStartID(intPageSize, intPage)

'## -- printa ut sidan som ska visas
'##    alla poster finns i arrayen arrRecords som
'##    kommer från funktionen getRecords --
If IsArray(arrRecords) Then
	'Response.Write "E ju en array<BR>"
	'## -- hur många records finns det totalt --
	intTotalRecords = UBound(arrRecords,2) + 1
	
	'## -- hur många sidor finns det i recordsetet --
	intTotalPages = countPages(intTotalRecords, intPageSize)

	Response.Write "<P>Visar nu sida <B>" & intPage & "</B> av " & intTotalPages & "</P>"
	For I = intStartID To ((intStartID + intPageSize) -1)
	
		intId = arrRecords(0,I)
		strNamn = arrRecords(1,I)
		dteDatum = arrRecords(2,I)
		
		Response.Write " Datum: " & dteDatum & " Namn: " & strNamn & "<BR>"
		
		If I = UBound(arrRecords,2) Then Exit For
	Next
Else
	'## -- inga poster fanns i db --
	intPage = 0
	intTotalRecords = 0
	intTotalPages = 0
	
	'## -- skriv ut att inga poster hittades --
	Response.Write "<P>No records found.</P>"
End If

'## -- skriv ut sidnavigerings menyn --
Call PrevPage(intPage)
Response.Write " &#0124; "

Call NextPage(intTotalPages,intPage)

Response.Write "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pages: "

Call PageNumbers(intTotalPages,intPage)
%>
</BODY>
</HTML>

Mvh Jimpa

[Redigerat av jimpa den 25 jul 2001]

Medlem sedan mars 20002 836 inlägg
#2

Hello,

nu kommer jag att göra dig lite besviken.

Men, det finns en uppdaterad fil för detta pagingscript, senaste uppdateringen gjorde jag den 14 juli då det hittades en bugg :o vad det gällde sidräkningen.
Jag släppte en updatering lite tidigare oxå där jag hade kodat om lite grann så det flöt på lite smidigare.

Jag råder dig till att uppdatera mitt script zPaging II och kom sedan åter om du inte får det att funka.

cya,
PatrikB

------------------
*Det tar sig sa han som hade eld i håret*

Medlem sedan jan. 2001361 inlägg
#3

Hej,
Det var ju rätt person som svara på mitt inlägg :)
Redigera mitt inlägg och bytte ut paging scriptet mot den senaste uppdateringen.
Men fattar inte hur jag kan lägga till det i min kod.

Lite hjälp på traven skulle sitta fint!

Mvh jimpa

Medlem sedan mars 20002 836 inlägg
#4

Hello igen,

testa denna kod och läs lite i mina komamteringar så får du nog haj på arrayen det hela handlar om:

<HTML>
<HEAD>
<TITLE>Untitled Document</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>

<BODY bgcolor="#FFFFFF" text="#000000">
<%
bkat = Request.Form("bkat")
cross_enduro = Request.Form("cross_enduro")
lage = Request.Form("lage")
fabrikat = Request.Form("fabrikat")
varOrder = Request.Form("sortera") 

Select Case Request.QueryString("kategory")
Case "saljes"
	SQL = "Select * From [annons] Where [bkat] in ('saljes') "
		If (Request.Form("cross_enduro") = "cross_enduro" ) THEN
			SQL = SQL & "AND [cross_enduro] in ('cross','enduro')"
		Else
			SQL = SQL & "AND [cross_enduro] = '" & cross_enduro & "' "
		End If
		If (Request.Form("lage") = "Hela,Sverige" ) THEN
			SQL = SQL & "AND [lage] LIKE '%' "
		Else
			SQL = SQL & "AND [lage] = '" & lage & "' "
		End If
		If (Request.Form("fabrikat") = "Alla" ) THEN
			SQL = SQL & "AND [fabrikat] LIKE '%' "
		Else
			SQL = SQL & "AND [fabrikat] = '" & fabrikat & "' "
		End If

'## -- vilken sida ska visas --
intPage = Request.QueryString("page")
If intPage = "" Then intPage = 1

'## -- hur många poster ska visas per sida --
intPageSize = 4

'## -- hämta alla records, hämtas med metoden getrows och returneras 
'##    som en array. --
arrRecords = getRecords

'## -- vilken post är den första --
intStartID = getStartID(intPageSize, intPage)

'## -- printa ut sidan som ska visas
'##    alla poster finns i arrayen arrRecords som
'##    kommer från funktionen getRecords --
If IsArray(arrRecords) Then
	'Response.Write "E ju en array<BR>"
	'## -- hur många records finns det totalt --
	intTotalRecords = UBound(arrRecords,2) + 1
	
	'## -- hur många sidor finns det i recordsetet --
	intTotalPages = countPages(intTotalRecords, intPageSize)

	Response.Write "<P>Visar nu sida <B>" & intPage & "</B> av " & intTotalPages & "</P>"
	For I = intStartID To ((intStartID + intPageSize) -1)
	
		intId = arrRecords(0,I) '## -- första fältet i sql-frågan --
		strNamn = arrRecords(1,I) '## -- andra fältet i sql-frågan --
		dteDatum = arrRecords(2,I) '## -- tredje fältet i sql-frågan, osv ... fortsätt serien om fler fält behöver accessas --
		
		Response.Write " Datum: " & dteDatum & " Namn: " & strNamn & "<BR>"
		
		If I = UBound(arrRecords,2) Then Exit For
	Next
Else
	'## -- inga poster fanns i db --
	intPage = 0
	intTotalRecords = 0
	intTotalPages = 0
	
	'## -- skriv ut att inga poster hittades --
	Response.Write "<P>No records found.</P>"
End If

'## -- skriv ut sidnavigerings menyn --
Call PrevPage(intPage)
Response.Write " &#0124; "

Call NextPage(intTotalPages,intPage)

Response.Write "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pages: "

Call PageNumbers(intTotalPages,intPage)
%>
</BODY>
</HTML>
<%
'======================================================================================
'## -- SUBBAR OCH FUNKTIONER 
'======================================================================================
'## -- hämta alla poster --
Function getRecords
	Dim m_objConn
	Dim m_strConnString
	Dim m_strSQL
	Dim m_objRS
	Dim m_arrRecords
	
	m_strConnString = "provider=Microsoft.Jet.OLEDB.4.0;" & _
		"Data Source=" & Server.MapPath("/guest1.mdb")
		
	'## -- skapa connection object och öppna upp databasen --
	Set m_objConn = Server.CreateObject("ADODB.Connection")
		m_objConn.Open m_strConnString
		
		'## -- sql-fråga för att hämta alla poster --
		'## -- denna ska du ändra så att den stämmer
		'##    med det som du vill hämta --
		'm_strSQL = "SELECT id, namn, [datum] " & _
		'	"FROM gastbok " & _
		'	"ORDER BY [datum] DESC"
		
		'## -- la till din sql-fråga att hämta mot istället
		'## -- ---------------------------------------------	
			'## -- recordset för att hämta alla poster --
			Set m_objRS = m_objConn.Execute(SQL)
			
				If Not m_objRS.EOF Then
					m_arrRecords = m_objRS.GetRows
					getRecords = m_arrRecords
				End If
				
				'## -- clean up --
				m_objRS.Close
			Set m_objRS = Nothing
			
		m_objConn.Close
	Set m_objConn = Nothing

End Function

'## -- skriver ut sidnavigeringen --
'## -- skriv ut föregående sida --
Sub PrevPage(ByVal WichPage)
	Dim strScriptName
	strScriptName = Request.ServerVariables("SCRIPT_NAME")

	'## -- skriv ut en länk till föregående sida --
	If CInt(WichPage) > 1 Then
		Response.Write "<A href='" & strScriptName & "?" & _
			"page=" & WichPage - 1 & "'><< Föregående</A> "
	Else
		Response.Write "<< Föregående "
	End If
End Sub

'## -- skriv ut nästa sida --
Sub NextPage(ByVal HowManyPages, ByVal WichPage)
	Dim strScriptName
	strScriptName = Request.ServerVariables("SCRIPT_NAME")
	
	'## -- skriv ut en länk till nästa sida --
	If CInt(WichPage) < CInt(HowManyPages) Then
		Response.Write "<A href='" & strScriptName & "?" & _
			"page=" & WichPage + 1 & "'>Nästa >></A>"
	Else
		Response.Write " Nästa >>"
	End If

End Sub

'## -- skriv ut sidnummer navigeringen --
Sub PageNumbers(ByVal HowManyPages, WichPage)
	Dim strScriptName
	Dim I
	
	'## -- kolla om det finns några sidor --
	If HowManyPages = 0 Then
		Response.Write "0"
		Exit Sub
	End If
	
	strScriptName = Request.ServerVariables("SCRIPT_NAME")

	'## -- skriv ut länkar till sid nummer n. 
	'##    Den sida som visas ska ej vara länkad --
	For I = 1 To HowManyPages
		If CInt(I) <> CInt(WichPage) Then
			Response.Write "<A href='" & strScriptName & "?" & _
				"page=" & I & "'>" & I & "</A> "
		Else
			Response.Write "<B>" & I & "</B> "
		End If
	Next

End Sub

'## -- vilken post ska pagingen börja på --
Function getStartID(ByVal PageSize, ByVal ViewPage) ' As Integer
	Dim m_intStart
	m_intStart = ((PageSize * ViewPage) - PageSize)
	getStartID = m_intStart
End Function

'## -------------------------------------------------------------
'## -- räkna ut hur många sidor som ska visas --
'## -- updated: July 14, 2001
'## -- update by: Patrik Berggren, mrwize@mrwize.nu
'## -------------------------------------------------------------
'##
'## -- vid vissa tillfällen returnerades fel sidantal.
'##    Felet/Buggen berodde på avrundningen med CInt()
'##    och CLng().
'## -- Avrundningen som jag gjorde:
'##
'##    m_intTotalPages = CInt((HowManyRecords / PageSize) + 0.5)
'##
'##    vart i vissa fall fel och sid antalet vart fler än 
'##    vad det egentligen skulle vara.
'##    Lösningen, hoppas jag, är att kolla hur stor resten
'##    blir vid avrundning.
'##    Om resten är större än 0 eller mindre än 0.5 så ska en sida
'##    läggas till.
'##    I annat fall så gäller avrundningen.
'##    Har testat flera olika kombinationer med olika records antal
'##    och sidstorlekar och ej hittat några buggar.
'##    Så nu hoppas jag att denna paging är buggfri *ler*
'## -------------------------------------------------------------
Function countPages(ByVal HowManyRecords, ByVal PageSize)
	Dim m_intTotalPages, m_intRest

	m_intTotalPages = HowManyRecords / PageSize

	If m_intTotalPages < 1 Then
		m_intTotalPages = 1
	Else
		m_intRest = m_intTotalPages - CLng(m_intTotalPages)
		
		If m_intRest > 0 AND m_intRest < 0.5 Then
			m_intTotalPages = CLng(m_intTotalPages) + 1
		Else
			m_intTotalPages = CLng(m_intTotalPages)
		End If
	End If

	'## -- return how many pages --
	countPages = m_intTotalPages
End Function
'##***********************************************************************************

%>

Behvöer du mer råd ... bara att posta.

cya,
PatrikB

------------------
*Det tar sig sa han som hade eld i håret*

[Redigerat av PatrikB den 25 jul 2001]

Medlem sedan juli 20014 inlägg
#5

Vad är relationer?

Medlem sedan jan. 2001361 inlägg
#6

Hej,

Får problem med med Adressen
Skriver bara ut:
min.sida.asp?page=2
Borde bli
ex. min.sida.asp?id=22&namn=jimpa&page=2
eller!?

Mvh Jimpa

Medlem sedan jan. 2001361 inlägg
#7

Provade att göra så istället:

'## -- skriv ut nästa sida --
Sub NextPage(ByVal HowManyPages, ByVal WichPage)
Dim strScriptName
strScriptName = request.servervariables("path_info")
strQueryString = request.servervariables("QUERY_STRING")

'## -- skriv ut en länk till nästa sida --
If CInt(WichPage) < CInt(HowManyPages) Then
Response.Write "<A href='" & strScriptName & "?" & strQueryString & _
"&page=" & WichPage + 1 & "'>Nästa >></A>"
Else
Response.Write " Nästa >>"
End If

Men det funka ju inte efter sida 2
då adressen blev typ så här:
min.sida.asp?id=22&namn=jimpa&page=2&page=3&page=4 osv..

Suck...Vad göra någon som har föslag?

Mvh Jimpa

Medlem sedan mars 20002 836 inlägg
#8
'## -- skriv ut nästa sida --
Sub NextPage(ByVal HowManyPages, ByVal WichPage)
Dim strScriptName
strScriptName = request.servervariables("path_info")

intId = Request.QueryString("id")
strName = Request.QueryString("namn")

'## -- skriv ut en länk till nästa sida --
If CInt(WichPage) < CInt(HowManyPages) Then
	Response.Write "<A href='" & strScriptName & "?id=" & intId & "&namn=" & Server.URLEncode(strNamn) & _
	"&page=" & WichPage + 1 & "'>Nästa >></A>"
Else
	Response.Write " Nästa >>"
End If

som du ser ...bara att "bygga" på med fler querystirng värden och sedan plocka in dem.

cya,
PatrikB

------------------
*Det tar sig sa han som hade eld i håret*

Medlem sedan jan. 2001361 inlägg
#9

Hej,

Fick det att funka nu! :)
Tack för din hjälp PatrikB

Mvh

Medlem sedan mars 20002 836 inlägg
#10

vasse'go!

cya,
PatrikB

------------------
*Det tar sig sa han som hade eld i håret*

Medlem sedan jan. 2001361 inlägg
#11

Hej,

Har snart fått till det så att det börjar likna nått åso :) :)

Men har 3 problem!

1. Hur får jag denna text att visas längst upp på sidan"Visar nu sida 1 av 2"?

2. Hur kan man få fram antal hittade "ID"
Typ. Det fanns totalt "689" annonser.

3. Hur kan man få navigerings länkarna för pagingen att stå i mitten på sidan?

Svara på det du, om du kan ;)

Mvh Jimpa

Medlem sedan mars 20002 836 inlägg
#12

Svar 1:
Kolla denna kod ....

'## -- printa ut sidan som ska visas
'##    alla poster finns i arrayen arrRecords som
'##    kommer från funktionen getRecords --
If IsArray(arrRecords) Then

	'## -- hur många records finns det totalt --
	intTotalRecords = UBound(arrRecords,2) + 1
	
	'## -- hur många sidor finns det i recordsetet --
	intTotalPages = countPages(intTotalRecords, intPageSize)

	[b]Response.Write "<P>Visar nu sida <B>" & intPage & "</B> av " & intTotalPages & "</P>"[/b]
	
	For I = intStartID To ((intStartID + intPageSize) -1)
.
.
.
.
etc ....

Svar 2:
Ändrar vi lite från koden ovan:

	Response.Write "<P>Visar nu sida <B>" & intPage & "</B> av " & intTotalPages & _
"[b] och det fanns totalt " & UBound(arrRecords) & " annonser.</P>"[/b]

Svar 3:
Där du vill ha pagingen visad tar du och flyttar dessa subbar så att de ser ut så här:

<DIV align="center">
<%
Call PrevPage(intPage)

Response.Write " &#0124; "

Call PageNumbers(intTotalPages,intPage)

Response.Write " &#0124; "

Call NextPage(intTotalPages,intPage)
%>
</DIV>

Hoppas att det var vad du ville ha

cya,
PatrikB

------------------
*så kan det gå när inte haspen är på*

Medlem sedan jan. 2001361 inlägg
#13

Jepps!! ;)

Tack för det, nu funkar allt som jag vill ha det :h

Mvh

Medlem sedan mars 20002 836 inlägg
#14

vasse'go!!

cya,
PatrikB

------------------
*så kan det gå när inte haspen är på*

267 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)