Ответ 1
AFAIK http://leafo.net/lessphp/ несовместим с Boostrap 3 > 3.0.0, см. https://github.com/leafo/lessphp/issues/503
http://lessphp.gpeasy.com/ работает для меня, я успешно использовал его для JBST (https://github.com/bassjobsen/jamedo-bootstrap-start-theme/issues/82), я не использовал функцию кеширования.
Без кэширования вы можете вызывать $parser->parseFile()
для каждого добавляемого файла, он будет скомпилирован в один файл. array(/var/www/mysite/bootstrap.less' => '/mysite/');
. Используйте массив массивов для нескольких файлов: array(array(/var/www/mysite/bootstrap.less' => '/mysite/'), array(/var/www/mysite/.less' => '/mysite/'));
<?php
$parser = new Less_Parser();
$parser->parseFile( '/var/www/mysite/bootstrap.less', 'http://example.com/mysite/' );
$parser->parseFile( '/var/www/mysite/mainless.css', 'http://example.com/mysite/' );
$css = $parser->getCss();
Less_Cache:: Get, похоже, работает только для одного файла.
update Как комментируется @user697576 Less_Cache::Get()
принимает один файл или список (массив файлов). Единым файлом будет массив вроде array(/var/www/mysite/bootstrap.less' => '/mysite/');
Из документов:
Используйте класс Less_Cache для сохранения и повторного использования результатов скомпилированных меньше файлов. Этот метод мы проверяем измененное время каждого меньшего файла (, включая импортированные файлы), и регенерировать при обнаружении изменений.
Я выделяю , включая импортированные файлы, потому что это, похоже, решает вашу проблему. Слейте файлы с МЕНЬШЕ:
styles.less:
@import "my.less";
@import "mainless.css";
И компилировать только стили.
/var/www/mysite/bootstrap.less - Является ли это тем меньше файлов для компиляции?
Да, почему бы и нет? Убедитесь, что файлы, импортированные в bootstrap.less, доступны в том же каталоге, что и bootstrap.less, или используйте $parser->SetImportDirs()
для установки правильного пути.
/mysite/- что это за???
Он устанавливает правильный путь. Если файл LESS содержит, например, url(image.png)
, он выводит url( /mysite/image.png)
. Примечание. Бутстрап использует../для пути глификонов, это не будет исправлено или даже хуже станет /mysite/../. Вам нужно будет установить этот путь в LESS: @icon-font-path: "/mysite/fonts/";
/var/www/writable_folder - это где css написано?
Nope после $compiled = file_get_contents( '/var/www/writable_folder/'.$css_file_name );
$compiled
содержит (скомпилированный) CSS, который вы должны записать в файл. Или используйте: $css_file_name = Less_Cache:: Get ($ to_cache); в вашем HTML:
<link rel="stylesheet" type="text/css" href="/writable_folder/<?php echo $css_file_name;?>">
Обновление Обратите внимание, что с Bootstrap 3.2.0. префикс свойств в Bootstrap выполняется с помощью средства autoprefixer в процессе сборки. Предыдущее означает, что код кода Bootstrap Less содержит объявление свойства, в котором используется только синтаксис W3C, в то время как для поддержки кросс-браузера требуется префикс. Компиляция источника с помощью less.php не запускает средство autoprefixer. См. Также: https://github.com/oyejorge/less.php/issues/158