On Sun, 2010-02-07 at 23:45 -0500, Paul M Foster wrote:

> On Sun, Feb 07, 2010 at 11:20:18PM -0500, David Mehler wrote:
> > Hello,
> > I'm trying to set up a web site. This site has multiple stylesheets,
> > one default stylesheet that should be used if the other is not chosen.
> > The second is a high contrast stylesheet and can be selected by user's
> > who need it. I'm also thinking of adding two more for smaller and
> > larger font selections. My issue is I want the high contrast sheet to
> > be used on all subsequent pages and on subsequent visits to the site
> > by user's who have selected it. I thought of using php with this and
> > cookies. I'm using php5 and would appreciate any suggestions, googling
> > has shown some examples, but none are working.
> > Thanks.
> > Dave.
> There are two main PHP-centric solutions to this. First is cookies (as
> you described) and the second is using the $_SESSION global array.
> Doing this is relatively straightforward, so if it's not working for
> you, I see two possibilities: 1) You're not actually doing it right. 2)
> The users isn't pressing the "Reload" button after selecting the
> stylesheet. (My experience has been that simply redisplaying a page will
> not clear the cached CSS styles for that page. You must hit the "Reload"
> button. In fact, in some cases, like offices with caching webservers or
> proxies, an admin will have to be called in to clear the cache on the
> proxy/server as well.)
> You should be able to do something like this (I'm using SESSION
> variables because cookies are more complicated):
> <?php
> // Top of page
> session_start();
> if ($_SESSION['stylesheet'] == 'enlarged_print')
>       $css = 'enlarged_print.css';
> else
>       ...
> ?>
> <html>
> ...
> <link href="<?php echo $css; ?>" rel="stylesheet" type="text/css"/>
> ...
> </html>
> Paul
> -- 
> Paul M. Foster

I'm doing this on my own site, and it works like this:

The stylesheets are output in <a> tags, so that a user can click on one
to select a style, refreshing the page.

In the header include, I check first to see if a new style was sent in
the $_GET array, then the $_SESSION array, then finally to see if there
is a stylesheet entry in the $_COOKIES array. If none is found, a
default is assumed, and I write this value to both the $_SESSION and
$_COOKIES array. By checking them in the order above, it lets a user
pick a new one from a link, and will remember their choice throughout
their current session and any subsequent visits to the site.

As all the stylesheets are included in the pages with the correct <link>
tags anyway, anyone with a compatible browser (Firefox, Opera, etc) can
select the style from a drop menu directly in the browser, although it's
better to use the links, as the browser doesn't remember the choice from
page to page.


Reply via email to