2012-09-05 12 views
10

voglio le seguenti cose accadano:compila un file MENO riferimento in CSS con PHP automaticamente

  1. avere il lato server di processo automatizzato.

  2. Semplicemente è possibile fare riferimento al file LESS come se fosse un file CSS nel mio codice.

  3. L'utente viene restituito CSS minificato anziché il file LESS - memorizzato nella cache in modo che il compilatore non debba essere eseguito a meno che il file LESS non sia stato aggiornato.

  4. Per questo per funzionare con qualsiasi file MENO che fa riferimento ovunque all'interno del mio dominio.

ho notato Lessphp, ma la documentazione non è molto chiaro, né spiega come ottenere dinamicamente qualsiasi tipo di file MENO ad esso. Ho pensato di postare su come ho fatto tutto funzionando come non ho visto una corsa su come ottenere questo con PHP.

risposta

17

QUESTO SI ASSUME LESSPHP v0.3.8 + Non si è sicuri delle versioni precedenti, ma si otterrà il succo di come funziona se non è immediatamente disponibile.

<link rel="stylesheet" type="text/css" href="styles/main.less" />

Se si sta utilizzando less.js per compilare lato client, assicuratevi di modificare rel="stylesheet/less" a rel="stylesheet"

1) Grab Lessphp ho messo questi file nella /www/compilers/lessphp/ per il contesto di questa demo

2) Crea uno script PHP in cui possiamo lanciare i file LESS su. Ciò riguarderà il caching, la compilazione in CSS e il ritorno del CSS come risposta. Ho messo al file dal /www/compilers/ e lo ha chiamato lessphp.php

La maggior parte di questo codice è stato sul sito Lessphp, tranne che ci sono stati errori in esso, e ho aggiunto la risposta alla fine.

<?php 
require "lessphp/lessc.inc.php"; 
$file = $_GET["file"]; 
function autoCompileLess($inputFile, $outputFile) { 
    // load the cache 
    $cacheFile = $inputFile.".cache"; 
    if (file_exists($cacheFile)) { 
     $cache = unserialize(file_get_contents($cacheFile)); 
    } else { 
     $cache = $inputFile; 
    } 
    $less = new lessc; 
    $less->setFormatter("compressed"); 
    $newCache = $less->cachedCompile($cache); 
    if (!is_array($cache) || $newCache["updated"] > $cache["updated"]) { 
     file_put_contents($cacheFile, serialize($newCache)); 
     file_put_contents($outputFile, $newCache['compiled']); 
    } 
} 
autoCompileLess('../' . $file, '../' . $file . '.css'); 
header('Content-type: text/css'); 
readfile('../' . $file . '.css'); 
?> 

Questo compilerà il file MENO (ad esempio, styles/main.less) per un file di cache e un file CSS (per esempio, styles/main.less.css).

3) Aggiungere una regola mod_rewrite in modo che tutti i file MENO che un utente richiede vengano reindirizzati al nostro compilatore, dandogli il suo percorso. Questo è stato inserito nel file radice .htaccess.

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteRule ^([^.]*\.less)$ compilers/lessphp.php?file=$1 [R,QSA,L] 
</ifModule> 

Se si utilizza WordPress, questa regola dovrà venire dopo che - anche se WordPress è in una sottodirectory, sembra sovrascrivere queste regole, e la compilazione di meno non si verifica per i file di riferimento che esistono al di sotto (directory saggio) regole .htaccess di WordPress.

4) Il codice LESS deve essere relativamente riferito in relazione alla posizione del compilatore. Inoltre, il compilatore Lessphp fallirà se ci sono attributi vuoti, ad es.background-color: ;


Se tutto funziona bene, dovrebbe verificarsi quanto segue:

  1. Direttamente sfogliare il file MENO http://domain.com/styles/main.less

  2. automaticamente reindirizzato al http://domain.com/compilers/lessphp?file=styles/main.less

  3. essere presentato con minified CSS

  4. main.less.css e main.less.cache dovrebbero ora trovarsi nella stessa directory del file MENO

  5. Le ultime date modificate non dovrebbe cambiare a meno che non si aggiorna il file MENO

Problemi correlati