Home > PHP >
PHP Style Switcher | Sitemap Search |
|
Sections Membership Features
Recent comments
very difficult by alfin Taking the credit for another persons work ? by curious dude. |
PHP Style SwitcherPosted by martin on 1 Jun 2002, last updated on 27 Aug 2002. Separate the content from presentation and let your visitors choose a color scheme for your site; uses PHP sessions. ConfigurationBecause the script relies on the built-in session support in PHP a good thing to start off with (if you have access to the server) is to compile PHP with Note: As of PHP 4.2.0 transparent session support is built-in PHP by default. This setting will allow PHP to pass the session identifier to the next script even if cookies are not available. You will also have to make sure you've got Let's do itFirst off create a simple stylesheet, mine is named The common stylesheet is not available here, just use some template if you have one. Sample style sheetsI have this one saved as
body {
background : #ccc;
color : #000;
}
a:link, a:visited {
color : #444;
background:transparent;
}
/* Keep below :link and :visited */
a:hover, a:active {
color : #666;
background : transparent;
}
.banner {
background : #aaa;
}
And the following is
body {
background : #eee;
color : #000;
}
a:link, a:visited {
color : #009;
background:transparent;
}
/* Keep below :link and :visited */
a:hover, a:active {
background : #fff;
color : #009;
}
h1, h2, h3 {
color : #900;
}
.banner {
background : #aaa;
}
You may explicitly set the color of The PHP codeNote: I use the PHP 4.1 superglobal arrays ($_GET, $_SESSION). If you want to make this backward-compatible just change all
session_start();
if ( isset($_GET['style']) ) {
$_SESSION['style'] = $_GET['style'];
} elseif ( !isset($_SESSION['style']) ) {
$_SESSION['style'] = 'gray';
}
if ( isset($_GET['navbar']) ) {
$_SESSION['navbar'] =
($_GET['navbar'] == 'left') ? 'left' : 'right';
} elseif ( !isset($_SESSION['navbar']) ) {
$_SESSION['navbar'] = 'right';
}
This code sends HTTP headers so it has to appear before any output no matter from PHP or HTML. It has to be also before the document type declaration. Exception is possible only when you use output buffering. Start a session first -- which will fill in any saved variables from the previous page and check if we've got a GET variable named <link href="style/common.css" type="text/css" rel="stylesheet" /> <link href="style/<?php echo $_SESSION['style']?>.css" type="text/css" rel="stylesheet" /> Above is the HTML code used to link to the style sheets. It has to appear in the
<table border="0" summary="contents wrapper" class="wrapper">
<tr>
<?php
function navbar() {
?>
<td class="banner">
<p>Select your color scheme
</p>
<table border="0" summary="style sheet choosing controls">
<tr>
<td style="background : #cccccc">
<a href="<?php echo $_SERVER['PHP_SELF']?>?style=gray"
title="Change the stylesheet to have a gray background">
  </a></td>
<td style="background : #eeeeee">
<a href="<?php echo $_SERVER['PHP_SELF']?>?style=white"
title="Change the stylesheet to have a white background">
  </a></td>
<td style="background : #696969">
<a href="<?php echo $_SERVER['PHP_SELF']?>?style=charcoal"
title="Change the stylesheet to have a charcoal-like background">
  </a></td>
</tr>
</table>
<a href="somepage">Link1</a>
<a href="somepage1">Link2</a>
</td>
<?php
} // end navbar()
if ( $_SESSION['navbar'] == 'left' )
navbar();
?>
<td class="content">
Some stuff
</td>
if ( $_SESSION['navbar'] == 'right' )
navbar();
?>
</tr>
</table>
And this is the page wrapper. First a table is created and one row within it. The When all is defined check first if the navbar should be on the left. If so print it, else just continue with the contents. Finally, a check if the navbar is on the right. You can switch between left and right navbar just by passing back a Want moreAn improvement could be to use cookies to make changes permanent. I didn't use it as a default since cookies are not required to be available, allowing more browsers to use the feature since any browser can handle query strings (which is what you get with PHP sessions if cookies are unavailable). Another thing to consider if you've got the time is to let visitors write their own style sheet. But remember that cookies are limited by size. CommentsExcellent by Dominik () on 17 Sep 2002 3:28pm GMT Hi there, this is exactly the Stuff i was searching for. Thank you! :-) Dominik New A List Apart Tutorial by Ian () on 14 Oct 2002 4:38pm GMT A list apart has published a new tutorial on this very topic: Problems with this tutorial by martin on 14 Oct 2002 9:32pm GMT This tutorial makes use of register globals which was deprecated in PHP 4.2.0. It would not function properly if the browser didn't send a referrer or sent invalid referrer. The suggestion about Mozilla/Netscape 6 is nice if you don't take into account the fact that Konqueror would display a random stylesheet. thanks by Jennifer () on 21 Apr 2003 6:46pm GMT I've been meaning to play with this one for a while & your tutorial was perfect... cheers echo shortcut by goa103 on 9 May 2003 1:15pm GMT I am glad you don't use echo to ouput HTML like most of the developers I met. But did you know that <?= ?> is equivalent to <?php echo ?> ? It allows you to quickly and shortly insert PHP variable values in your script. Congratualtions and Thank-you by AdyGould on 5 May 2004 3:28pm GMT Martin thankyou for a superb article. I would like to use this as the basis for a short tutorial at college for my students. It shows a great use of CSS and also of PHP Sessions, just what the doctor ordered as they say. I did the completion of the control of the [Navigation Bar] positioning as a mini exercise, with just a couple of copy and pastes and a couple of modifications. What I aim to do is extend this to save the preference into a user's account details, which the students would then be able to use in a number of projects. Thankyou once again for a simple, clear and very effective style switcher. If you have a problem with my using the article then let me know, will be fully crediting yourself, and then extending it as indicated. Ady |