スタイルシート切り替えスクリプト

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関数を呼び出す記述を追加すれば、取り敢えず使えます。

変数

$styleList
スタイルシートのリストです。連想配列で、キーはスタイルシート名(link要素のtitle属性値)、値はスタイルシートのパス(link要素のhref属性値)です。
$defaultStyle
デフォルトのスタイルシート名(title属性値)。
$noStyle
スタイル無し(制作者のスタイルシートを適用しない状態)の名称。
$style
選択されているスタイルシートの名前を格納します。ブラウザ判別などの機能を追加する場合はこの変数の値をうまく変えてやって下さい。

関数

writeLinks()
link要素を挿入したい場所で呼び出します。
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>