我正在尝试为网站管理员开发一个界面,以便能够通过单击按钮或链接来更改网站的样式表。
我知道您可以通过将更改应用于 cookie 来更改样式表,但这是每台计算机的。我需要能够永久更改样式表,以便它为所有用户更改,并且唯一可以更改它的人是管理员。有没有办法做到这一点?我还没有代码。
如果您乐于使用数据库,您可以简单地拥有一个表格,例如settings,您将在其中存储样式表的 URL,然后在您的页面上使用以下形式的内容:
<link rel="stylesheet" type="text/css" href="<?= $stylesheet ?>">
$stylesheet
对数据库的查询结果在哪里。
对于表,您将有一个名为的列key
和一个名为的列value
,样式表行将分别具有值stylesheet_url
和http://example.com/style.css
。
或者,您可以允许管理员直接编辑 CSS 文件并使用 PHP 将更改保存到文件中,这不需要数据库并且可能会提高性能。快速搜索显示这将是多么容易。
可以通过BLOB将其存储在数据库中
这是一个相当不错的参考http://www.it-iss.com/mysql/mysql-inserting-and-reading-blobs-in-php/
已经在您的页面上拥有您的样式表,并根据页面类型在适当的组中正确设计选择器的体系结构(即您的 ID 和类)。
现在,这使您可以轻松地专注于 JavaScript(可选),例如,如果您想使用下拉框来重新加载 DOM 的某个部分以更改 ID 和类,所有这些都无需刷新页面。
也不需要 PHP,让 PHP 处理后端数据,而这个过程控制样式。
以下是使用聊天室模板的 PHP 生成的样式表。我只是将其作为示例发布,您可以根据自己的目的进行调整。请注意指定内容类型的标头:
header('Content-type: text/css');
//I forgot what v stands for, but it's an array of user defined styles.
$v['uid'] = 'u'.$id;
$v['msg_bg'] = 'FFFFFF';//background color of message window
$v['user_c'] = '0114A0';//color of user's name
$v['action_c'] = '990000';//color of enter/exit messages
$v['other_c'] = '270049';//color of the names of others
$v['text_c'] = '000000';//general text color
$v['font_s'] = '16';
$v[''] = '';
$v[''] = '';
$css = <<<EOTAAA
#userwindow{
margin: 0 0 20px 20px;
}
#messagewindow, #userwindow{
background-color: #%msg_bg%;
font-size: %font_s%px;
font-family: Tahoma, cx-bair, Arial, sans-serif;
}
#messagewindow p {
color: #%text_c%;
font-family: Tahoma, cx-bair, Arial, sans-serif;
}
#messagewindow p b, #userwindow p{
color: #%other_c%;
}
#messagewindow p.self b, p#%uid%{
color: #%user_c%;
}
#messagewindow p span{
color: #%action_c%;
text-transform: uppercase;
font-size: 12px;
}
EOTAAA;
//custom font filenames
$cx[] = "bair";
$cx[] = "century_gb";
$cx[] = "oakwood";
$cx[] = "plantc";
$cx[] = "salzburg-bold";
$cx[] = "sanskrit";
$cx[] = "timess";
$font_css = '';
$font_template = <<<EOTAAB
@font-face {
font-family: cx-%fontname%;
src: url("%url%fonts/%fontname%.eot");
}
@font-face {
font-family: cx-%fontname%;
src: url("%url%fonts/%fontname%.ttf");
}
EOTAAB;
foreach ($cx as $key => $value){
$font_css .= str_replace(array('%fontname%', '%url%'), array($value, base_url()), $font_template);
}
foreach ($v as $key => $value){
$search[] = '%'.$key.'%';
$replace[] = $value;
}
echo str_replace($search, $replace, $css).$font_css;