terça-feira, 5 de julho de 2011

Pegar valores de arquivo CSS com PHP

Suponhamos que você tenha um site onde pessoas podem alterar o tema da sua página pessoal, como cores, fontes, tamanhos, etc...

Aí você pensa: vou criar uma tabela no banco de dados com mil colunas pra saber o que o usuário colocou e o que não. Além de dar muito mais trabalho, a leitura do banco de dados é mais lenta e sobrecarrega seu servidor.
Então não seria mais simples salvar tudo num arquivo css personalizado, e carregá-lo depois?

O problema depois é ler esse arquivo, certo?
Errado, aqui tá a solução. Todos os dados do CSS são exportados para uma Array, mais fácil do que isso impossível neh?
Só usar a função:

function parse($file){
 $css = file_get_contents($file);
 preg_match_all( '/(?ims)([a-z0-9\s\.\:#_\-@,]+)\{([^\}]*)\}/', $css, $arr);
 $result = array();
 foreach ($arr[0] as $i => $x){
  $selector = trim($arr[1][$i]);
  $rules = explode(';', trim($arr[2][$i]));
  $rules_arr = array();
  foreach ($rules as $strRule){
   if (!empty($strRule)){
    $rule = explode(":", $strRule);
    $rules_arr[trim($rule[0])] = trim($rule[1]);
   }
  }
  
  $selectors = explode(',', trim($selector));
  foreach ($selectors as $strSel){
   $result[$strSel] = $rules_arr;
  }
 }
 return $result;
}
// Aqui vai o arquivo que você quer ler
$css = parse('css/personalizado_011246.css');

Para usar é muito fácil:

$css['body']['background-color'];
$css['#id']['color'];
$css['.class']['font-size'];

Nenhum comentário:

Postar um comentário