【问题标题】:Keep website theme the same.. cookies?保持网站主题相同.. cookie?
【发布时间】:2009-10-25 00:12:01
【问题描述】:

我认为我需要使用 javascript 来执行此操作,因此我将其放在堆栈溢出处。所以,我的网站有两个主题,唯一的区别是一个是纯色(背景),另一个是重复的图像,所以我没有为它们制作单独的 css 文件。我在导航栏中有两个链接可以更改它(使用 javascript)。在 css 文件中,它是纯色的,所以当页面加载时,它就这样开始了。点击图片主题链接时,会将document.body.backgroundImage设置为图片,点击纯色主题链接时,只是将背景图片设置为“”(空),这样就可以再次看到颜色了.那么我怎样才能使主题持久化,而不是在用户转到另一个页面时以及当他们再次返回时改变。谢谢。

编辑:我可以使用 PHP 或 javascript。

【问题讨论】:

  • 我会推荐一个基于 PHP 的解决方案,因为原始主题在页面加载之前是可见的,然后 javascript 完成执行。
  • 我使用 javascript 来设置 cookie,并使用 php 来加载它们。我使用 javascript 是因为点击链接时它很容易执行。

标签: javascript web persistence themes


【解决方案1】:

如果您使用所有 javascript 并且没有任何服务器端代码可以使用,这里有一个 JS 示例来设置和读取 cookie:

将此函数添加到您的 JS 中,然后在更改主题时运行它:

function set_theme(name){
  document.cookie='sel_theme='+name+';';
  }//so, run set_theme('whatevername'); when it is set by the user

读取 cookie 并在页面加载时设置主题(使用 jQuery 或类似的 $(document).ready() 会比 onload 更好,但这里是一个直接的 js/dom 示例)

 window.onload=function(){
var cookie_pos=document.cookie.indexOf('sel_theme=');//locate value in cookie
if(cookie_pos!=-1){//if string was found
  var cookie_flavor=substr(cookie_pos+10,document.cookie.indexOf(';',cookie_pos));//extract the value of the cookie
  /*then run your already existing change theme function using the extracted name*/
  }    

【讨论】:

  • 太好了,我还要注意您可以在地址栏中执行 javascript:alert(document.cookie) 或在 firebug 的控制台中键入 document.cookie 以查看当前的 cookie 内容。
  • 我也可以使用 PHP。那会比javascript更好吗?如果是这样,我将如何在 PHP 中做到这一点?
  • 在用户更改cookie时使用JS设置cookie,然后在下次加载页面时,使用PHP的$_COOKIE超全局读取cookie并为该主题打印适当的CSS/HTML。如果有帮助,我稍后会添加一个服务器端答案示例,但很大程度上取决于您的 CSS/HTML 的设置方式。
【解决方案2】:

您可以使用会话在服务器端跟踪用户的偏好。当用户重新打开并选择了主题(您可以从会话变量中确定)时,服务器将提供设置了 backgroundImage 而不是纯色的 HTML。当用户切换首选项时,您可以发送更新会话变量的 ajax 请求。

【讨论】:

  • 您能详细解释一下具体的操作方法吗?
  • 这在很大程度上取决于您的服务器端编码。您是否使用 CMS 或 Joomla 或 Drupal 之类的框架、博客平台或某种类型的框架,它是否使用 PHP 或类似的?如果您没有任何控制或修改服务器端代码的经验,我已经添加了一个 JS 示例,但我同意,这样做服务器端是一个更好的解决方案(您也可以将两者结合起来,按照我的描述使用 JS 设置 cookie然后用 PHP 阅读并首先打印出正确的主题)
  • 我可以使用 php,但除此之外,现在它只是普通的 html 和 javascript。
  • 好的,我按照你的建议做了,用 javascript 设置 cookie,用 php 加载适当的 css 主题。谢谢!
猜你喜欢
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 2023-01-05
  • 2021-06-06
  • 2015-04-09
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多