分离CSS的组件以进行数据库输入

时间:2010-08-03 15:00:34

标签: php css string

背景:

我的项目是CMS网站,每个用户的CSS都保存在数据库表中。字段是:

int     id            primary
int     site_id       index
string  selector
string  property
string  value
bool    important

当用户的网站被拉起时,这是一个简单的查询:

SELECT * FROM css_table WHERE site_id = $this_site_id

使用PHP处理行并将其转换为适当的CSS。

问题:

我现在需要反过来。

将有一个高级CSS模式,为管理员提供原始CSS编辑器。将再次处理表行以填充textarea并允许编辑。现在它必须回到数据库。如何将这个新CSS处理回单独的可插入字段?

2 个答案:

答案 0 :(得分:1)

使用CSS Parser建议的dark_charlie(github),我能够提出以下代码将CSS转回SQL。

<?
require('cssparser.php');

$cssp = new cssparser;
$cssp->Parse('test.css');

$query = 'INSERT INTO css_table (`selector`, `property`, `value`) VALUES ';

foreach($cssp->css as $selector => $properties) {
    foreach($properties as $property => $value) {
        $query .= "('$selector', '$property', '$value'), ";
    }
}

$query = substr_replace($query, ';', -2);
echo $query; // Testing
?>

<强>附录: 在使用我在这里开发的方法之后,我很快意识到将每个属性作为新行插入是多么不切实际。单个phpbb板的CSS超过1000行,并且每个独立板的数量增加是疯狂的。

我的情况更好的选择是简单地使用单个中间文本字段并将原始CSS放在表中。要修改属性,我将CSS解析为数组,根据需要修改属性,并将数组解析回CSS并使用新CSS更新数据库。

对于“高级CSS”编辑模式,它现在是一个简单的提取/更新,因为DB保持纯CSS。

答案 1 :(得分:0)

你应该寻找一个CSS解析器(除非你想自己编写):
http://csstidy.sourceforge.net/
http://www.phpclasses.org/package/1289-PHP-CSS-parser-class.html

或者只是谷歌,有很多。