webForumDet fria alternativet

ASP-anpassad CSS fil och lösning

5 svar · 382 visningar · startad av medialabs

medialabsMedlem sedan mars 20023 686 inlägg
#1

Tjena,

Jag håller på med att anpassa en av mina webbplatser och tänkte låta användaren välja mellan 2 st stylesheets.

Hittade en lösning som använder sig av javascript och cookies. Men kom för en stund sedan på att javascript kan vara avstängt hos användaren så att denne inte kan använda sig av funktionen. Så jag betämde mig för att göra lösningen klient/browser oberoende.

Bestämde mig för att använda Sessions för att lagra användarens val. Vald CSS behålls så länge som webbläsarfönstret är "öppen".

och på sidan har jag två länkar ungefär:

If Request.QueryString("css") = "adapt" then
Session("sessionAdaptSite") = "AdaptSite"
end if

Inkluderar stylesheeten med:

<link rel="stylesheet" type="text/css" href="/css/stylesheet.asp">

Stylesheet.asp

<% Response.ContentType = "text/css" %>

<% if Session("sessionAdaptSite") = "AdaptSite" then %>

	/* Den anpassade Stylesheet */

<% Else %>

	/* Om det inte finns något i SessionAdaptSite, visar vi den normala  */

<% end if %>

Jag vill sedan kunna genom att klicka på en länk endast förstöra Session("sessionAdaptSite") Sessionen och bara den. Inga andra.

Och om jag kör med följande kod så förstörs ALLA sessioner och inte den som jag vill. Och sedan en konstig sak, När jag skickar besökaren vidare till index så ligger sessionen aktiv och den anpassade stylesheeten ligger kvar. Först efter att jag i webbläsaren klickar på refresh kommer den normala stylesheeten fram.

Finns det någon meta tagg som löser problemet??

<%
If Request.QueryString("css") = "normal" then

Session("sessionAdaptSite") = Session.Abandon
response.redirect "/index.asp"
end if
%>

Går det att göra min Stylesheet.asp fil lite "bättre" eller bygga upp den på ett smartare sätt?

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#2

Kanske lämpligare att köra olika CSS-filer och länka in beroende på Session-inställning. Då cachas CSS-filen utan något extra meck.

Engine^Medlem sedan dec. 20003 887 inlägg
#3

Session.Abandon dumpar hela sessionen inklusive dina variabler. Det räcker bra om du sätter din sessionAdaptSite till en tom sträng istället och jobbar utifrån det.

Istället för att försöka blanda in VBScript i en .css-fil gör du bäst i att ha två eller flera filer. Och för att välja rätt fil har du en sessionsvariabel, som innehåller rätt filnamn för den sessionen.

<link rel="stylesheet" type="text/css" href="<%=Session("sessionStylesheet")%>">

Det kanske går att lösa med att sätta en annan type, men det är inget jag har prövat och därför inget jag gissar på ;)

medialabsMedlem sedan mars 20023 686 inlägg
#4

Har funderat på att ha 2 st css-filer och har ett fungerande byta css-script. Men den använder sig av javascript. Och javascript tänker jag inte använda mig av på den webbplatsen.

Man kan ju ladda in 2 st olika css-filer på detta sätt. Men hur går man tillväga för att med hjälp av en länk välja den andra alternativa, samt att sedan byta tillbaka till den normala css-filen. Skulle helst vilja använda mig av sessions för att hålla vald css-fil inläst

<link rel="stylesheet" type="text/css" href="/css/normal.css" title="normal">

<link rel="alternate stylesheet" type="text/css" href="/css/anpassad.css" title="anpassad">

Borde man inte med hjälp av setActiveStyleSheet eller motsvarande i asp göra för att byta mellan css-filerna?

Som sagt, javascript är inget alternativ just nu.

Det finns även en style switcher i PHP. http://www.alistapart.com/articles/phpswitch/

Så den går ju inte att använda då sidan är i ASP.

medialabsMedlem sedan mars 20023 686 inlägg
#5

Jaaaa!

Äntligen fick jag det att fungera så att man inte behöver uppdatera sidan själv för att få det valda stylesheetet uppdaterat.

Här kommer lösningen på problemet.

Index.asp ( startsidan )

	<!-- // Ladda in rätt Stylesheet till klientdatorn -->
	<% if session("AdaptSite") = "" then %>

		<link rel="stylesheet" type="text/css" href="/css/stylesheet.css" title="normal">
		<link rel="alternate stylesheet" type="text/css" href="/css/stylesheet_AdaptSite.css" title="anpassad">
	
	<% elseif session("AdaptSite") = "anpassad" then %>
	
		<link rel="stylesheet" type="text/css" href="/css/stylesheet_AdaptSite.css" title="anpassad">
		<link rel="alternate stylesheet" type="text/css" href="/css/stylesheet.css" title="normal">
	
	<% end if %>

Det som jag gör är att kolla om sessionen AdaptSite är tom. Om den är det så ska den normala stylesheeten visas och den anpassade är ställd som ALTERNATE.

Om sessionen AdaptSite innehåller anpassad så kommer den att instället att visa och ladda in våran anpassade stylesheet istället och så har jag satt den normala stylesheeten som ALTERNATE.

Sedan har jag 2 länkar på Index.asp

<a href="/public/adaptsite.asp?css=anpassad">Anpassa webbplatsen</a> <br>
<a href="/public/adaptsite.asp?css=normal">Återgå till standard</a> <br>

css=anpassad
css=normal

är olika querystrings. Den ena för att anpassa och den undre för att sätta sessionen till = "" (tömma den helt enkelt.)

AdaptSite.asp

<%
If Request.QueryString("css") = "anpassad" then
Session("AdaptSite") = "anpassad" 
response.redirect "/index.asp"
End If

If Request.QueryString("css") = "normal" then
Session("AdaptSite") = ""
response.redirect "/index.asp"
End If
%>

AdaptSite.asp tar emot querystringen och berodende på värde så sätter den Session("AdaptSite") = "anpassad" och skickar användaren till Startsidan och nu innehåller sessionen AdaptSite Anpassad och då laddas den anpassade stylesheetet in hos användaren!! Wohoo! äntligen lyckades man

För att sedan återgå till den normala stylesheetet igen så skickar man värdet css=normal och sessionen tömms på information och skickar tillbaka användaren till Startsidan och den vanliga, normala stylesheetet laddas in.

Så löste jag mitt problem och samtidigt slapp jag använda Javascript. Lösningen är kanske inte helt vacker men den Fungerar!

Jag är MYCKET intresserad av att höra era åsikter om detta och sättet jag löste det på! Går det att förbättra koden på något sätt? Allt av intresse!

Tog lite tid men klockan är ju bara 03.32. Satt till 04 igår med ett annat problem som jag tillslut löste.

Sov gott.. :birp

medialabsMedlem sedan mars 20023 686 inlägg
#6

Kom på att lösningen är helt "server-side", ok.. förutom att man måste tillåta "sessioncookies". (vilket nästan alla gör)

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)