Sub PageContent(ByVal strPageContent)
strPageContent = Replace(strPageContent, "[BoxFeaturedProducts]", Call BoxFeaturedProducts)
Response.Write strPageContent
End Sub
Call BoxFeaturedProducts är också en Sub.
20 svar · 608 visningar · startad av bigsky
Sub PageContent(ByVal strPageContent)
strPageContent = Replace(strPageContent, "[BoxFeaturedProducts]", Call BoxFeaturedProducts)
Response.Write strPageContent
End Sub
Call BoxFeaturedProducts är också en Sub.
Jag tror det fungerar om du tar bort "Call"
Då blir det Inkompatibla typer: 'BoxFeaturedProducts'.
Instämmer! Call bör du inte använda på det viset. (Eller överhuvudtaget)
Dock så verkar det konstigt att anropa Replace med en sub på det viset, eftersom en sub inte ger något retuvärde.
Vad försöker du åstadkomma?
Jag loppar ut html-kod från en databas. Men asp-taggarna skrivs inte ut på sidan, endast som text i källkoden.
BoxFeaturedProducts hämtar något från databasen? Detta måste du returnera samt ändra BoxFeaturedProducts till att bli en function, typ så här:
Public Function BoxFeaturedProducts() as String ' Minns inte om det kallas public eller nåt annat i VB. Lämna det som står innan Sub orört.
dim retval as String
...
BoxFeaturedProducts = retval ' Här sätts returvärdet
End Function
Tror inte du kan sätta returtyp i asp.
Jo
Det tror inte jag.
Detta fungerar inte
<%
Public Function GetString() As String
Dim s As String
s = "Hello World!"
GetString = s
End Function
Response.Write(GetString())
%>
Medans
<%
Public Function GetString()
Dim s
s = "Hello World!"
GetString = s
End Function
Response.Write(GetString())
%>
... detta gör det.
Så här ser det ut:
HTML-koden ligger i en databas. Koden kan man uppdatera online med hjälp av ett WYSIWYG-verktyg. Vissa färdigprogrammerade element (tex. formulär, bilder etc) i koden ska kunna placeras ut i koden med ett anrop tex. [BoxSignup].
När HTML-koden skrivs ut på webbsidan vill jag att anropet [BoxSignup] ska ersättas med det färdigprogrammerade elementet, tex. en bild eller ett formulär. Därav anropet med en replace och sub. Alla färdigprogrammerade element är subbar eller funktioner.
Hur ser HTML-koden ut?
Förstår jag dig rätt om att du vill ersätta texten "BoxSignup" med en sub och skriva ut ASP-kod??
Helt rätt men jag vill skriva ut HTML inte ASP. Det är bara vanliga formulär, bilder och tabeller som ska skrivas ut.
Skicka HTML-koden och funktionen.
Sub BoxFeaturedProducts
Response.Write "<table bgcolor=""" & strColor1 & """ border=""0"" cellpadding=""4"" cellspacing=""1"" width=""558"">"
Response.Write "<tr>"
Response.Write "<td bgcolor=""" & strColor1 & """ width=""558"" height=""20"" align=""center"" valign=""middle"" class=""headline2"" colspan=""2"">" & strTextFeaturedProducts & "</td>"
Response.Write "</tr>"
Call OpenConn()
Set rsShowFeaturedProducts = Conn.Execute("SELECT Id, Pid, Product, Description, Price, Vat, ShowDiscount, DiscountPrice, ImgSmall, Img01 FROM tblProducts WHERE Display = True AND Featured = True AND Lang = '" & Request.Cookies("lang") & "' ORDER BY Id DESC")
iLoop = 0
If Not rsShowFeaturedProducts.EOF Then
Do Until rsShowFeaturedProducts.EOF
If iLoop Mod 2 = 0 Then
Response.Write "<tr>"
End If
Set Jpeg = Server.CreateObject("Persits.Jpeg")
Jpeg.Open strFilePath1 & rsShowFeaturedProducts("Img01")
strImageWidth = Jpeg.OriginalWidth
strImageHeight = Jpeg.OriginalHeight
Set Jpeg = Nothing
Response.Write "<td bgcolor=""" & strTableColor & """ width=""279"" height=""20"" align=""left"" valign=""top"">"
Response.Write "<table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""269"">"
Response.Write "<tr>"
Response.Write "<td width=""115"" height=""20"" align=""left"" valign=""middle""><a href=""#"" onClick=""centerpopup('" & strHardLinkUrl & "/inc_productimage.asp?prod=" & rsShowFeaturedProducts("Id") & "&img=" & rsShowFeaturedProducts("Img01") & "&width=" & strImageWidth & "&height=" & strImageHeight & "&windowwidth=" & strImageWidth & "'," & strImageWidth & "," & strImageHeight + 30 & ");""><img src=""" & strHardLinkImageUrl & "/products_small/" & rsShowFeaturedProducts("ImgSmall") & """ width=""110"" height=""110"" border=""0"" alt=""" & strImgTitle & " - " & rsShowFeaturedProducts("Product") & """></a></td>"
Response.Write "<td width=""154"" height=""20"" align=""left"" valign=""top"">"
Response.Write "<table border=""0"" cellpadding=""4"" cellspacing=""0"" width=""154"">"
Response.Write "<tr>"
Response.Write "<td width=""154"" height=""20"" align=""left"" valign=""top"" colspan=""2""><a href="""" class=""productlink"">" & rsShowFeaturedProducts("Product") & "</a></td>"
Response.Write "</tr>"
Response.Write "<tr>"
Response.Write "<td width=""154"" height=""20"" align=""left"" valign=""top"" colspan=""2"">" & rsShowFeaturedProducts("Description") & "</td>"
Response.Write "</tr>"
If rsShowFeaturedProducts("ShowDiscount") = True Then
Response.Write "<tr>"
Response.Write "<td width=""154"" height=""20"" align=""left"" valign=""top"" colspan=""2"" class=""productprice"">" & strTextProductOldPrice & ""
Response.Write " <strike>"
Call BoxConvertCurrency(rsShowFeaturedProducts("Price"), rsShowFeaturedProducts("Vat"))
Response.Write "</strike>"
Response.Write "<br>" & strTextProductDiscountPrice
Response.Write " <b>"
Call BoxConvertCurrency(rsShowFeaturedProducts("DiscountPrice"), rsShowFeaturedProducts("Vat"))
Response.Write "</b>"
Response.Write "<br>" & strTextProductSave & " "
Call BoxCalculateSavings(rsShowFeaturedProducts("Price"), rsShowFeaturedProducts("DiscountPrice"), rsShowFeaturedProducts("Vat"))
Response.Write "</td>"
Response.Write "</tr>"
Else
Response.Write "<tr>"
Response.Write "<td width=""154"" height=""20"" align=""left"" valign=""top"" colspan=""2"" class=""productprice"">" & strTextProductPrice
Response.Write " <b>"
Call BoxConvertCurrency(rsShowFeaturedProducts("Price"), rsShowFeaturedProducts("Vat"))
Response.Write "</b></td>"
Response.Write "</tr>"
End If
Response.Write "<tr>"
Response.Write "<td width=""77"" height=""20"" align=""left"" valign=""top"">"
Response.Write "<table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""67"" height=""21"">"
Response.Write "<tr>"
Response.Write "<td background=""" & strHardLinkImageUrl & "/button_left.gif"" width=""9"" height=""21"" align=""center"" valign=""middle""></td>"
Response.Write "<td background=""" & strHardLinkImageUrl & "/button_middle.gif"" width=""49"" height=""21"" align=""center"" valign=""middle""><a href=""" & strHardLinkUrl & "/default.asp"" class=""buttonlink"">" & strTextProductReadMore & "</a></td>"
Response.Write "<td background=""" & strHardLinkImageUrl & "/button_right.gif"" width=""9"" height=""21"" align=""center"" valign=""middle""></td>"
Response.Write "</tr>"
Response.Write "</table></td>"
Response.Write "<td width=""77"" height=""20"" align=""left"" valign=""top"">"
Response.Write "<table border=""0"" cellpadding=""0"" cellspacing=""0"" width=""67"" height=""21"">"
Response.Write "<tr>"
Response.Write "<td background=""" & strHardLinkImageUrl & "/button_left.gif"" width=""9"" height=""21"" align=""center"" valign=""middle""></td>"
Response.Write "<td background=""" & strHardLinkImageUrl & "/button_middle.gif"" width=""49"" height=""21"" align=""center"" valign=""middle""><a href=""" & strHardLinkUrl & "/default.asp"" class=""buttonlink"">" & strTextProductBuy & "</a></td>"
Response.Write "<td background=""" & strHardLinkImageUrl & "/button_right.gif"" width=""9"" height=""21"" align=""center"" valign=""middle""></td>"
Response.Write "</tr>"
Response.Write "</table></td>"
Response.Write "</tr>"
Response.Write "</table></td>"
Response.Write "</tr>"
Response.Write "</table></td>"
iLoop = iLoop + 1
If iLoop Mod 2 = 0 Then
Response.Write "</tr>"
End If
rsShowFeaturedProducts.MoveNext
Loop
End If
rsShowFeaturedProducts.Close : Set rsShowFeaturedProducts = Nothing
Call CloseConn()
Response.Write "</td>"
Response.Write "</tr>"
Response.Write "</table>"
End Sub
Det är inget fel på HTML-koden som ska skrivas ut eller själva subben. Problemet ligger i att byta ut [BoxFeaturedProducts] som kommer från databasen mot att anropa subben BoxFeaturedProducts.
Enklast hade ju varit om man bara kunder spara <% Call BoxFeaturedProducts %> direkt i databasen, men då händer ju inget när man skriver ut HTML-koden från databasen.
Du måste göra om suben till en funktion och returnera den html-koden..
Men det funkade ju perfekt! Tänk att det var så enkelt... Hade för mig att jag redan provat på att ändra den till en funktion men jaja... tack.
Fast riktigt så enkelt var det kanske inte. Problemet nu är att funktionen BoxFeaturedProducts skrivs ju ut oavsett om elementet [BoxFeaturedProducts] finns med i databasen eller inte.
Function BoxFeaturedProducts
Response.Write "<table bgcolor=""" & strColor1 & """ border=""0"" cellpadding=""4"" cellspacing=""1"" width=""558"">"
Response.Write "<tr>"...
Sub PageContent(ByVal strPageContent)
strPageContent = Replace(strPageContent, "[BoxFeaturedProducts]", BoxFeaturedProducts)
Response.Write strPageContent
End Sub
Du kan inte ha response.write i funktionen.
Du måste spara det du skriver ut i en variabel och returnera det..
Function BoxFeaturedProducts
Dim v_ret
v_ret = "<table bgcolor=""" & strColor1 & """ border=""0"" cellpadding=""4"" cellspacing=""1"" width=""558"">"
v_ret = v_ret & "<tr>"
BoxFeaturedProducts = v_ret
End Function