WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Skapa ett css dokument med php (https://www.wn.se/forum/showthread.php?t=1039988)

robincox 2010-01-13 10:31

Skapa ett css dokument med php
 
Jag har en sida vars css styrs med ett gäng variabler, t.ex.

.vansterspalt {

width: <?php echo $vansterspaltsBredd; ?>px;
padding: 0px 15px;

}

Detta innebär att jag måste ha en massa <style> taggar på min index.php vilket inte blir snyggt om man visar källkoden för sidan i en webbläsare.

Det jag undrar är om det istället går att med php skapa ett css dokument och spara ner det till servern? Alernativet skulle vara om det på något sätt går att gömma mina <style> taggar för de som visar källkoden i sina webbläsare.

znap 2010-01-13 10:47

I html-koden:
Kod:

<link rel="stylesheet" href="min_css.php" type="text/css" />
I min_css.php:
Kod:

<?php header('Content-type: text/css'); ?>
body {
 color: <?php ...?>
}
...


allstars 2010-01-13 10:49

Citat:

Ursprungligen postat av robincox (Inlägg 20338916)
Jag har en sida vars css styrs med ett gäng variabler, t.ex.

.vansterspalt {

width: <?php echo $vansterspaltsBredd; ?>px;
padding: 0px 15px;

}

Detta innebär att jag måste ha en massa <style> taggar på min index.php vilket inte blir snyggt om man visar källkoden för sidan i en webbläsare.

Det jag undrar är om det istället går att med php skapa ett css dokument och spara ner det till servern? Alernativet skulle vara om det på något sätt går att gömma mina <style> taggar för de som visar källkoden i sina webbläsare.


Du kan ha en php-fil med css-information och koppla mot databas eller vad du vill.
<link href="css.php" type="text/css" media="screen" rel="stylesheet"/>

Alternativet, som du tar upp är att ha en funktion som genererar en cssfil, och detta är bra i cache-synpunkt.

Nihilnovi 2010-01-14 00:35

lägg till i din root .htaccess file: (apache server)
AddType application/x-httpd-php .css

Detta gör att du kan använda PHP kod helt fritt i .CSS dokument.
Se till att ha <?php Header ("Content-type: text/css");?> på toppen av den CSS filen annars blir det fel i strict doctype.

edit: Tycker bara att CSS filer ska ha .CSS och inte .PHP som någon tidigare i tråden sa, kan bli förvirrande.

allstars 2010-01-14 13:32

Citat:

Ursprungligen postat av Nihilnovi (Inlägg 20339015)
Tycker bara att CSS filer ska ha .CSS och inte .PHP som någon tidigare i tråden sa, kan bli förvirrande.

Förvirrande, för vem? Det spelar ingen roll för användaren eller webbplatsen i sig. För utvecklare får man se till att ha dokumentation. Att ha php-kod i ett css-dokument (med css som filändelse) är minst sagt förvirrande.

KarlRoos 2010-01-14 14:13

Ta en titt på http://net.tutsplus.com/tutorials/ht...our-css-files/

Då ser källkoden bra ut också ;)

Nihilnovi 2010-01-14 15:02

Citat:

Ursprungligen postat av allstars (Inlägg 20339085)
Förvirrande, för vem? Det spelar ingen roll för användaren eller webbplatsen i sig. För utvecklare får man se till att ha dokumentation. Att ha php-kod i ett css-dokument (med css som filändelse) är minst sagt förvirrande.

Det är ungefär som att ha HTML i sina php klasser, det följer en dålig struktur av hela systemet. Jag tycker att CSS kod ska vara i CSS filer, om CSS filen är dynamisk med hjälp av PHP/javascript/annat gör det väl knappast förvirrande.

Man ser liksom inte css sheets med .html som ändelse, eller javascript med .asp, precis som man inte ska ha .php på css sheets.

tartareandesire 2010-01-14 21:42

Citat:

Ursprungligen postat av Nihilnovi (Inlägg 20339100)
Det är ungefär som att ha HTML i sina php klasser, det följer en dålig struktur av hela systemet. Jag tycker att CSS kod ska vara i CSS filer, om CSS filen är dynamisk med hjälp av PHP/javascript/annat gör det väl knappast förvirrande.

Man ser liksom inte css sheets med .html som ändelse, eller javascript med .asp, precis som man inte ska ha .php på css sheets.

Ibland är det betydligt smidigare att använda .php som ändelse. Tror knappast det skadar strukturen överlag, den kan vara precis lika bra (eller dålig) trots detta.

Nihilnovi 2010-01-15 04:58

Citat:

Ursprungligen postat av tartareandesire (Inlägg 20339145)
Ibland är det betydligt smidigare att använda .php som ändelse. Tror knappast det skadar strukturen överlag, den kan vara precis lika bra (eller dålig) trots detta.

Tycker inte att ge en fil fel ändelse är smidigt på något sätt alls, kanske funkar i små företag eller om man är freelancer, men om jag skulle gå runt o döpa css filer med .php eller javascript med .php i projekt som ska hålla en viss internationell standard så skulle projektledarn hänga mig med mina egna skosnören just för att .css finns och känns igen av varje webdesigner som stylesheet, men vi får väl helt enkelt hålla me om att vi har olika åsikter =) Om man nu vet att bara en själv eller en liten grupp folk som man känner kommer ha något att göra med koden så spelar det väl ingen större roll vad man döper saker till, men tycker ändå sånt beteende går emot att ha en viss standard bland alla som sysslar med webdesign i alla dess olika former.

BjörnJ 2010-01-15 06:11

Varför inte .css.php? Eller möjligen tvärt om.
Jag skulle inte förvänta mig att fil.css eller fil.js innehåller PHP-kod. Samtidigt håller jag med om att det inte känns helt rätt att en ren CSS- eller JS-fil heter fil.php, även om den skapas dynamiskt.

tartareandesire 2010-01-15 07:56

Citat:

Ursprungligen postat av Nihilnovi (Inlägg 20339162)
Tycker inte att ge en fil fel ändelse är smidigt på något sätt alls, kanske funkar i små företag eller om man är freelancer, men om jag skulle gå runt o döpa css filer med .php eller javascript med .php i projekt som ska hålla en viss internationell standard så skulle projektledarn hänga mig med mina egna skosnören just för att .css finns och känns igen av varje webdesigner som stylesheet, men vi får väl helt enkelt hålla me om att vi har olika åsikter =) Om man nu vet att bara en själv eller en liten grupp folk som man känner kommer ha något att göra med koden så spelar det väl ingen större roll vad man döper saker till, men tycker ändå sånt beteende går emot att ha en viss standard bland alla som sysslar med webdesign i alla dess olika former.

Det fåtal undantagsfall som eventuellt finns är ju enkla att dokumentera så det bör inte ställa till några problem oavsett storleken på organisationen. Dessutom informeras man direkt om att css-syntaxen genereras mha php och det är betydligt oftare en programmerare kan hantera css än en designer kan hantera php. Jag tror visserligen aldrig jag själv döpt en css-fil till annat än .css men sak samma :)

Ska man generera javascript till en extern tjänst så är det ju enklast att använda en annan filändelse.

mch 2010-01-17 20:33

Webbläsaren lyder inte
 
Hej!

Hoppas det är ok att låna tråden då det gäller samma sak.

Jag försöker använda PHP i min CSS, men webläsaren tolkar inte förändringarna.

Jag vill kunna ändra textstorlek direkt ifrån adressfältet men satt till 10px om jag inte anger någon storlek men det förändras inte. Kollar jag direkt på PHP.css med webläsaren så ändras font-size-siffran, men inte själva texten.

index.php?f=20

<?
//Längst upp i PHP.css
header("Content-type: text/css");?>


<?if($_GET['f']){$f=$_GET['f'];}else{$f=10;}?>

body,td{
color: #330033;
font-family: verdana, arial;
font-size: <?=$f?>px;
}

BjörnJ 2010-01-17 20:55

Hur inkluderar du CSS-filen från HTML-koden?

Har du testat att istället inkludera en statisk CSS-fil på samma sätt, som är exakt likadan som den som skapas med t.ex. f=20?

Citat:

Ursprungligen postat av mch (Inlägg 20339453)
<?if($_GET['f']){$f=$_GET['f'];}else{$f=10;}?>

Jag skulle göra så här:
PHP-kod:

if(isset($_GET['f'])&&intval($_GET['f'])>7$f=intval($_GET['f']); else $f=10


allstars 2010-01-17 21:04

Citat:

Ursprungligen postat av BjörnJ (Inlägg 20339455)
Hur inkluderar du CSS-filen från HTML-koden?

Har du testat att istället inkludera en statisk CSS-fil på samma sätt, som är exakt likadan som den som skapas med t.ex. f=20?


Jag skulle göra så här:
PHP-kod:

if(isset($_GET['f'])&&intval($_GET['f'])>7$f=intval($_GET['f']); else $f=10


Kan man inte köra
PHP-kod:

$f = (isset($_GET['f']) ? $_GET['f'] : "10"


BjörnJ 2010-01-18 07:05

Citat:

Ursprungligen postat av allstars (Inlägg 20339457)
Kan man inte köra
PHP-kod:

$f = (isset($_GET['f']) ? $_GET['f'] : "10"


Jo, det borde också gå bra, men jag skulle fortfarande ha med intval(). Dels för att vara säker på att det är ett riktigt värde, och dels för att det inte ska gå att utifrån få in valfri data i koden.
PHP-kod:

$f = (isset($_GET['f'])&&intval($_GET['f'])>7) ? intval($_GET['f']) : 10

Man skulle även kunna lägga till t.ex. &&intval($_GET['f'])<25 om man vill sätta en maxstorlek.

mch 2010-01-18 07:29

Så här infogar jag det.

<html>

<head>
<meta http-equiv="Content-Language" content="sv">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title></title>
<link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico">
<link rel="stylesheet" type="text/css" href="css.php" />
</head>


Och sätter jag 20 statiskt i samma fil så fungerar det font-size: 20px;.
Det gör ingen skillnad om jag använder ditt...
if(isset($_GET['f'])&&intval($_GET['f'])>7) $f=intval($_GET['f']); else $f=10;

BjörnJ 2010-01-18 07:45

Citat:

Ursprungligen postat av mch (Inlägg 20339498)
<link rel="stylesheet" type="text/css" href="css.php" />

css.php får ju inte veta eventuella parametrar som index.php får.
PHP-kod:

<link rel="stylesheet" type="text/css" href="css.php<?php if(isset($_GET['f'])) echo '?f='.intval($_GET['f']); ?>" />

Citat:

Ursprungligen postat av mch (Inlägg 20339498)
Det gör ingen skillnad om jag använder ditt...
if(isset($_GET['f'])&&intval($_GET['f'])>7) $f=intval($_GET['f']); else $f=10;

Nej, det var inte menat som en lösning på problemet, bara en förbättring av koden.

mch 2010-01-18 07:52

Aaaa!! TACK!!! .... nu funkar det :D
Jag tog för givet att variablerna följde med in där också :)

BjörnJ 2010-01-18 08:03

Citat:

Ursprungligen postat av mch (Inlägg 20339500)
Aaaa!! TACK!!! .... nu funkar det :D
Jag tog för givet att variablerna följde med in där också :)

Varsågod, kul att det gick bra. :)

Det blir ju ett separat anrop från webbläsaren för att hämta CSS-filen. Däremot kommer man åt variablerna i filer som man inkluderar med require(). Det kanske var det du tänkte på.

grinditwp 2010-01-19 15:55

Citat:

Ursprungligen postat av Nihilnovi (Inlägg 20339100)
Det är ungefär som att ha HTML i sina php klasser, det följer en dålig struktur av hela systemet. Jag tycker att CSS kod ska vara i CSS filer, om CSS filen är dynamisk med hjälp av PHP/javascript/annat gör det väl knappast förvirrande.

Man ser liksom inte css sheets med .html som ändelse, eller javascript med .asp, precis som man inte ska ha .php på css sheets.

Att döpa sin css fil till .php är knappast som att ha HTML i sina PHP klasser, det är snarare som att ha HTML i sina PHP filer, vilket är mycket vanligt :)

Du förlorar all mobilitet av dina script om du måste konfigurera om servern för att de skall fungera.

Det lär alltså vara både enklast och mest standardiserat att döpa sina dynamiska css filer till .php om de innehåller php. Absolut bäst är såklart att generera sina .css filer med php så att de kan cachas korrekt.

Dessutom vet alla vilken fil som är style sheet filer genom att kolla headern i dokumentet.

Nihilnovi 2010-01-21 02:29

Vill inte upprepa mig igen, håller helt enkelt inte med =)

Med det sagt har jag nästan bara jobbat i USA där detta är standard bland alla byråer jag har vart involverad med. Hur det funkar i sverige är knappast något just jag personligen sätter något värde på då det inte är min marknad, precis som 99% av personer här på WN inte skulle bry sig om andra marknader.

Vill också påpeka att när jag bara freelancede så gjorde jag ungefär på grinditwp's sätt! Det är nog lite annorlunda regler i B2B och B2C=)

danjel 2010-01-22 13:40

Alternativet är ju att ha klasser i .css filen som motsvarar textstorleken
och sedan sätta klasserna dynamiskt i själva markupen <body class="<?php print GetClassName()?>"..
Det är väl också helt ok att generera css inom headern för just detta syfte enligt min mening..det kommer ju validera m.m och

tartareandesire 2010-01-22 13:48

Citat:

Ursprungligen postat av Nihilnovi (Inlägg 20339899)
Vill inte upprepa mig igen, håller helt enkelt inte med =)

Med det sagt har jag nästan bara jobbat i USA där detta är standard bland alla byråer jag har vart involverad med. Hur det funkar i sverige är knappast något just jag personligen sätter något värde på då det inte är min marknad, precis som 99% av personer här på WN inte skulle bry sig om andra marknader.

Vill också påpeka att när jag bara freelancede så gjorde jag ungefär på grinditwp's sätt! Det är nog lite annorlunda regler i B2B och B2C=)

Där har du nog fel, det är väldigt många på WN som även är verksamma internationellt.

Nihilnovi 2010-01-25 18:22

Citat:

Ursprungligen postat av tartareandesire (Inlägg 20340090)
Där har du nog fel, det är väldigt många på WN som även är verksamma internationellt.

Jasså, så skulle de som jobbar internationellt följa allt exakt hur det funkar i en viss marknad när man jobbar mot en annan? Nej, jobbar man i USA mot en amerikansk marknad bryr man sig bara om det, jobbar man internationellt mot t.ex en svensk kund så anpassar man sig till den svenska marknaden, och bryr sig knappast om hur det är i t.ex Indien, Frankrike eller Australien. Däremot vill man fortfarande se en viss internationell standard vad gäller programering i B2B.

Ford gör bilar i USA med amerikas flagga på, de är ett internationellt företag som finns i hela världen. Hur bra tror du de bilarna som har den amerikanska flaggan skulle sälja i resten av världen? Nej du hittar de inte där, för att att även som ett internationellt företag så anpassar sig Ford mot den marknaden där kunden befinner sig i.

Är man så dum, som enligt dig "många här på WN är" att man inte bryr sig om sånt så kan man knappast kalla sig seriös på någon nivå, det bästa man kan uppnå är att knega för sina 20-50k i månaden och vara nöjd med att vara medelmåttig.

Om jag nån gång skulle göra en enterprise sida åt en svensk kund så skulle jag självfallet ta reda på allt jag behöver vad gäller namnkonventioner(självfallet allt annat också) i sverige. Med det sagt, så letar jag knappast efter kunder i ett land med 9 miljoner invånare.

Hela sveriges internet marknad ungefär like stor som ett par kvarter i NYC, och därför, om du nu som svensk utvecklare jobbar internationellt(eller mot USA som många seriösa utvecklare gör, för där är alla pengar) börjar du snabbt förstå att det som gäller i världens största marknad snabbt blir till internationell standard, gör du inte det, ja, lycka till!

I B2C spelar det nog ingen roll vad eller hur man gör något, de flesta kunder är helt okunniga men även där tycker jag man ska hålla en viss standard som är anpassad till marknaden, fast det är nog knappast några pengar där och jag skulle inte rekomendera att jobba i den sektorn. Fast det är nog där de flesta börjar och det är absolut normalt, jag gjorde själv det =)


Nu har ju hela tråden blivit om något helt annat så jag får sluta tjata :P In the end tycker jag att en fil ska sluta på den ändelsen som filtypen är, men om det nu är så att t.ex i sverige är det väldigt vanligt för css filer att ha php som ändelse så är det bara att köra på så länge det är en svensk kund, och anpassa sig(gällande allt, inte bara filändelse självklart :P) beroende på geografi om man jobbar internationellt.

Jawn 2010-01-25 18:35

http://www.phpro.org/articles/Embedding-PHP-In-CSS.html

tartareandesire 2010-01-25 18:45

Nihilnovi, du missuppfattade mig nog. Jag reagerade enbart på din formulering som löd så här "precis som 99% av personer här på WN inte skulle bry sig om andra marknader". Där har du nog faktiskt fel.

I övrigt håller jag absolut med dig om att man bör följa standarder i de fall de finns tydligt definierade. Däremot så bör man oavsett position verka för att internationella standarder ska gälla, inte nationella sådana vilka är relativt meningslösa i förlängningen. USA må vara den största marknaden än så länge men Asien kommer säkerligen gå om.

Pengar är heller inte allt vilket alla som beställt jobb säkerligen insett vid det här laget. Det finns välbetalda utvecklare som gör skräp liksom det finns mindre välbetalda sådana som gör utmärkt ifrån sig.

danjel 2010-01-27 16:52

Tänk på att om man använder denna teknik skapar man beroenden som ofta kan vara oönskade och försvåra tex uppskalning av webbarna, om man tex kör statiska filer ,css m.m, på en separat server kräver detta att php är installerat på denna server ..

grinditwp 2010-01-28 09:37

Citat:

Ursprungligen postat av Jawn (Inlägg 20340413)

Konstigt att det är just en "amerikan" som rekommenderar detta :D

eliasson 2010-01-28 23:18

Citat:

Ursprungligen postat av Nihilnovi (Inlägg 20339015)
lägg till i din root .htaccess file: (apache server)
AddType application/x-httpd-php .css

Det där är jätte, jätte, jättedumt ur ett säkerhetsperspektiv.

Nihilnovi 2010-01-31 02:40

Citat:

Ursprungligen postat av eliasson (Inlägg 20340800)
Det där är jätte, jätte, jättedumt ur ett säkerhetsperspektiv.

Du kan väl påpeka att du menar att om koden innehåller fel så kan källkoden visa ren php när du ändå tar dig tid att posta? För någon annan orsak finns det inte.


Lite off-topic, men det är väldigt dumt att ha viktig information i en css fil, t.ex databas connect uppgifter utan någon form av encryption med salt som ändras regelbundet.
Själv använder jag mig av cron och mina salter baseras på atmospheric noise som hämtas och ändras varje timme.


Alla tider är GMT +2. Klockan är nu 08:38.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson