背景:
我的项目是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处理回单独的可插入字段?
答案 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
或者只是谷歌,有很多。