I ett pm-fält sparar jag en textmassa som presenteras på en sida men textmassan kan ibland vara väldigt stor så jag vill dela upp den i ett pagingscript för att man ska slippa att scrolla på sidan.
då har jag tänkt och använda mig av följande metod
För att lösa detta så har du redan bestämt förutsättningen.
Du visar en del av ett dokument.
När du hämtar ut en blob (i detta fall ett memofält) så vet
du längden på hela textmassan. Den är:
Length = Len(MinBlob)
Säg att den är 42800 tecken lång. Du har även bestäm att
10.000 tecken skall visas åt gången och då kan du också få
reda på hur många virtuella sidor det kan tänkas bli.
Pages = Length/10000
Är det 42000 tecken så kommer det bli 4,2. För att få till ett
heltal så får du använda int-kommandot så det blir 5,
eftersom det skall vara mer än 4.
Pages = Int(Length/10000)
Nu har du kommit så långt att du faktiskt kan bestämma
vilken sektion du vill visa. Som du säkert vet så används
MID-funktionen för att läsa ett bestämt antal tecken.
Vill du har från 10001-20000 så skriver du:
ThisPage = Mid(MinBlob, 10001, 10000)
Men du vill istället skicka in en sidangivelse och då får vi ta
reda på vad sida 1,2,3,4 och 5 är. Dvs:
Page = 1
StartPos = Page * 10000
Om page är 1 så börjar den läsa på 10.000 så därför
bör du även använda Page 0 som den absolut första
sidan eftersom 0 * 10000 är 0.
Så om du nu i din url råkar skicka med test.asp?page=2
så kanske du kan börja med något i stil med:
MyPage = Request.QueryString("page")
If MyPage = "" Then MyPage = 0
Set Rst = Con.Execute("Hämta fältet jag skall använda")
If Not Rst.Eof Then
MyBlob = Rst("MyPage")
MaxPages = Int(Len(MyBlob)/10000)
End If
Rst.Close
If MaxPages > 0 and len(MyBlob) > 0 Then
If MyPage <= MaxPages Then
Pagestart = MyPage * 10000
CurrentPage = Mid(MyBlob, PageStart, 10000)
Else
' finns inte så många sidor som du angett
End If
Else
' vi har tyvärr inga sidor att visa
End If
Response.Write CurrentPage
Men jag ser en begränsning i att använda denna och det
är att brytningen kan ske mitt i ett ord eller mening om
man bryter efter x antal tecken. kan man bryta efter ett
visst anatal tecken och sen köra på till närmaste punkt
efter det och sen göra brytningen.
Eller har ni någon annan bra metod på hur man skall göra detta?
En annan fråga om man vill dela upp en textmassa i kolumner istället hur gör man då?
om du vill ha det riktigt, riktigt snyggt så kan en variant vara att redan då du skriver in texten dela upp den på olika sidor.
Jag tänker, två tabeller
[text]
ID
name
[subText]
ID
textID
text
Du kopplar alltså flera stycken till samma text (rubrik) så att säga.
***
En annan variant kan vara att leta efter 10.000 tecken, sen backar till två radbrytningar. Då bryts texten mellan två stycken. Det kan vara en variant.
Sen ska du kolla hur mycket text som verkligen ryms på din sida, i just din situation. Det är avsevärt mycket mindre än 10.000 tecken...!!
Det finns för och nackdelar med allt.
Om du lägger in texten manuellt, som jag beskrev ovan, så vet du att det blir snyggt. Annars får du förlita dig på datorn, och det kan bli snyggt... men man vet inte.
En tredje variant kan vara att klippa in en specialare då du vill att det ska byta sida.
Sök efter denna specialare och bryt sidan där, helt enkelt. Då kan du själv bestämma. Det är kanske bättre att dela upp en lite längre text på två sidor, än att det bara står tre meningar på sista sidan. Som exempel.
***
Jag är lite osäker på hur jag hade gjort. Kanske en kombination. Både räkna tecken, leta efter dubbla vbCRLF , och leta efter specialare... för att få den mest flexibla lösningen.
Det är ju helt klart en variant, som du säger så är problemet att man inte vet hur snyggt det blir då textmassorna kan vara olika stora så därför har jag funderat på en "specialare" så att användaren som matar in texten kan justera så det ser bra ut men det finns alltid en risk att det ser illa ut om användaren inte "fixar" till så det ser bra ut, får fundera lite till...
Men helt klart bra tips =) tackar
Om det är några andra som har förslag på hur man kan lösa det skriv gärna ner dom, man kanske får använda flera metoder för att få till det.
Jag ska nämligen ha minst två olika presentationsmallar av textmassorna...
OK, det är inte du som skriver in texten!? Då får man ha det i åtanke också.
Intressant uppgift!!
Det beror på vilken målgrupp det är. Folk kan vara rätt slöa... inte säkert de orkar dela upp texten. Även om dom vet hur man gör- Så... liksom, dom skiter i det (med full respekt för ditt projekt).
Jag har varierande erfarenheter.
Dock är dator mognaden rätt stor ute i stugor och i lyor.
Jag har ett liknande projekt som faktiskt skulle må bra av om inte all text står på samma sida! :-)
Ska klura lite...!!
***
En fjärde eller femte variant kan vara att de som skriver texten, skriver i ETT fält, sen kan du gå in och redigera i efterhand.
Typ "Convert this text" och då delar texten automatisk upp sig på det sättet du vill i din admin-gränssnitt.
Du som vet hur allt ska vara behöver inte bry dig så mycket om att det ska passa andra. Sen kan du finlira den stora textmassan i efterhand. (Denna kan du sen göra publicerbar för respektive användare. Bara att du tar bort "originalet", ersätter med denna nya omgjorda. Texten är ju fortfarande "deras" så att säga. Omarbetad och anpassad till hemsidan.)
Bara se till att dom inte känner sig övervakade eller censurerade. Då kan det hända att de inte skriver fler texter och det vore en dum grej!
Det låter toppen ;) jag funderar lite själv men om man skall ha 2 mallar eller fler är det då bäst att spara vilken presentationsmall dom ska ha i databasen eller?
Hej igen, har funderat lite och kommit fram till att användaren som matar in texten får lägga in bryt-taggar i texten, det är bara ett fåtal som gör inmatningen av texter i databasen.
jag tänkte göra detta med en split för texten kommer delas upp i tre kolumner. Finns det några nackdelar med att använda split istället för regexp?
jo det är sant, men det ska delas upp i 3 kolumner och då blir det lite krångligare, då vill man ju fördela ut det jämnt i de tre kolumnerna och då blir det genast mer programering.
Så jag tänkte göra det lite enklare ;) för mig själv :P
jo det är sant, men det ska delas upp i 3 kolumner och då blir det lite krångligare, då vill man ju fördela ut det jämnt i de tre kolumnerna och då blir det genast mer programering.
Så jag tänkte göra det lite enklare ;) för mig själv :P
Jag får fundera om, får inte split att fungera då jag har en regexp funktion som ska byta ut bbcode.
Men jag vill inte klamra stora textmassor med t ex [BRYT][/BRYT] utan vill bara lägga en [BRYT] och all text innan det skall läggas in i $1 och sen ska nästa [BRYT] nläggas i $2 osv så ska man gärna kunna räkna hur många träffar man gör på [BRYT] (hoppas ni fattar vad jag menar)
Tyvärr har jag dålig koll på regexp... :(
så här ser funktionen ut:
Function ReplaceTags(strPattern, strReplace, strText)
Dim objRX
set objRX = New RegExp
objRX.IgnoreCase = True
objRX.Global = True
objRX.Pattern = strPattern
ReplaceTags = objRX.Replace(strText, strReplace)
End Function
Jag har skrivit ihop en lite kodsnutt som funkar sådär, den letar upp första [bryt]-taggen och formaterar det som tänkt men sen skiter det sig på de andra [bryt]-taggarna som är inlaggda i texten.
vill att den ska göra följande...
Oformaterad text:
en massa text [BRYT] det fortsätter en massa text [BRYT] sen kommer det ännu mera.
Formaterat resultat:
<td align=""left"" valign=""top"">en massa text </td>
<td align=""left"" valign=""top"">det fortsätter en massa text </td>
<td align=""left"" valign=""top"">sen kommer det ännu mera.</td>
Har någon lust att ge mig tips på hur jag får till det?