【问题标题】:load css from database based on user preferences根据用户偏好从数据库加载 css
【发布时间】:2011-11-14 14:50:31
【问题描述】:

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

这不是很重要,但我知道有几个员工视力稍差,并认为高对比度的风格可能会有一些用处。

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

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

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

到目前为止我所做的尝试:

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

效果很好,样式表根据样式列的 mysql 表中的内容而有所不同。在用户偏好页面上,我有点崩溃了。我创建了一个带有 3 个单选按钮的小表单,每种样式一个。我能从这里看到的唯一方法是将表单发布到一个 PHP 文件,该文件会根据选择更新表格。

我这样做的主要问题是用户必须注销并重新登录才能使更改生效。我想要一个在现场或刷新时发生更改的设置。

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

非常感谢

编辑

【问题讨论】:

  • 用户是否经常更换工作站?如果没有,您可以使用 cookie 和非常小的 javascript 来减少您的 php/mysql 开销。您“宁愿避免”cookies有什么原因吗?
  • 别忘了您也可以同时包含所有 3 种样式,使用备用样式表语法:<link rel="alternate stylesheet" title="Large Print" src="bigtext.css" />。在 FFPage Style 菜单中的一个选项。
  • @farray 我只是不擅长使用 cookie,因为自从构建了这个 Intranet 以来我只使用过一次,并且使用它们的数量惊人。
  • @Marc B 是否有可能有两个替代品,或者有办法使用 html 或 php 在默认值和替代品之间切换?非常感谢
  • @eds:只要他们有不同的头衔,你就可以有尽可能多的替补。这是在它们之间动态切换的一种方式:alistapart.com/articles/alternate

标签: php mysql css switch-statement


【解决方案1】:

听起来您也必须将会话变量设置为新值。 所以在同一个地方更新你的数据库和你的会话变量。

【讨论】:

  • 完美,我认为这应该可以解决问题!非常感谢!!
【解决方案2】:

要编写一个执行此操作的脚本,我将使用 JQuery 并发布一个帖子或获取更新用户首选项的脚本。然后应用post返回的css或者获取相应的css。

有点像:

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

希望这可以解决它。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 谢谢,目前这三种样式都是文件,我不会从数据库本身加载它们,只是用它来定义css的位置。
    【解决方案4】:

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

    也许你是这个意思?

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

    【讨论】:

    • 我有点密集,因为我使用会话变量进行用户登录,我使用注销和登录来重置变量,忘记了我可以在选择样式时使用 php 设置它。
    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多