bootstrap を使ってリニューアル のバックアップ(No.1)

更新


FrontPage

まずは開発用環境を一式整える

php をインストール

一緒に unzip も。

LANG: console
$ sudo aptitude install libapache2-mod-php5 unzip

パーミッションの調整

自分が www-data グループに入っていることを確認した上で、 /var/www 以下を www-data グループの人間が自由にいじれるようにする

LANG: console
$ groups
 osamu ... www-data ...
$ cd /var/www
$ sudo chgrp -R www-data .
$ sudo chmod -R g+r .
$ sudo find . -type d -exec chmod g+wx {} \;

ファイルを展開

LANG: console
$ cd /var/www/html
$ unzip ~/pukiwiki-1_5_0_utf8.zip
$ mv pukiwiki-1_5_0_utf8 pukiwiki
$ cd pukiwiki
$ chgrp -R www-data .
$ chmod -R o-rwx .

ここまでで http://localhost/pukiwiki へアクセス可能

git を導入

LANG: console
$ git init
$ cat > .gitignore
 *~
 *.BAK
 
 .gitignore
 
 attach
 backup
 cache
 counter
 diff
 image
 trackback
 wiki
 ^D
$ 

古いデータを UTF-8 に変換する

古い wiki のデータは EUC で保存されていたので、 これを UTF-8 に変換する必要がありました。

古い wiki のディレクトリで以下のスクリプトを走らせて、 do.sh というファイルを作成して、source コマンドでシェルに食べさせれば良いようでした。

convert.php

LANG:php(linenumber)
<?php

# 与えられた名前のディレクトリの $pattern にマッチする
# ファイルのファイル名(hex2bin でエンコード済み)を 
# EUC-JP から UTF-8 に変換してコールバック関数を呼び出す
function convert_dir(
    $dir_name, 
    $callback,    # function($src, $dest) { ... }
    $pattern = "/ (?!\.)([0-9A-F][0-9A-F]|_)*(\..*)?$/")
{
  $file_names = files_in_dir($dir_name, $pattern);
  
  print "mkdir ${dir_name}_utf8\n";
  foreach ($file_names as $index => $file_name) {
    $src = $dir_name . "/" . $file_name;
    $dest = $dir_name . "_utf8/" . convert_filename($file_name);
    $callback($src, $dest);
  }
}

# 与えられた名前のディレクトリの $pattern にマッチする
# ファイルを列挙した配列を返す
function files_in_dir($dir_name, $pattern)
{
  $file_names = [];
  
  $h_dir = opendir( $dir_name );
  while ( $file_name = readdir( $h_dir ) ) {
    if ( ! preg_match($pattern, $file_name) )
      continue;
  	$file_names[] = $file_name;
  }
  closedir( $h_dir );
  
  return $file_names;
}

# EUC-JP をエンコードしたファイル名を受け取って
# UTF-8 をエンコードしたファイル名にして返す
# ファイル名はエンコードされていない拡張子や "_" を
# 含んでいる場合があるため、それら以外の部分を変換する
function convert_filename($file_name)
{
	preg_match("/ ([ \.]*?)(\..*|)$/", $file_name, $matches); # 必ずマッチする
	$base_name = $matches[1];
	$extention = $matches[2];
	return implode("_", array_map("convert_code", explode("_", $base_name))) . $extention;
}

# EUC-JP をエンコードした文字列を受け取って
# UTF-8 をエンコードした文字列にして返す
function convert_code($s)
{
  return strtoupper( bin2hex( mb_convert_encoding( hex2bin($s), "UTF-8", "EUC-JP" ) ) );
}

#
# 変換処理のバリエーション
#

function adjust_time_stamp($s, $d) 
{
  print "touch -r $s $d\n";
}

function simple_copy($s, $d) 
{
  print "cp $s $d\n";
  adjust_time_stamp($s, $d);
}

function simple_convert($s, $d) 
{
  print "nkf -w $s > $d\n";
  adjust_time_stamp($s, $d);
}

function gzip_convert($s, $d) 
{
  print "gunzip -c $s | nkf -w | gzip > $d\n";
  adjust_time_stamp($s, $d);
}

#
# 各ディレクトリに対して必要な処理を標準出力に表示する
#

convert_dir("attach", simple_copy);

convert_dir("backup", gzip_convert);

convert_dir("cache", simple_convert);
simple_convert("cache/recent.dat", "cache_utf8/recent.dat");

convert_dir("counter", simple_copy);

convert_dir("diff", simple_convert);

convert_dir("wiki", simple_convert);

?>
LANG:console
$ php convert.php > do.sh
$ less do.sh
$ source do.sh

あとは ????_utf8/* を新しい wiki の対応するフォルダにコピーすればOKでした。

スキンをいじる

$ ls skin/
 index.html       pukiwiki.css.php   tdiary.css.php
 keitai.skin.php  pukiwiki.skin.php  tdiary.skin.php
$ grep \\.skin\\. *
 INSTALL.txt:      ※スキン(外見の骨組み)に関する設定項目は skin/スキン名.skin.php の先頭に
 default.ini.php:        define('SKIN_FILE', DATA_HOME . SKIN_DIR . 'tdiary.skin.php');
 default.ini.php:        define('SKIN_FILE', DATA_HOME . SKIN_DIR . 'pukiwiki.skin.php');
 keitai.ini.php:define('SKIN_FILE', DATA_HOME . SKIN_DIR . 'keitai.skin.php');
 pukiwiki.ini.php:// Skin files (SKIN_DIR/*.skin.php) are needed at
$ jed default.ini.php
$ git diff default.ini.php
 diff --git a/default.ini.php b/default.ini.php
 index 2f5259a..3a0b3ac 100644
 --- a/default.ini.php
 +++ b/default.ini.php
 @@ -11,11 +11,7 @@
  /////////////////////////////////////////////////
  // Skin file
 
 -if (defined('TDIARY_THEME')) {
 -       define('SKIN_FILE', DATA_HOME . SKIN_DIR . 'tdiary.skin.php');
 -} else {
 -       define('SKIN_FILE', DATA_HOME . SKIN_DIR . 'pukiwiki.skin.php');
 -}
 +define('SKIN_FILE', DATA_HOME . SKIN_DIR . 'bootstrap.skin.php');
 
  /////////////////////////////////////////////////
  // 雛形とするページの読み込みを可能にする

bootstrap の theme を落としてくる

http://www.bootbundle.com/ から良さそうなのを探して・・・

これとかどうかしら?

http://ironsummitmedia.github.io/startbootstrap-sb-admin-2/pages/index.html

 
$ cd skin/
$ wget https://github.com/IronSummitMedia/startbootstrap-sb-admin-2/archive/v1.0.5.zip
$ unzip v1.0.5.zip
$ mv startbootstrap-sb-admin-2-1.0.5/index.html sb-admin2.html
$ mv startbootstrap-sb-admin-2-1.0.5/* .
$ rm -r startbootstrap-sb-admin-2-1.0.5/ v1.0.5.zip
$ rm LICENSE README.md
$ cp pukiwiki.skin.php bootstrap.skin.php
$ cd ..
$ git add .
$ git commit -m "sb-admin-2 added"

http://localhost/pukiwiki/skin/sb-admin2.html で sb-admin2 のテーマを表示できるようになりました。

pukiwiki.skin.php の

// ------------------------------------------------------------
// Output

以降に sb-admin2.html の内容を移していきます。


Counter: 8506 (from 2010/06/03), today: 1, yesterday: 3