reflux flow > スタイルシート切り替えスクリプト PHP版
PHPによるスタイルシートの切り替え
PHPを利用してlink要素を書き出すことで、スタイルシートの切り替えを行います。JavaScriptによる切り替えと異なり、どのようなブラウザからでも利用できます。
以下のコードはPHP4向けに書かれたものです。PHP5での作動は確認していません。
シンプルさを重視しました。必要に応じて書き換えて下さい。(2005年9月18日一部修正。)
<?php
/*** 変数の設定 ********************************************************/
// スタイルシートのリスト
$styleList = array(
// "スタイルシート名" => "スタイルシートのパス", のように指定する
"Grid" => "/2004/12/grid.css",
"Simple" => "/2004/12/simple.css"
);
// デフォルトのスタイルシート
$defaultStyle = "Grid";
// スタイル無しの名前
$noStyle = "No Style";
/*** 設定ここまで ******************************************************/
// 出力するスタイルシートの判別
if (isset($_POST["style"])) {
// フォームが送られてきた場合
$style = $_POST["style"];
setcookie("style", $style, time()+7*24*3600, "/");
} elseif (isset($_COOKIE["style"])) {
// フォームが送られていない場合はCookieの内容をチェック
$style = $_COOKIE["style"];
} else {
// フォームの送信もCookieも無い場合はデフォルトのスタイルシート
$style = $defaultStyle;
}
// link要素の書き出し
function writeLinks() {
global $styleList, $style;
foreach ($styleList as $name => $uri) {
if ($name == $style) {
echo "<link rel=\"stylesheet\" href=\"".$uri
."\" type=\"text/css\" title=\"".$name
."\" media=\"screen, projection\" />\n";
} else {
// 代替スタイルシートを出力しない場合はこのブロックを削除
echo "<link rel=\"alternate stylesheet\" href=\"".$uri
."\" type=\"text/css\" title=\"".$name
."\" media=\"screen, projection\" />\n";
}
}
}
// 切り替えフォームの書き出し
function writeForm() {
global $styleList, $style, $noStyle;
echo "<form method=\"post\" action=\"".$_SERVER["REQUEST_URI"]."\">\n";
echo "\t<p><label>Style: <select name=\"style\">";
$styleList[$noStyle] = ""; // 「スタイル無し」の項目を追加
foreach ($styleList as $name => $uri) {
echo "<option value=\"".$name."\"";
if ($name == $style) {
echo " selected=\"selected\"";
}
echo ">".$name."</option>";
}
echo "</select></label> <input type=\"submit\" value=\"変更\" /></p>\n";
echo "</form>\n";
}
?>
$styleList変数にスタイルシートを設定して、writeLinks関数とwriteForm関数を呼び出す記述を追加すれば、取り敢えず使えます。
上記のコードをstyle.phpというファイルに書き込んだとします。Cookieの書き込みを行うので、style.phpはファイルの最初の方で読み込みます。
<?php include("style.php");?>
<html>
<head>
<title>切り替えスクリプトの使用例</title>
<?php writeLinks();?>
</head>
<body>
<h1>使用例</h1>
<h2>切り替えフォーム</h2>
<?php writeForm();?>
</body>
</html>