Gibt es frei verfügbare PHP Preprocessor Tutorials? – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self Gibt es frei verfügbare PHP Preprocessor Tutorials? Mon, 23 Sep 19 11:50:51 Z https://forum.selfhtml.org/self/2019/sep/23/gibt-es-frei-verfugbare-php-preprocessor-tutorials/1758127#m1758127 https://forum.selfhtml.org/self/2019/sep/23/gibt-es-frei-verfugbare-php-preprocessor-tutorials/1758127#m1758127 <p>moin,</p> <p>Gibt es frei verfügbare <em>PHP</em> <em>Preprocessor</em> Tutorials? Bespielsweise die aus <em>SASS</em> oder <em>SCSS</em> validen <em>CSS</em> <em>Code</em> formen.</p> <p>Ich möchte mir einen simplen <em>Preprocessor</em> schreiben und werde unter anderem ohnehin bei <strong>MarkUP</strong>, <strong>Twig</strong> nach gucken wie man das am besten lösen kann. Da wollte ich gucken ob's da n eingfaches <em>Tutorial</em> gibt.</p> <p>lgmb</p> Gibt es frei verfügbare PHP Preprocessor Tutorials? Mon, 23 Sep 19 17:51:30 Z https://forum.selfhtml.org/self/2019/sep/23/gibt-es-frei-verfugbare-php-preprocessor-tutorials/1758138#m1758138 https://forum.selfhtml.org/self/2019/sep/23/gibt-es-frei-verfugbare-php-preprocessor-tutorials/1758138#m1758138 <p>Hallo MB,</p> <p>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.</p> <p>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.</p> <p>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.</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token function">header</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"Content-type: text/css"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Ganz wichtig: Caching ermöglichen, sonst macht das hier nicht viel Sinn.</span> <span class="token function">header</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"Cache-Control: max-age=86400, must-revalidate"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">header</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"Expires: "</span> <span class="token operator">.</span> <span class="token function">date</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'r'</span><span class="token punctuation">,</span> <span class="token function">time</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">86400</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Definiere Variablen, die im unten inkludierten CSS aufgelöst werden. </span> <span class="token comment">// Dass CSS wird inkludiert, damit eine IDE ".css" sieht und CSS Hilfe anbietet.</span> <span class="token variable">$color1</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"#f00"</span><span class="token punctuation">;</span> <span class="token variable">$color2</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"#00f"</span><span class="token punctuation">;</span> <span class="token comment">// etc etc etc</span> <span class="token variable">$css</span> <span class="token operator">=</span> <span class="token function"><span class="token punctuation">\</span>filter_input</span><span class="token punctuation">(</span><span class="token constant">INPUT_GET</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'css'</span><span class="token punctuation">,</span> <span class="token constant">FILTER_UNSAFE_RAW</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$css</span> <span class="token operator">=</span> <span class="token function"><span class="token punctuation">\</span>preg_replace</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"/[\?\*\\\:]/"</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">""</span><span class="token punctuation">,</span> <span class="token variable">$css</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$css</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$css</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"default"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// gewünschte CSS Datei includen</span> <span class="token keyword">include</span> <span class="token variable">$_SERVER</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'DOCUMENT_ROOT'</span><span class="token punctuation">]</span><span class="token operator">.</span><span class="token string single-quoted-string">'templates/styles/'</span><span class="token operator">.</span><span class="token variable">$css</span><span class="token operator">.</span><span class="token string single-quoted-string">'.css'</span><span class="token punctuation">;</span> </span></code></pre> <p>Und im HTML lade ich das stylesheet dann über die URL <code>loadcss.php?css=stylesheet.css</code></p> <p>Im CSS kann man dann jederzeit PHP Variablen verwenden, so wie im HTML auch, also mit <code><?= $color1 ?></code>.</p> <pre><code class="block language-css"><span class="token selector">a</span> <span class="token punctuation">{</span> <span class="token property">color</span><span class="token punctuation">:</span> <?= $linktext_color ?><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>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.</p> <p>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.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Gibt es frei verfügbare PHP Preprocessor Tutorials? Mon, 23 Sep 19 20:51:35 Z https://forum.selfhtml.org/self/2019/sep/23/gibt-es-frei-verfugbare-php-preprocessor-tutorials/1758140#m1758140 https://forum.selfhtml.org/self/2019/sep/23/gibt-es-frei-verfugbare-php-preprocessor-tutorials/1758140#m1758140 <p>moin,</p> <p>schau ich mir morgen an. Danke Dir . Bis dann</p> <p>lgmb</p> Gibt es frei verfügbare PHP Preprocessor Tutorials? Tue, 24 Sep 19 07:45:10 Z https://forum.selfhtml.org/self/2019/sep/23/gibt-es-frei-verfugbare-php-preprocessor-tutorials/1758157#m1758157 https://forum.selfhtml.org/self/2019/sep/23/gibt-es-frei-verfugbare-php-preprocessor-tutorials/1758157#m1758157 <p>Hallo MB,</p> <p>ich sehe gerade, dass ich von einer Version meines Scripts ausgegangen bin, die in einem veralteten Entwicklungszweig lag und etwas buggy ist.</p> <p>Diese folgende Zeile muss so geändert werden, dass sie auch das Zeichen / entfernt, es sei denn, du willst unbedingt Pfade akzeptieren können. Zur Zeit entfernt sie nur die Wildcardzeichen "?" und "*" sowie die Windows-Pfadsymbole "" und ":". Das bedingt dann auch ein anderes REGEX-Delimiterzeichen.</p> <pre><code class="block bad language-php"><span class="token variable">$css</span> <span class="token operator">=</span> <span class="token function"><span class="token punctuation">\</span>preg_replace</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"/[\?\*\\\:]/"</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">""</span><span class="token punctuation">,</span> <span class="token variable">$css</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <pre><code class="block good language-php"><span class="token variable">$css</span> <span class="token operator">=</span> <span class="token function"><span class="token punctuation">\</span>preg_replace</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"#[/\?\*\\\:]#"</span><span class="token punctuation">,</span> <span class="token string double-quoted-string">""</span><span class="token punctuation">,</span> <span class="token variable">$css</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre> <p>Die folgende Zeile legt die CSS Quelle auf den Ordner templates/styles fest, das musst Du für dich sicherlich anpassen. Für einen Moment dachte ich auch „Rolf, was für einen Scheiß hast Du da denn gemacht, dass Du das DOCUMENT_ROOT verwendest“, aber sie ist richtig, weil das ja keine URL ist sondern ein serverinterner Dateizugriff. Und man könnte auch PHP Stringersetzung nutzen...</p> <pre><code class="block language-php"><span class="token keyword">include</span> <span class="token variable">$_SERVER</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'DOCUMENT_ROOT'</span><span class="token punctuation">]</span><span class="token operator">.</span><span class="token string double-quoted-string">"templates/styles/<span class="token interpolation"><span class="token variable">$css</span></span>.css"</span><span class="token punctuation">;</span> </code></pre> <p>DOCUMENT_ROOT endet (zumindest bei mir) auf ein "/", deshalb steht vor meinem ergänzten Pfadteil kein weiterer Verzeichnistrenner. Man könnte höchstens einwenden, dass ich ein fest codiertes / verwende, statt DIRECTORY_SEPARATOR, aber da Windows ein / genauso verdaut wie ein , ist das wohl nicht wirklich nötig.a</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div>