14. september 2005 - 14:38Der er
29 kommentarer og 1 løsning
Kalender for en måned ad gangen. Paging springer en måned
Jeg har en underholdningsskalender, der vises på min side via en repeat region. Jeg vil gerne have min repeat til at vise posterne for en måned ad gangen, og paging funktionen skulle gerne springe til næste/forrige måned. Min SQL ser lige nu således ud:
SELECT Solist, Orkester, Dato, Tillaeg, Navn, Billede, Beskrivelse FROM underholdningskalender, musikere WHERE underholdningskalender.Solist = musikere.navn AND Date() <= Dato ORDER BY Dato
Ang. det at udskifte now() med en dato fra den måned kalenderen viser, så antog jeg at du havde en månedskalender som du brugte til at skifte mellem de enkelte måneder. Den skulle så gerne have en eller anden indikation af hvilken måned/dato der aktuelt er valgt. Denne kan du så bruge (i stedet for now()) til at lave din forspørgsel ud fra...
Det er måske en misforståelse at den kalender findes?
OK det var måske lidt misvisende at fortælle om en kalender. Den kalender jeg mente er bare den tabel med selve kalender indholdet i.
Det er meningen at en repeat region, skal liste indholdet fra tabellen op. Det er selvfølgelig ikke noget problem i sig selv.
Problemet er at lave en repeat, der nøjes med at liste alle poster op hvor dato indeholder en bestemt måned (f.eks. oktober), istedet for f.eks. 10 poster pr. side.
Hvor man så normalt ville hare en paging funktion der siger "vis næste 10" skal min paging sige "vis næste måned" og så vise de poster der indeholder November.
Datofeltet i min tabel er af typen Dato.
Her er lidt kode fra min side...
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> <!--#include file="Connections/connBallumhus.asp" --> <% function firstletter(str) firstletter=ucase(left(str,1))&right(str,len(str)-1) end function
"if not isempty....." viser ikke noget hvis jeg i adressebaren bare skriver underholdning.asp Men hvis jeg skriver underholdning.asp?2005-10 viser den rigtig nok alle records for oktober.
Jeg havde tænkt mig at pagingfunktionen skulle se nogenlunde sådan ud:
Okt Nov Dec Jan Feb <<Forrige Næste>>
Hvor Dec linker til underholdning.asp?month=2005-12 Mens forrige og næste selvfølgelig linker til forrige og næste måned.
Og hvor kun de måneder vises, hvor der rent faktisk foregår noget underholdning, kan man det? Vil nemlig gerne undgå at skulle opdatere pagingen hver måned.
Jeg kan ikke lige gennemskue hvor hvilke felter ligger, så jeg har bibeholdt begge tabellerne i forespørgslen, men du kan evt. fjerne den ene alt afhængig af om du kan bestemme de aktive måneder ud fra en af tabellerne alene.
Det der kommer ud af denne forespørgsel, er en liste af måneder i formatet yyyy-mm (altså 2005-01, 2005-02 osv.), samt de tilhørende månedsnavne i formatet mmm (altså apr, maj, jun, jul osv.). Så burde det være en smal sag at opbygge listen med måneder som links...
Men der er lige to ting. Jeg troede jeg kunne lave <<forrige og næste>> ved bare at lave et link der hedder: noget med RSpaging.Movenext osv. men det vil den ikke gå med til. Kan du hjælpe mig det?
Og så er der lige det at, hvis jeg bare går ind på underholdning.asp (altså uden parametre) så vises "denne måned" ikke. Repeaten er bare tom.
Det må være denne der driller: if not isempty(request.querystring("month")) and request.querystring("month") <> "" then sdt = request.querystring("month") & "-01" firstOfMonth = Year(sdt) & "-" & Month(sdt) & "-01" else firstOfMonth = Year(Now()) & "-" & Month(Now()) & "-01" end if lastOfMonth = Year(firstOfMonth) & "-" & Month(firstOfMonth) & "-" & Day(DateAdd("s",-1,DateAdd("m", 1, firstOfMonth)))
Da jeg går ud fra at du opdaterer din side hver gang, så når du opbygger månedsnavigatoren, kan du måske lige snige dig til at aflæse hvad den forrige og efterfølgende måned hedder når du har den aktuelle måned. Disse informationer kan du så bruge på dine forrige- og næste-links.
Hvad angår defaultværdien af måned, så er det lidt spøjst, for den burde da falde igennem til else-delen hvis der ikke er nogen parameter til siden... hmmm... prøv at sætte parantes omkring (not isempty(...)), selvom "not" burde have præcedens over "and"... altså:
if (not isempty(request.querystring("month"))) and (request.querystring("month") <> "") then
Huh, du er sent oppe :) Det virker desværre ikke med parantesen. Har prøvet at flytte rundt på den uden virkning.
Ang. forrige og næste, hvordan mener du så lige? kan man lave noget med: <a href="underholdning.asp?month=<%= request.querystring("month")%>">Forrige</a> og så fortælle den at der skal trækkes 1 måned fra i yyy-mm ???
Ja, når man bliver fanget af en problemstilling, så løber tiden hurtigt :)
Jeg havde, egentlig forestillet mig at når du løber igennem månederne for at bygge listen med måneder op, at du så fangede den måned der, i databasen, kom lige inden den aktuelle (det er jo ikke sikkert at det er den aktuelt valgte måned minus 1, hvis der nu ikke er nogen arrangementer i de tilstødende måneder).
Hvis du f.eks. har arrangementer i flg. måneder (jf. databasen):
jan, feb, maj, jun, aug, sep, dec
og den aktuelt valgte måned er maj, så skal forrige-linket jo pege på februar og ikke april... det samme gør sig naturligvis også gældende for næste-linket :)
Ang. den der querystring-sjover, så vil jeg da foreslå at du prøver at udskrive om
* den er empty -> response.write IsEmpty(request.querystring("month")) * hvilken længde den har -> response.write len(request.querystring("month")) * hvilket indhold den har -> response.write request.querystring("month")
og så i de tilfælde hvor det ikke fungerer, være opmærksom på hvilke værdier den indeholder...
Der er et eller andet helt galt, for den sidste du viser der burde jo tage den aktuelle måned uanset hvad der kommer ind til siden...!?
Prøv at rette tilbage til det jeg foreslog sidst og så kald din side manuelt fra adressebaren i browseren med month-parameteren og fortæl mig hvad den så kommer med af resultat...
DOH. Har lige fundet ud af hvorfor vi ikke fik nogle udtræk.
I min indsæt form i en hel anden side er der vrøvl med datoformatet. Derfor tror databasen at måned er dag, og omvendt. Var inde i databasen og manuelt bytte om på tallene, og minsandten om ikke udtrækkene vrimler frem.... Sikke en skod fejl!
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.