03. juni 2003 - 20:32Der er
16 kommentarer og 1 løsning
Link i asp kalender til "beskeder"
Hejsa
Jeg er kommet i besidelse af en fed kalender som kan alt det jeg skal bruge, NÆSTEN da *S
Kalenderen har et admin modul hvor man kan smide beskeder ind på de forskellige datoer, og det er også kanont, men den vil ikke lave links i kalenderen på de datoer som der ligger noget under!
Jeg har nu siddet og ledt lidt on and off efter fejlen/metoden til at få det til at virke i 4 dage nu, men har ikke kunnet få det til at virke. Er der en der kan hjælpe mig med at løse problemet???
<% Function SplitWord(strText, intLen) 'Input tekst, max ord længde
Linier = Split(strText, vbcrlf) ' Deler op efter de forskellige linier
For P = 0 To UBound(Linier) ' Løber arrayet igennem strLinie = Linier(P) ' og sætter hvert ord ind i et nyt array Words = Split(strLinie, " ")
For Q = 0 To UBound(Words) ' Løber de forskellige ord igennem Tmp = Words(Q) If Len(Tmp) > intLen THEN ' Tester på om det pågældende ord er for langt i forhold til vores kriterium J = 1 intLenTmp = Len(Tmp) Do Until J > intLenTmp ' Deler det pågældende ord op strOut = strOut & Mid(Tmp, J, intLen) If J < intLenTmp THEN strOut = strOut & "<br>" End If J = J + intLen Loop Tmp = strOut End If strTmp2 = strTmp2 & Tmp & " " ' samler sætningen igen Next If J > 1 THEN strTmp2 = strTmp2 Else strTmp2 = strTmp2 & "<br>" End If Next SplitWord = strTmp2 ' overfør resultatet til funktionen End Function
' Finder frem til den sidste dato i den pågældende mdr. Function GetLastDay(intDate) intMonthNum = Month(intDate) intYearNum = Year(intDate) intResult = 28 For intLastDay = intResult To 31 datTestDay = DateSerial(intYearNum, intMonthNum, intLastDay) If Month(datTestDay) = intMonthNum THEN intResult = intLastDay End If Next GetLastDay = intResult End Function
' Bliver brugt til at lave den nye mdr. når der bliver valgt enten frem eller tilbage Function DateMod(oldMonth, action) NewDate = DateAdd("m", action, oldMonth) DateMod = NewDate End Function
If Request.QueryString("month") = "" THEN NDate = Date() ' Ingen ændringer på dato Else intMonthNo = Request.QueryString("month") intAction = Request.QueryString("action") strLink = "&month="& intMonthNo&"&action="&intAction NDate = DateMod(intMonthNo, intAction) ' Hvis datoen skal laves om End If
' Opretter de forskellige variabler datToday = NDate intThisYear = Year(datToday) intThisMonth = Month(datToday) intThisDay = Day(datToday) strMonthName = MonthName(intThisMonth) strWeekDayName = WeekDayName(WeekDay(datToday), False, vbMonday) strFirstWeekDay = vbMonday ' Den første ugedag i en ny uge!!!
' Undersøger om den sidste dag i mdr. ligger efter dags dato ' Hvis DateDiff er >= 0 så skal den lave et database opslag 'If (DateDiff("d", Date(), spdate3) >= 0) OR (DateDiff("y", Date(), spdate3) >= 0) THEN
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open Application("ConnectString") If Month(Date()) = Month(datToday) THEN SqlPart = "(intDay BETWEEN " & Day(Date()) & " AND " & intLastDay & ")" Else SqlPart = "(intDay BETWEEN " & datFirstDay & " AND " & intLastDay & ")" End If Sql = "SELECT Count(*) As Antal From Calender WHERE ("& SqlPart &" AND (intMonth = "& Month(datToday) &") AND (intYear = "& Year(datToday) &"))" Set Rs = Conn.Execute(Sql) Antal = Rs("Antal") Rs.Close Sql = "SELECT * FROM Calender WHERE ("& SqlPart &" AND (intMonth = "& Month(datToday) &") AND (intYear = "& Year(datToday) &"))" Set Rs = Conn.Execute(Sql) 'Response.Write(Antal) ReDim Arr(Antal, 5) Do WHILE NOT rs.Eof Arr(i,0) = Rs("Id") ' Id for en dato Arr(i,1) = Rs("intDay") ' Dato for dagen. Mellem 1 og 31 Arr(i,2) = Rs("Msg") ' Beskeden Arr(i,3) = Rs("strTitle") ' Overskrift Arr(i,4) = Rs("intMonth") ' Mdr. nr. Arr(i,5) = Rs("intYear") ' År I = I + 1 Rs.MoveNext Loop Rs.Close Set Rs = Nothing Conn.Close Set Conn = Nothing 'End If %>
</tr> </table> </td> </tr> <tr> <td width="128" class="bottom"> <table width="128"> <% ' Udskriver selve kalenderen While intPrintDay <= intLastDay Response.write("<tr>" & vbcrlf) For intLoopDay = 1 To 7 If (intPrintDay = intThisDay) AND (intFirstWeekDay <= 1) AND (intThisMonth = Month(Date())) AND ( intThisYear = Year(Date())) THEN Response.write("<td align=center class='currentdate' alt='Dags dato'>") spdate = Day(datToday) & "-" & Month(datToday) & "-"& Year(datToday) else If (DateDiff("d", Date(), secdate) > 0) OR (spdate >= secdate) Then Response.write("<td align=center class='later'>") link = 1 else Response.write("<td align=center class='date'>") link = 0 End If End If If intFirstWeekDay > 1 Then Response.write("-") intFirstWeekDay = intFirstWeekDay - 1 else If intPrintDay > intLastDay THEN Response.write("-") else If (Antal > 0) AND (link = 1) THEN For I = 0 To UBound(Arr, 1) strResult = "" If intPrintDay = CInt(Arr(i,1)) THEN strResult = "<a href='"& Request.ServerVariables("url")&"?day="& Arr(i,1)&strLink & "'>"&intPrintDay&"</a>" Exit For End If Next If strResult = "" THEN Response.write(intPrintDay) Else Response.write(strResult) End If Else Response.write(intPrintDay) End If End If intPrintDay = intPrintDay + 1 End If Response.write("</td>" & VBCrlf) Next Response.write("</tr>" & VBCrlf) wend %> </table> </td> </tr> </table> <table>
<tr> <td class="later" width="130"> <% ' Hvis der er valgt en dato så udskrives den dag If NOT IsEmpty(Request.QueryString("day")) THEN
For I = 0 To UBound(Arr, 1)
If CInt(Request.QueryString("day")) = Arr(I,1) THEN If Found <> 1 THEN Response.Write("<b>Arrangement:</b><br>d."& Arr(I,1) &"-"& Arr(I,4) &"-"& Arr(I,5) &"<br>") Found = 1 End If If Session("Login") = 1 THEN Edit = "[<a href=""java script:window_new('edit.asp?Add=Edit&Id="&Arr(I,0)&"', 250, 150, 0, 0)"" class='edit'>Edit</a>]" End If Response.write("<u>" & Arr(I,3) & "</u> "& Edit &"<br>") strTmp = Server.HtmlEncode(Arr(I,2)) strTmp = SplitWord(strTmp, 20) strTmp = Replace(strTmp, vbcrlf, "<br>") strTmp = Replace(strTmp, "&apos;", "'")
Response.Write(strTmp & "<br>" & vbcrlf) End If Next End If %> </td> </tr> </table>
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Ok den er nemlig lavet sådan at den ikke skrive de beskeder ud som er før Dags Dato i måneden..
Ret denne linje:
SqlPart = "(intDay BETWEEN " & Day(Date()) & " AND " & intLastDay & ")"
Til dette sådan at den vælger alle dage i måneden:
SqlPart = "(intDay BETWEEN 1 AND " & intLastDay & ")"
-------------------
Så skal der også rettes i denne if sætning som gør de kun bliver udskrivet hvis Dags Dato er større end den dato den udskriver:
If (DateDiff("d", Date(), secdate) > 0) OR (spdate >= secdate) Then Response.write("<td align=center class='later'>") link = 1 else Response.write("<td align=center class='date'>") link = 0 End If
Det hurtige er at rette link = 0 Til link = 1
Men som du an se har den to forskellige class's for hver type.
Der er et eller andet MEGET underligt ved den nu!! Den gør sådan at de måneder som har nogle beskeder, på hvilken som helst dato laver den et link til alle datoer, og når man klikker på dem er det det samme indhold i dem alle for den måned! Hvad kan det skyldes???
Hmm Det var underligt!! Hvilken DB tester du det med?? Jeg har nemlig lavet det om fra at være en ACCESS DB til at være en SQL 2000, kan det have noget med det at gøre?????
Jeg har lavet et Access DB med de kolonner som lige var i koden. Måske, men så er det måske fordi den henter for mange ud. Så prøv at udskriver variablen Antal og se hvor mange den finder. 'Response.Write(Antal)
Den skriver det rigtige antal ud på skærmen, men den bliver ved med at gøre det!!!! Det er ligesom om at den ikke kan adskille linket fra de forskellige datoer!!!
Den skriver det antal der er for den måned engang på siden, den skriver altså ikke f.eks 4 4 4 4 4 4 !! så det den trækker op fra DB skulle jo være ok!! der må være noget galt i asp´en!!!
<% Function SplitWord(strText, intLen) 'Input tekst, max ord længde
Linier = Split(strText, vbcrlf) ' Deler op efter de forskellige linier
For P = 0 To UBound(Linier) ' Løber arrayet igennem strLinie = Linier(P) ' og sætter hvert ord ind i et nyt array Words = Split(strLinie, " ")
For Q = 0 To UBound(Words) ' Løber de forskellige ord igennem Tmp = Words(Q) If Len(Tmp) > intLen THEN ' Tester på om det pågældende ord er for langt i forhold til vores kriterium J = 1 intLenTmp = Len(Tmp) Do Until J > intLenTmp ' Deler det pågældende ord op strOut = strOut & Mid(Tmp, J, intLen) If J < intLenTmp THEN strOut = strOut & "<br>" End If J = J + intLen Loop Tmp = strOut End If strTmp2 = strTmp2 & Tmp & " " ' samler sætningen igen Next If J > 1 THEN strTmp2 = strTmp2 Else strTmp2 = strTmp2 & "<br>" End If Next SplitWord = strTmp2 ' overfør resultatet til funktionen End Function
' Finder frem til den sidste dato i den pågældende mdr. Function GetLastDay(intDate) intMonthNum = Month(intDate) intYearNum = Year(intDate) intResult = 28 For intLastDay = intResult To 31 datTestDay = DateSerial(intYearNum, intMonthNum, intLastDay) If Month(datTestDay) = intMonthNum THEN intResult = intLastDay End If Next GetLastDay = intResult End Function
' Bliver brugt til at lave den nye mdr. når der bliver valgt enten frem eller tilbage Function DateMod(oldMonth, action) NewDate = DateAdd("m", action, oldMonth) DateMod = NewDate End Function
If Request.QueryString("month") = "" THEN NDate = Date() ' Ingen ændringer på dato Else intMonthNo = Request.QueryString("month") intAction = Request.QueryString("action") strLink = "&month="& intMonthNo&"&action="&intAction NDate = DateMod(intMonthNo, intAction) ' Hvis datoen skal laves om End If
' Opretter de forskellige variabler datToday = NDate intThisYear = Year(datToday) intThisMonth = Month(datToday) intThisDay = Day(datToday) strMonthName = MonthName(intThisMonth) strWeekDayName = WeekDayName(WeekDay(datToday), False, vbMonday) strFirstWeekDay = vbMonday ' Den første ugedag i en ny uge!!!
' Undersøger om den sidste dag i mdr. ligger efter dags dato ' Hvis DateDiff er >= 0 så skal den lave et database opslag 'If (DateDiff("d", Date(), spdate3) >= 0) OR (DateDiff("y", Date(), spdate3) >= 0) THEN
Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open Application("ConnectString") If Month(Date()) = Month(datToday) THEN 'SqlPart = "(intDay BETWEEN " & Day(Date()) & " AND " & intLastDay & ")" SqlPart = "(intDay BETWEEN 1 AND " & intLastDay & ")" Else SqlPart = "(intDay BETWEEN " & datFirstDay & " AND " & intLastDay & ")" End If Sql = "SELECT Count(*) As Antal From Calender WHERE ("& SqlPart &" AND (intMonth = "& Month(datToday) &") AND (intYear = "& Year(datToday) &"))" Set Rs = Conn.Execute(Sql) Antal = Rs("Antal") Rs.Close
Sql = "SELECT * FROM Calender WHERE ("& SqlPart &" AND (intMonth = "& Month(datToday) &") AND (intYear = "& Year(datToday) &"))" 'Response.Write Sql Set Rs = Conn.Execute(Sql) 'Response.Write(Antal) ReDim Arr(Antal, 5) Do WHILE NOT rs.Eof Arr(i,0) = Rs("Id") ' Id for en dato Arr(i,1) = Rs("intDay") ' Dato for dagen. Mellem 1 og 31 Arr(i,2) = Rs("Msg") ' Beskeden Arr(i,3) = Rs("strTitle") ' Overskrift Arr(i,4) = Rs("intMonth") ' Mdr. nr. Arr(i,5) = Rs("intYear") ' År I = I + 1 Rs.MoveNext Loop Rs.Close Set Rs = Nothing Conn.Close Set Conn = Nothing 'End If %>
</tr> </table> </td> </tr> <tr> <td width="128" class="bottom"> <table width="128"> <% ' Udskriver selve kalenderen While intPrintDay <= intLastDay Response.write("<tr>" & vbcrlf) For intLoopDay = 1 To 7 If (intPrintDay = intThisDay) AND (intFirstWeekDay <= 1) AND (intThisMonth = Month(Date())) AND ( intThisYear = Year(Date())) THEN Response.write("<td align=center class='currentdate' alt='Dags dato'>") spdate = Day(datToday) & "-" & Month(datToday) & "-"& Year(datToday) else If (DateDiff("d", Date(), secdate) > 0) OR (spdate >= secdate) Then Response.write("<td align=center class='later'>") link = 1 else Response.write("<td align=center class='date'>") link = 1 End If End If If intFirstWeekDay > 1 Then Response.write("-") intFirstWeekDay = intFirstWeekDay - 1 else If intPrintDay > intLastDay THEN Response.write("-") else If (Antal > 0) AND (link = 1) THEN For I = 0 To UBound(Arr, 1) strResult = "" If intPrintDay = CInt(Arr(i,1)) THEN strResult = "<a href='"& Request.ServerVariables("url")&"?day="& Arr(i,1)&strLink & "'>"&intPrintDay&"</a>" Exit For End If Next If strResult = "" THEN Response.write(intPrintDay) Else Response.write(strResult) End If Else Response.write(intPrintDay) End If End If intPrintDay = intPrintDay + 1 End If Response.write("</td>" & VBCrlf) Next Response.write("</tr>" & VBCrlf) wend %> </table> </td> </tr> </table> <table>
<tr> <td class="later" width="130"> <% ' Hvis der er valgt en dato så udskrives den dag If NOT IsEmpty(Request.QueryString("day")) THEN
For I = 0 To UBound(Arr, 1)
If CInt(Request.QueryString("day")) = Arr(I,1) THEN If Found <> 1 THEN Response.Write("<b>Arrangement:</b><br>d."& Arr(I,1) &"-"& Arr(I,4) &"-"& Arr(I,5) &"<br>") Found = 1 End If If Session("Login") = 1 THEN Edit = "[<a href=""java script:window_new('edit.asp?Add=Edit&Id="&Arr(I,0)&"', 250, 150, 0, 0)"" class='edit'>Edit</a>]" End If Response.write("<u>" & Arr(I,3) & "</u> "& Edit &"<br>") strTmp = Server.HtmlEncode(Arr(I,2)) strTmp = SplitWord(strTmp, 20) strTmp = Replace(strTmp, vbcrlf, "<br>") strTmp = Replace(strTmp, "&apos;", "'")
Response.Write(strTmp & "<br>" & vbcrlf) End If Next End If %> </td> </tr> </table>
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.