3

基本的な CSS 設定をデータベースに保存しているので、何らかの Web フォームを使用してクライアントが設定できるようになり、styleタグ内でエコーアウトして既存の設定を上書きできます。フォント ファミリー、背景色、フォント色などの基本設定。

テーブル:

テーブルに保存された CSS 設定

すべての 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だと思います。助けてください!

4

6 に答える 6

4

最適な解決策の 1 つは、適切な 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;

フィドルの例:

デモ

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 + " }";
}
于 2013-09-25T07:52:30.633 に答える
2

これを使用するだけです:

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

$map = array();

foreach ($results as $css) {
    $map[$css->style_name] .= $css->style_value;
}

foreach ($map as $style_name => $style_value) {
    echo $style_name . "{" . $style_value . "}" ;
}
于 2013-09-25T07:52:07.090 に答える
0

最初にデータの解析を検討することをお勧めします。おそらく最も効率的な方法ではありませんが、最も柔軟性が高くなる可能性があります。

これはテストされていませんが、一般的なアイデアを得る必要があります。

$uniqueStyles = array();

// Parsing the styles from the database.
foreach ($results as $cssRecord) {
    if (array_key_exists($cssRecord['style_name'], $uniqueStyles)) {
        $uniqueStyles[$cssRecord['style_name']][] = $cssRecord['style_value'];
    } else {
        $uniqueStyles[$cssRecord['style_name']] = array($cssRecord['style_value']);
    }
}

// To echo out the styles.
foreach ($uniqueStyles as $styleName => $styles) {
    echo $style . '{' . PHP_EOL;
    echo implode(PHP_EOL, $styles);
    echo '}' . PHP_EOL;
}
于 2013-09-25T07:51:18.843 に答える
0

最初の方法

$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) $unique_css[$css->style_name][] = $css->style_value;

foreach ($unique_css as $selector => $selector_styles) {
    echo $selector . ' {';
    foreach ($selector_styles as $style) {
        echo $style;
    }
    echo '}';
}
于 2013-09-25T07:54:05.053 に答える