2012-12-04 24 views
1

我正在使用Symfony 1.4,並且使用LESS CSS預處理器遇到了一些問題。LESS CSS&Symfony - 動態更新配色方案

假設我有2個Less特定顏色變量的文件。他們被稱爲blue.less和。

在這裏,他們是:

Blue.less

@mainBorder: blue; 
@pulldownBackground: blue; 

Red.less現在

@mainBorder: red; 
@pulldownBackground: red; 

讓我們說,我有一個layout.less文件看起來像這樣:

// Colored line under Nav 
.main { 
    border: 1px solid @mainBorder; 
    .pullDown { background: @pullDownBackground; } 
} 

如果我想使用的顏色可變的一個文件,我需要在layout.less文件中像這樣的頂部聲明它:

@import 'red.less'; 

由於@import語句來引用一個特定的文件,當我想更改顏色方案時,如何動態地將blue.less傳遞給@import語句?

會有一種方法來動態聲明哪些顏色特定的LESS文件將通過PHP和Symfony框架傳遞給該導入語句?

或者可以解決這個問題沒有服務器端代碼?

+0

您是否考慮過生成LESS文件,其中包含通過PHP進行的所有必要導入,然後使用'exec'來調用編譯? – cimmanon

+0

我沒有。我對PHP和Symfony相當陌生 - Less文件目前正在通過sfLess插件進行處理:http://www.symfony-project.org/plugins/sfLESSPlugin。如果你能指點我一個教程,可以讓我着手你的建議,那將是非常好的。我也會查找PHP的exec函數。 – PhillipKregg

回答

1

我從來沒有使用Symphony,但是這應該讓你在正確的方向前進,無論框架如何。

首先要創建LESS文件:

<?php 
$color_scheme = "red"; // we're simplifying here for now, but this could be set via $_POST variable 

/* 
    it would probably be a good idea to check if the file exists first before we import it. 
    see function: file_exists() 
*/ 

$contents = " 
@import '$color_scheme.less'; 
@import 'main_styles.less'; 
@import 'other_stuff.less'; 
"; 

file_put_contents("path/to/styles.less"); 
?> 

現在你有了一個LESS文件,如果你手工寫它是準備進行處理,同樣,但與配色方案被輕易交換。如果我使用裸PHP來完成這項工作,我將使用exec()函數來調用通過命令行可用的命令。這裏有一個通過exec()調用SASS的例子(我從來沒有用過這樣的LESS,所以你必須在這裏填空)。

<?php 
exec("sass --compile path/to/sass:path/to/public/css"); 
?> 

如果你的交響樂插件不適合你的編譯,而無需使用exec /命令行,那麼你可能想這樣做來代替。

+0

太好了,謝謝你的建議! – PhillipKregg