Avatar billede learner Praktikant
16. juli 2005 - 11:51 Der er 21 kommentarer og
2 løsninger

css styles laves af php. andre muligheder?

Hej, jeg har en php fil hvor jeg har alt mit css liggende. Det smarte ved det er at jeg kan sætte sidebredde, farver osv op i min settings.php. og derved er jeg fri for at rette manuelt i styles.css filen hver gang noget skal ændres.

eks:
styles.php
<style type="text/css">
#maindiv {
    width                        : <?php echo $sidebredde-40; ?>px;
}
</style>

og så bruger jeg require(styles.php) i hver fil

Mit spørgsmål er:
Kan det laves om således at jeg skriver:
<link rel="stylesheet" href="/styles.css" type="text/css">
og jeg vil stadigvæk gerne at php sætter variablerne på farver, bredder osv osv.

Findes der en smart måde????

:o)
Avatar billede cwboy Nybegynder
16. juli 2005 - 12:20 #1
nu har jeg ikke drønende meget forstand på PHP, men jeg ville gøre noget lignende:

slet <style...> og </style> i styles.php

og din <link...> skal så se sådan her ud: <link rel="stylesheet" href="styles.php" type="text/css">

du skal blot sørge for, at det output der kommer fra styles.php ligner en gyldig .css-fil
Avatar billede erikjacobsen Ekspert
16. juli 2005 - 12:21 #2
1. Der må ikke stå <style type="text/css"> i en .css fil, php eller ej
2. Du skal kalde den som en php fil: <link rel="stylesheet" href="/styles.php" type="text/css">
2. PHP filen skal sætte content type som text/css
Avatar billede mysli Nybegynder
16. juli 2005 - 12:33 #3
Du kunne sætte noget script i bunden af dit style.php script - så den skriver css'en over i en .css fil, så behøver du kun at require style.php på én side. og så køre normalt med <link>
Avatar billede learner Praktikant
16. juli 2005 - 12:43 #4
cwboy: måske virker det :o)

mysli: spændende ide :o) Hvordan dælan gør man det? :o)

erikjacobsen: er du sikker på at man kan <link rel="stylesheet" href="/styles.php" type="text/css"> og tror du det virker i alle browsere? Har du selv prøvet en gang?

andre forslag?
Avatar billede learner Praktikant
16. juli 2005 - 13:08 #5
Nu har jeg lige forsøgt mig lidt med at indsætte <link rel="stylesheet" href="/pgs/styles.php" type="text/css">

og min /pgs/styles.php ser kort fortalt således ud:
img {
    padding            : 0px;
    border        : 0px;
}

input {
    font-family    : <?php echo $settings_font; ?>;
    font-size    : 11px;
    color        : <?php echo $bogstav_farve; ?>;
}

og det virker ik helt som det skal. Kun nogle af styles virker. og det ser ud som om at det er alle de steder hvor der er php koder det går galt. Jeg tror ik man kan gøre det sådan...

desuden opdagede jeg ved vis kilde at dette underlige script var blevet tilføjet automatisk. Det er ihvertfald ik noget jeg har skrevet :o) Her er det:
<script language="JavaScript">
<!--

function SymError()
{
  return true;
}

window.onerror = SymError;

var SymRealWinOpen = window.open;

function SymWinOpen(url, name, attributes)
{
  return (new Object());
}

window.open = SymWinOpen;

//-->
</script>
Avatar billede erikjacobsen Ekspert
16. juli 2005 - 13:08 #6
Det vil virke i alle browsere hvis du gør de 3 ting jeg skrev (jeg kan godt nok ikke tælle længere end til 2 i dag...). Men det er da bestemt en god ide at lave en fast CSS fil ud fra data, så de ikke behøver blive beregnet hver gang. En slags caching! Så tit ændrer du vel heller ikke farverne ;)
Avatar billede learner Praktikant
16. juli 2005 - 13:46 #7
1. Der må ikke stå <style type="text/css"> i en .css fil
2. Du skal kalde den som en php fil: <link rel="stylesheet" href="/styles.php" type="text/css">
3. PHP filen skal sætte content type som text/css

Jeg mener at opfylde dem alle 3 og det virker ik!
Jeg skriver dette imellem <head> og </haed>
<link rel="stylesheet" href="/pgs/styles.php" type="text/css">

og min /pgs/styles.php ser kort fortalt således ud:
img {
    padding  : 0px;
    border  : 0px;
}

input {
    font-family : <?php echo $settings_font; ?>;
    font-size  : 11px;
    color      : <?php echo $bogstav_farve; ?>;
}

uden <style type="text/css"> og heller ik i slutningen :o)

Mangler jeg at gøre noget?
Avatar billede erikjacobsen Ekspert
16. juli 2005 - 13:58 #8
"kort fortalt" ... jamen, vi skal se det hele for at sige hvad der galt.
Avatar billede learner Praktikant
16. juli 2005 - 14:12 #9
Nu ved jeg hvad der er galt. Alle variablerne følger jo med når jeg skriver require() men det gør de jo ik på den anden måde. Så styles.php aner ikke hvad variablernes værdier er. Doooh :o) dum fejl af mig der :o)
Avatar billede learner Praktikant
16. juli 2005 - 14:19 #10
Jeg skulle bare tilføje dette i min styles.php:
<?php
require($_SERVER["DOCUMENT_ROOT"]."/pgs/settings.php");
?>

så virkede det fint :o)

erikjacobsen vil du smide et svar :o)
Tak for hjælpen :o)
Avatar billede erikjacobsen Ekspert
16. juli 2005 - 14:43 #11
Jeg samler ikke på point, tak.
Avatar billede learner Praktikant
16. juli 2005 - 15:09 #12
det virker ik alligevel :o) ÆV
Jeg får denne fejl når jeg åbner siden i mozilla:
Error: The stylesheet http://www.rejseagenten.dk/pgs/styles.php was not loaded because its MIME type, "text/html", is not "text/css".
Avatar billede learner Praktikant
16. juli 2005 - 15:14 #13
Nogen der kan hjælpe mig med at få styles php til at generere en styles.css fil ??? For det må da virke :o) så kan jeg bare lave en opdater-css-link som kun er synligt for admin. Nogen der kan fortælle hvordan jeg genererer en fil?
Avatar billede mysli Nybegynder
16. juli 2005 - 16:22 #14
Der skal du benytte fopen og fwrite - begge kan selvfølgelig findes på php.net
Avatar billede mysli Nybegynder
16. juli 2005 - 16:28 #15
Mit virker på nogenlunde denne måde:

$css = "
//css kode
";

$fil = "style.css";

if (is_file($fil)){
$handle = @unlink($fil)
}

$fh = fopen($fil, a); //
fwrite($css, $fh);
fclose($fh);
Avatar billede erikjacobsen Ekspert
16. juli 2005 - 17:39 #16
Så har du glemt mit punkt 3. Du skal øverst have dig en

header("Content-Type: text/css; charset=iso-8859-1");
Avatar billede learner Praktikant
16. juli 2005 - 17:44 #17
Hej igen, det virker nu :o) i alle browsere osv...
Man skal bare huske at have skrivetilladelse i CHMOD så kører det! :o)
Alletiders, tak! :o)
Avatar billede learner Praktikant
16. juli 2005 - 17:52 #18
Tusind tak mysli og erikjacobsen. Nu kan jeg meget bedre slappe af og tage på ferie med kæresten :o)

Hvis mysli vil have point, så skriv et svar...
Avatar billede mysli Nybegynder
16. juli 2005 - 21:03 #19
Jeg er egentlig ligeglad - hjælper andre for selv at kunne få hjælp en anden gang:)

Rigtig god ferie. (dit heldige dyr;))
Avatar billede learner Praktikant
17. juli 2005 - 01:40 #20
Tak for hjælpen, håber jeg kan hjælpe jer tilbage en gang :o)
Avatar billede learner Praktikant
07. maj 2006 - 13:25 #21
Hmmmm jeg har et problem...
Når jeg opdaterer styles.css filen med php, så skriver den til styles.css filen. Dvs den bliver længere for hver gang. Den skulle jo først tømme filen, og så indsætte indhold i filn.

Her er mit script:
// Let's make sure the file exists and is writable first.
if (is_writable($_SERVER["DOCUMENT_ROOT"].$css_file_name)) {
    if (is_file($_SERVER["DOCUMENT_ROOT"].$css_file_name)){$handle = @unlink($_SERVER["DOCUMENT_ROOT"].$css_file_name);}
    if (!$handle = fopen($_SERVER["DOCUMENT_ROOT"].$css_file_name, 'a')) {$sorry_didnt_work=true; $alert_message = "Cannot open file ".$css_file_name;}
   
    // Write $somecontent to our opened file.
    if (fwrite($handle, $somecontent) === FALSE) {$sorry_didnt_work=true; $alert_message = "Cannot write to file ".$css_file_name;}
    if (!$sorry_didnt_work){
        $alert_message = "Success, wrote CSS to ".$css_file_name;
        fclose($handle);
    }
} else {
    $alert_message = "The file ".$css_file_name." is not writable";
}
echo "<script type='text/javascript'>alert('".$alert_message."');</script>";

Så man skal altså først lige tømme filen, men hvordan gør man det?
Avatar billede erikjacobsen Ekspert
07. maj 2006 - 13:35 #22
Ret 'a' til 'w'
Avatar billede learner Praktikant
07. maj 2006 - 13:38 #23
Er det virkelig det eneste :o)
Tusind tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester