目次

DokuWikiを携帯電話からの閲覧に対応させる

[ Category : .htaccess | DokuWiki | 携帯サイト構築 ] 2010年01月14日 12:58
 DokuWikiをはじめ多くのWikiは、PCから利用することを前提に作られていて、基本的に携帯電話から閲覧することはあまり考えられていません。普通はそれで問題ないと思いますが、ウチの場合、現というか旧というか、このブログを引き継ぐ関係で、ブログ記事を携帯電話からも閲覧できるようにしておきたいわけです。そこで、DokuWikiの記事を携帯電話から閲覧することができるように改造してみました。

概要

 PCからのアクセスと携帯電話からのアクセスは.htaccessで振り分けることができます。ならば、「PC用テンプレート」と「携帯用テンプレート」の2つを作成しておき、.htaccessでテンプレートを切り替えればいいじゃん!という発想から改造を思いつきました。

 DokuWikiは

という相関関係のもとに動いていますので、これらのファイルセットを「携帯用」として複製&改変しておき、.htaccessでどちらのファイルセットを使うかを振り分けようというわけです。

DokuWikiをケータイ対応させるための手順

その1 必要なファイルを複製する

 携帯電話用のファイルセットとして必要なものは、次の3つです。

 これら3つのファイルを複製し、適当にリネームします。ここでは末尾に「_i」を付け、元ファイルと同じディレクトリに設置するという設定で話を進めます。

その2 複製したファイルを編集する

 doku.phpがinc/init.phpを呼び出し、inc/init.phpがconf/local.phpを呼び出しています。従って、doku_i.phpがinc/init_i.phpを呼び出し、inc/init_i.phpがconf/local_i.phpを呼び出すように、それぞれのファイルを編集します。

その3 携帯電話用のテンプレートを作成する

 lib/tpl/内に、携帯電話用のテンプレートを保存するためのフォルダを作成し、その中に「main.php」という名前でテンプレートファイルを作成します。ウチでは、次のものを使っています。

<html>
<?php if (file_exists(DOKU_PLUGIN.'displaywikipage/code.php')) include_once(DOKU_PLUGIN.'displaywikipage/code.php'); ?>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Studio-ARZ</title>
</head>
<body bgcolor="#FFFFFF">
<div style="font-size: 50%; color: #000;">
	<?php tpl_content(false)?>
</div>
</body>
</html>

 携帯電話用なんで、非常にシンプルですねw。スタイルシートもナシですし、body内はtpl_content()関数を設置しただけです。

その4 conf/local_i.phpを編集する

 conf/local_i.php内に、先ほどつくった携帯電話用のテンプレートを呼び出すように「$conf['template'] = '';」の部分を編集します。この行がなければ作成します。

その5 .htaccessを編集する

 これは下手するとサーバ内の全てのアクセスがおかしくなりますので、きちんと理解できる人のみ自己責任で実践してください!! ウチの.htaccessの内容を載せておきます。参考にされてください。

RewriteEngine on
 
# RewriteBase /
 
# DoCoMo
RewriteCond %{HTTP_USER_AGENT} DoCoMo
RewriteRule ^$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} DoCoMo
RewriteRule ^index.html$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} DoCoMo
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) doku_i.php?id=$1  [QSA,L]
 
# Softbank
RewriteCond %{HTTP_USER_AGENT} J-PHONE
RewriteRule ^$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} J-PHONE
RewriteRule ^index.html$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} J-PHONE
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) doku_i.php?id=$1  [QSA,L]
 
RewriteCond %{HTTP_USER_AGENT} Vodafone
RewriteRule ^$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} Vodafone
RewriteRule ^index.html$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} Vodafone
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) doku_i.php?id=$1  [QSA,L]
 
RewriteCond %{HTTP_USER_AGENT} SoftBank
RewriteRule ^$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} SoftBank
RewriteRule ^index.html$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} SoftBank
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) doku_i.php?id=$1  [QSA,L]
 
# AU KDDI
RewriteCond %{HTTP_USER_AGENT} KDDI
RewriteRule ^$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} KDDI
RewriteRule ^index.html$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} KDDI
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) doku_i.php?id=$1  [QSA,L]
 
RewriteCond %{HTTP_USER_AGENT} UP.Browser
RewriteRule ^$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} UP.Browser
RewriteRule ^index.html$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} UP.Browser
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) doku_i.php?id=$1  [QSA,L]
 
# DDI Pocket
RewriteCond %{HTTP_USER_AGENT} DDIPOCKET
RewriteRule ^$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} DDIPOCKET
RewriteRule ^index.html$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} DDIPOCKET
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) doku_i.php?id=$1  [QSA,L]
 
# WILLCOM
RewriteCond %{HTTP_USER_AGENT} WILLCOM
RewriteRule ^$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} WILLCOM
RewriteRule ^index.html$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} WILLCOM
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) doku_i.php?id=$1  [QSA,L]
 
# WILLCOM
RewriteCond %{HTTP_USER_AGENT} PDA
RewriteRule ^$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} PDA
RewriteRule ^index.html$ doku_i.php?id=bliki:index_i.html [QSA,L]
RewriteCond %{HTTP_USER_AGENT} PDA
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) doku_i.php?id=$1  [QSA,L]
 
# PC
RewriteRule ^_media/(.*) lib/exe/fetch.php?media=$1  [QSA,L]
RewriteRule ^_detail/(.*) lib/exe/detail.php?media=$1  [QSA,L]
RewriteRule ^_export/([^/]+)/(.*) doku.php?do=export_$1&id=$2  [QSA,L]
RewriteRule ^$ doku.php  [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) doku.php?id=$1  [QSA,L]

 ちなみに、ウチのサイトの場合は、「bliki/index_i.html」に、携帯用のトップページファイルを置いていますので、携帯からはそこに転送させるようにしているわけです。

問題点と今後の課題

 とりあえず、これで携帯電話からDokuWikiサイトを閲覧することができるようになりましたが、文字コードがUTF-8であるために、古いタイプの携帯電話では文字化けすると思われます。できれば、文字コードをShift-JISに変換して表示させてやりたいところですが、それにはtpl_content()関数そのものを改造しないといけないため、躊躇しています(…なんて言いつつ、やるんでしょうねww)。

 また、そのままでは画像ファイルが大きすぎて携帯電話では表示されません。そこもうまく対応させることができたら完璧ですね!

Discussion