根据用户首选项从数据库加载css

时间:2011-11-14 14:50:31

标签: php mysql css switch-statement

我目前正在尝试为我的基本内联网推出自己的CSS样式切换器。

这并不是非常重要,但我知道有几名员工视力稍差,并认为高对比度风格可能会有所帮助。

这是我理想的设置,以及我到目前为止尝试实施的方式。

基本上我已经拥有一个mysql数据库,用于登录用户登录详细信息以及有关该网站的其他次要偏好。我想为样式首选项添加一个额外的列,并在用户区域中有一个简单的页面,用户可以在其中预览,选择和应用样式。

如果用户最初选择样式,它会将其应用于页面以便在操作中看到它,然后可以确认它是否是用户选择的内容,这显然会很好。

到目前为止我的尝试:

基本上,当用户登录时,它会创建一个会话变量,其中包含该用户的“样式”列的值。我选择了3个样式,1个,2个和3个。然后在页面的head部分,对于样式表的href,我添加了一些评估会话变量并回显样式表的PHP根据设定的内容。

工作正常,样式表根据样式列的mysql表中的内容而有所不同。在用户首选项页面上,我分崩离析。我创建了一个带有3个无线电选择按钮的小表单,每个样式一个。我可以看到从这里开始的唯一方法是将表单发布到PHP文件,该文件根据选择更新表。

我以这种方式做的主要问题是用户必须注销并重新登录才能使更改生效。我希望能够在现场或刷新时进行更改。

我可以使用cookies,但如果可能的话,宁愿避免使用。不知道是否有人有任何建议可以帮助我,或者是否有任何预先编写的脚本可以实现这一目标?

非常感谢

4 个答案:

答案 0 :(得分:2)

听起来你必须将会话变量设置为新值。 因此,请在同一位置更新您的数据库和会话变量。

答案 1 :(得分:1)

编写一个执行此操作的脚本我将使用JQuery并发布帖子或获取更新user-pref的脚本。然后应用帖子返回的css或相应地获取。

某些人喜欢:

$.get('coolCss.php','cssid=3',function(data){
    $('#myCssTag').empty();
    $('#myCssTag').append(data);
});

希望这可以解决它。

但我会考虑使用不同的css文件并更改所选文件。

答案 2 :(得分:0)

除非您小心,否则从数据库提供CSS会破坏浏览器缓存CSS文件的能力。这会减慢每个页面的负载。

您应该做的是将默认样式表作为文件提供,然后,如果需要,根据用户的会话变量从数据库中提供自定义样式表。自定义应该只覆盖现有样式。

答案 3 :(得分:0)

我不明白为什么用户必须注销并重新登录才能使更改生效,或者他们必须登录和注销。这听起来像是您的应用程序的问题。

也许你的意思是这个?

IE和Firefox都会缓存从文件加载的CSS。只要CSS文件名相同,用户在手动刷新页面之前就不会看到更新的样式。要解决此问题,如果要从文件加载CSS,则每个样式都应该有自己唯一的文件名。