php - 根据选择器和声明(key => value)从数据库中显示 CSS

标签 php html css

我将基本的 CSS 设置存储在数据库中,这样它们就可以由客户端使用某种网络表单进行配置,然后这些可以在 style 标签中回显并覆盖任何现有设置.基本设置,如字体系列、背景颜色、字体颜色等。

表格:

CSS settings stored in table

我决定存储如上所示的设置,而不是为每个 css 选择器设置列名,因为这样更容易更新和维护。

我试图回显“style_name”后跟“{”,然后是每个“style_value”,然后是结束标记“}”。我快到了,但我想弄清楚如何知道何时回显与样式名称关联的所有样式值,然后回显结束标记,而不是在每个值之后回显。

PHP 代码:

$sql = 'SELECT style_name, style_value FROM style ORDER BY style_name';
$results = $stmt->fetchAll(PDO::FETCH_OBJ);

$unique_css = array();

foreach ($results as $css) {
    if (!in_array($css->style_name, $unique_css))  {
        $unique_css[] = $css->style_name;
        echo $css->style_name . " { " . $css->style_value;
    } else {
        echo $css->style_value;
    }
    echo '}';
}

返回:

body {
    background: #CCC; }
    font-family: 'Verdana', sans-serif; }
    font-size: 40px; }
    text-align:center;
}

h1 {
    font-size: 50px;
}

h2 {
    font-family: 'Arial', sans-serif;
}

我知道我可以回显每个带有值的样式名称,例如:

body { value1 } body {value2}

但我认为这只是 IMO 的困惑。帮助表示赞赏!

最佳答案

最佳解决方案之一是使用适当的 MySQL 通过使用 GROUP_BY 关键字并使用 GROUP_CONCAT 连接样式值字符串来按样式名称分组:

SELECT style_name, GROUP_CONCAT(style_value SEPARATOR ' ') style_values FROM style GROUP BY style_name

这将导致:

STYLE_NAME  STYLE_VALUES
body        background: #CCC; font-family: 'Verdana', sans-serif; font-size: 40px; text-align: center;
h1          font-size: 50px;
h2          font-family: 'Arial', sans-serif;

示例 fiddle :

DEMO

有关 GROUP_BY 和 GROUP_CONCAT 的更多信息:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

之后,您可以将所有样式以简单的方式组合在一起:

foreach ($results as $css) {
    echo $css->style_name . " { " . $css->style_values + " }";
}

关于php - 根据选择器和声明(key => value)从数据库中显示 CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18998776/

相关文章:

php - 将太多电话号码传递给 url 失败 - 发送短信 API

php - mysqli_query() 没有产生预期的结果

html - 如何为每个 child 的 child 设置不同的背景颜色

wordpress - 让超链接在矩形框中以#3D 变换方式垂直滚动

php - CodeIgniter 向 CSV 添加字段

javascript - 从选择多个 ="multiple"选项下拉列表中获取所有选定项目的名称

javascript - Bootstrap : set height of a div relative to the height of another div?

javascript - 是否可以使 Accordion 标题导航到新页面?

html - 如何在 CSS 中使一个元素的高度适应另一个元素的高度

php - 使用 HTML 表单更新多个 MySQL 表