2009-10-18 84 views
1

我正在使用一个非常简单的样式表开关由PHP。它一直很好,但几天前我打开缓存模式,现在它只适用于登录用户。如果关闭缓存模式,它将再次为两个用户工作。Drupal缓存和样式表开关

基本上代码看起来是这样

在page.php文件头

<?php 
    if(isset($_COOKIE['style'])){ 
     $style=$_COOKIE['style']; 
    } else { 
     $style='green'; 
    } 
    ?> 
    <link type="text/css" rel="stylesheet" href="/css/<?php echo $style ?>.css"> 

它通过

<a href="http://www.mydomain.com/switch.php?style=blue">Blue</a> 

切换在switch.php

<?php setcookie('style', $_GET['style'], time()+31536000); 
header('Location:'.$HTTP_SERVER_VARS['HTTP_REFERER']); 
?> 

我做了很多研究,但找不到正确的方法。如果可以的话请帮忙。谢谢

回答

2

嗯,我不明白你为什么不能使用客户端风格的切换器,如在http://www.alistapart.com/articles/alternate/。还有其他方法可以完全实现客户端,但请求整个新页面切换样式似乎有点矫枉过正。

另外,缓存创建了一个静态页面,代替每次点击动态创建一个新页面,因此缓存页面可能会被送达谁没有得到样式切换。

+0

非常感谢你的回应。我之前看过这篇文章。我没有尝试它,因为我希望用户能够在主菜单上而不是在页面上切换它。 onclick =“setActiveStyleSheet('')似乎有点难以在主菜单上实现。可能是我应该放弃对此的偏好。如果我打开缓存模式,客户端切换器可能是我唯一的选择。 – mesmer 2009-10-18 08:22:07

+2

+1 - 启用缓存几乎可以“禁用”任何自定义PHP代码,这些代码会改变为特定URL提供服务的页面,因为该页面确实将作为直接从缓存表中取得的“静态”版本提供。客户端解决方案将是明显的解决方法。 – 2009-10-18 14:21:55