• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

string in datei ersetzen und datei einbinden

mustang

Mitglied
Hallo Leute,

ich möchte in einer css datei variablen verwenden. habe auch schon bisschen gesucht, bin aber jetzt soweit, dass ich es selber basteln will.

mein ansatz ist nun, dass ich in der css-datei an der stelle einer variable [variable] schreibe. diese soll dann per php durch den richtigen wert ersetzt werden. anschließend soll die css-datei eingebunden werden.

wie auch immer, ich weiß nicht, wie ich es schaffe das ersetzen zu programmieren und wie ich die datei dann einbinde. natürlich soll der string nicht wirklich in der datei ersetzt werden, denn ich ändere ja auch mal die werte der variable.
ich weiß nun nicht, ob ich mit einer temporären datei arbeiten soll, oder ob es vielleicht möglich ist den inhalt der datei als string zu speichern und als css einzufügen...
 
hab da noch was...
also ich könnte mir den code der datei in eine variable als string einlesen und dann im string die entsprechenden stellen ersetzen.
das problem ist nur, wie bekomme ich den inhalt des strings dann als css eingebunden?!
 
Anstelle der regulaeren CSS Datei verweist Du in der HTML Datei auf Dein PHP Skript in dem Du die Variablen ersetzt (den Dateinamen kannst Du dann ja noch ueber eine htAccess Datei entsprechend stylen).

Dieses Skript muss sich nun beim Browser als CSS Datei outen, das ereichst Du mit dieser Anweisung:
PHP:
header('Content-type: text/css');
Diese Anweisung muss aber vor der ersten Textausgabe in Deinem Skript stehen (beachte eventuelle BOMs!).

Jetzt gibst Du einfach den String mit substituierten Farbvariablen aus.

Um nicht jedesmal das ganze Skript rendern zu muessen, wuerde ich mir noch eine effiziente Caching-Methode ausdenken. Zum Beispiel mit ETags.
 
edit: teeny war schneller. :mrgreen:

Hallo,

Geht viel einfacher: Du kannst die Datei-Endung in *.php ändern und den Content-Type im HTTP-Header modifizieren.

Beispiel einer style.php:
PHP:
<?php header("Content-Type: text/css; charset=UTF-8"); ?>
<?php 
$background = "12cdab";
$bodyPadding = 20;
?>

body{
    background-color: #<?php echo $background; ?>;
    padding: <?php echo $bodyPadding; ?>px;
}

Gruß
 
hm joah.... die lösung hab ich auch schon gesehen, aber bin nicht ganz so überzeugt davon, weil der code in der "css" file dann echt unübersichtlich wird.
finde die variante mit dem replace deswegen etwas schöner. an jeder stelle in der css ein <?php echo $lalalal; ?> reinzuschreiben wird grauenhaft.
ich kann euch ja mal zeigen, was ich bisher habe:

das ist datei 1, wo die css eingebunden werden soll (würde ich natürlich als funktion später machen, aber jetzt erstmal zum testen)
PHP:
<?php
$content = file_get_contents('style.css');
$designvars = array( "background" => "#000" );

foreach ($designvars as $key => $value) {
$content = str_replace("[".$key."]", $value, $content);
}


$temp = tmpfile();
fwrite($temp, "<?php header('Content-type: text/css'); ?>");
fwrite($temp, $content);
fseek($temp, 0);
echo fread($temp, 1024);
fclose($temp);

?>
und das ist die style.css:

Code:
body, html {
    background-color: [background];
}
Problem an dem ganzen ist, dass die datei einfach nur ausgegeben wird. sie wird nicht als css interpretiert, sondern der code einfach nur ausgegeben. theoretisch könnte ich das ganze so in den head einfügen, dann hab ich aber die komplette css im head und das will ich nicht.
ich müsste die datei mit html jetzt noch irgendwie einbinden und zwar so, dass er es als css versteht.
hat die temporäre datei denn einen pfad? dann könnte ich sie ja wie eine normale css einfügen. der header stimmt ja schon

edit: sry falscher code
 
Zuletzt bearbeitet:
hmm diesen Weg ueber eine temporaere Datei finde ich etwas umstaendlich.

Wieso nicht einfach die Datei mit dem ersten Codebeispiel als CSS Datei angeben? Schmeiss den ganzen tmpfile( Kram raus und schreibe statdessen einfach:
PHP:
header('Content-type: text/css');
echo $content;
 
ah ok perfekt. jetzt klappts.
hier mal der komplette code, wie ich ihn jetzt habe:

datei, die den style haben soll:
HTML:
<html>
<head>

<link href="style.php" rel="stylesheet" type="text/css" media="screen" />

</head>
<body>

</body>
</html>
style.php, die die style.css verarbeitet:

PHP:
<?php
header('Content-type: text/css');
$content = file_get_contents('style.css');
$designvars = array( "background" => "#000" );

foreach ($designvars as $key => $value) {
$content = str_replace("[".$key."]", $value, $content);
}

echo $content;

?>
und die style.css:

HTML:
body, html {
    background-color: [background];
}
ich danke euch :-) funktioniert wunderbar. jetzt gehts ab damit in die seite^^
 
Zuletzt bearbeitet:
habe ein weiteres problem dazubekommen...
ich kann in der style.php nicht auf variablen zugreifen, die in der date, die den style haben soll, festgelegt wurden.
warum? und wie kann ich das ändern?

ok... gelöst^^ --> get
 
Zurück
Oben