Rolf B: Gibt es frei verfügbare PHP Preprocessor Tutorials?

Beitrag lesen

Hallo MB,

es gibt eine PHP Extension für SASS, namens sassphp, aber die ist 8 Jahre alt und dürfte zu heutigen PHPs nicht mehr passen. Und sie ist zum selbercompilieren... Findest Du bei github.

Ansonsten ist das Parsen von Texten - also das finden der Bedeutung hinter den Zeichen - eine nichttriviale Übung und auch ein simpler Parser fällt einem schnell auf die Füße.

Die Lösung, die ich einmal gewählt habe, bestand aus einem PHP Script, das in etwa so aussieht. Die Caching-Header kannst Du an deine eigenen Bedürfnisse anpassen.

<?php
header("Content-type: text/css");
// Ganz wichtig: Caching ermöglichen, sonst macht das hier nicht viel Sinn.
header("Cache-Control: max-age=86400, must-revalidate");
header("Expires: " . date('r', time() + 86400));

// Definiere Variablen, die im unten inkludierten CSS aufgelöst werden. 
// Dass CSS wird inkludiert, damit eine IDE ".css" sieht und CSS Hilfe anbietet.
$color1 = "#f00";
$color2 = "#00f";
// etc etc etc

$css = \filter_input(INPUT_GET, 'css', FILTER_UNSAFE_RAW);
$css = \preg_replace("/[\?\*\\\:]/", "", $css);
if (empty($css))
{
  $css = "default";
}

// gewünschte CSS Datei includen
include $_SERVER['DOCUMENT_ROOT'].'templates/styles/'.$css.'.css';

Und im HTML lade ich das stylesheet dann über die URL loadcss.php?css=stylesheet.css

Im CSS kann man dann jederzeit PHP Variablen verwenden, so wie im HTML auch, also mit <?= $color1 ?>.

a {
   color: <?= $linktext_color ?>;
}

Das ist dann ein LESS oder SASS für Arme. Aber wenn Du Mixins haben willst oder sowas, dann installiere Dir lieber less.js, das läuft unter node, ohne dass Du Dir die libsass selbst compilieren musst. Wenn Du die libsass schon hast, und Dir das zusammenstecken zutraust, dann gibt's auch node-sass auf github, das ein node.js Frontend für die libsass darstellt. SASS via node.js wird von einigen IDEs unterstützt.

Aber einen CSS Parser selbst schreiben, um SASS-artige Dinge zu tun - uiuiui, das ist ein mutiges Unterfangen. Ich würde da vermutlich als erstes in Richtung ANTLR schielen, für den es tatsächlich sein einiger Zeit eine PHP Runtime gibt... Allerdings ist man mit eigenen Sprachgrammatiken immer recht schnell in Gefahr, sobald es relevante Updates der Sprache gibt.

Rolf

--
sumpsi - posui - clusi