Pukiwiki用tDiaryテーマチェンジャー.ver0.2

UTF8でLFなwindows環境でテストしています。

setstyle.php

UTF8、LF、BOMあり

<?php
/*
スタイルシートチェンジャー version 1.02 By Teal (http://readygo.s8.xrea.com/)
2003/08/31 ver.0.10 とりあえず公開。
2004/03/23 ver.1.00 UAに応じてCSSを自動で切り替えるオプションを追加。ドロップダウンメニュー中の選択しているCSSのoption要素にSELECTED属性を追加。
2005/01/04 ver.1.01 UA別自動切替に Firefox を追加。
2005/05/18 ver.1.02 HTTP_REFERERチェック削除。変数名変更($this > $selfurl )。
CSS選択フォームを表示させたい場所に
<?php include("setstyle.php"); ?>を挿入する。
「スタイルシートチェンジャー version 1.02」を参考にして、tDiaryのテーマ集を使えるように改造!
 Pukiwiki用tDiaryテーマチェンジャー.ver0.2 2008/03/17
「kenmituoの日記」http://d.hatena.ne.jp/kenmituo/
*/

// 設定------------------------------------------------------------------------
// パスは置き換えてください。

$home = "http://localhost/pukiwiki/"; // pukiwikiのディレクトリ、フルパス!
$csspath = "skin/theme/"; // tDiaryのテーマがあるディレクトリ
$index_page = $home."index.php?"; // 変更完了ページの「HOMEへ戻る」のリンク先。
$default_css = $home."skin/pukiwiki.css.php"; //pukiwikiの標準スキンのパス、普通は変更しない

$selfurl = $home."setstyle.php";// このスクリプトの場所とファイル名。

$css_file = array(); //ファイル名格納用の配列
$css_file[0] = "PukiWiki"; //標準スキンの名前、素敵な名前にしてください。

$reload  = 1; // CSS変更後、0:変更完了ページを表示、1:CSSを選択したページをリロード。
$cookie  = "selcss";// クッキー名(任意)。変更した場合は chgstyle.php の $cookie も同じにする。
$expire  = time() + 31*24*3600;// クッキーの有効期限(1ヶ月)。

// ----------------------------------------------------------------------------
//tDiaryのフォルダ名を探す。フォルダ名とCSSのファイル名が同じであることが必須!
$i=1; 
if( $handle = opendir( $csspath ) ){
while( false !== $file = readdir( $handle ) ){
if( $file != "." && $file != ".." ){ // 除ディレクトリ
$css_file[$i] = $file; // ディレクトリの名前を格納
$i++;
}
}
closedir( $handle );
}

// ----------------------------------------------------------------------------

if (phpversion()<"4.1.0") {
$_SERVER = $HTTP_SERVER_VERS;
$_POST   = $HTTP_POST_VARS;
$_COOKIE = $HTTP_COOKIE_VARS;
}

if (!isset($_POST['cssnum'])) {
echo "<form method=\"post\" action=\"{$selfurl}\">\n";
echo "<select name=\"cssnum\">\n";
for ($i = 0; $i <= count($css_file); $i++) {
if ($i == $selected_css) {
echo "<option value=\"{$i}\" selected>{$css_file[$i]}</option>\n";
} else {
echo "<option value=\"{$i}\">{$css_file[$i]}</option>\n";
}
}
echo "</select>\n";
echo "<input type=\"submit\" value=\"変更\">\n";
echo "</form>\n";
} else {
if ($css_file[$_POST['cssnum']] == "none") {
$value = "none|".$_POST['cssnum'];
$string = "なし";
} else {
$temp_css = $css_file[$_POST['cssnum']];
$string = $css_file[$_POST['cssnum']];
if ($_POST['cssnum'] == 0){ // 初期設定の場合
$value = $default_css."|".$_POST['cssnum'];
$css_value = $default_css;
}
else{ // tDiaryテーマの場合
$value = $csspath.$temp_css."/".$temp_css.".css"."|".$_POST['cssnum'];
$css_value = $csspath.$temp_css."/".$temp_css.".css";
}
}

setcookie($cookie, $value, $expire);

if ($reload) {
$redirect_url = (getenv("HTTP_REFERER") != "") ? getenv("HTTP_REFERER") : $index_page;
header("location: $redirect_url");
exit;
}
echo <<<MAIN
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<link rel="stylesheet" type="text/css" media="screen" href="$css_value" />
<title>スタイルシート変更完了</title>
</head>
<body>
<div id="body">
<p>スタイルシートを<strong> {$string} </strong>に変更しました。</p>
<p>ブラウザがスタイルシートに対応していてクッキーが有効であれば、次回の更新から反映されます。</p>
<p><a href="$index_page">HOMEへ戻る</a></p>
<script type="text/javascript">
<!--
document.write('<p><a href="JavaScript:history.back()">前のページへ戻る<\/a><\/p>');
-->
</script>
<noscript>前のページで確認したい場合は、ブラウザの戻るボタンで戻ってください。</noscript>
</div>
</body>
</html>
MAIN;
}
?>

chgstyle.php

UTF8、LF、BOMなし!

BOM付けると・・・罠に陥るので「なし」にしてください。

<?php
/*
スタイルシートチェンジャー version 1.02 By Teal (http://readygo.s8.xrea.com/)
2003/08/31 ver.0.10 とりあえず公開。
2004/03/23 ver.1.00 UAに応じてCSSを自動で切り替えるオプションを追加。ドロップダウンメニュー中の選択しているCSSのoption要素にSELECTED属性を追加。
2005/01/04 ver.1.01 UA別自動切替に Firefox を追加。
2005/05/18 ver.1.02 HTTP_REFERERチェック削除。変数名変更($this > $selfurl )。
CSSを適用させたいページの<head>〜</head>間に
<?php include("chgstyle.php"); ?>を挿入する。
*/
//「スタイルシートチェンジャー version 1.02」を参考にして、tDiaryのテーマ集を使えるように改造!
// Pukiwiki用tDiaryテーマチェンジャー.ver0.2 2008/03/17
//「kenmituoの日記」http://d.hatena.ne.jp/kenmituo/
//
//[UTF8][BOMなし]で保存しないとはまる。「%EF%BB%BF」FirefoxのWeb Developerでしか確認できていない。
//
// 設定------------------------------------------------------------------------
// CSS変更前やクッキーが無効な場合のデフォルトのCSSファイルのURL。

$home = "http:localhost/pukiwiki/";
$default_css = $home."skin/pukiwiki.css.php";

// クッキー名(任意)。変更した場合は setstyle.php の $cookie も同じにする。
$cookie      = "selcss";

// CSS変更前やクッキーが無効な場合にUAに応じCSSを自動切替は省略
// ----------------------------------------------------------------------------

if (phpversion()<"4.1.0") {
$_SERVER = $HTTP_SERVER_VERS;
$_POST   = $HTTP_POST_VARS;
$_COOKIE = $HTTP_COOKIE_VARS;
}


$css_url = explode("|",$_COOKIE[$cookie]);
$selected_css = $css_url[1];
//print_r($_COOKIE);

if ($css_url[0] != "none") {
if (!isset($_COOKIE[$cookie])){
$css_url[0] = $default_css;
echo $default_css;
}
else{
echo "$css_url[0]";
}
}
?>

入れ方とかは前回の日記を参照のこと。