トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

pukiwkiの携帯用skinを設定する

Last-modified: 2013-08-24 (土) 02:14:21 (3898d)
Top / pukiwkiの携帯用skinを設定する

pukiwkiの携帯用skinを設定する

pukiwikiの携帯用skinを設定します。

まあ、基本的には「pukiwiki.ini.php」でアクセスされたブラウザ毎にskinを設定できて、デフォルト設定だと、DOCOMO、SOFTBANKの携帯からは携帯用skinが表示されるようになっています。

1世代前に使っていたN73ではちゃんと携帯用skinで表示されたのですが、現在当方が所有する愛機「E71」では、デフォルトでは携帯用skinで表示してくれなかったんですよ。

というわけで、pukiwikiの仕組みの勉強もかねて、設定してみました。

ちなみに、当方のSIMカードはSOFTBANK契約です。(J-PHONE時代からかわってません)

skinの振り分けの仕組み

pukiwiki.ini.phpの約430行目以降に、各ブラウザ(web-server用語的にはagentと呼ぶらしい)ごとのskinを定義してます。

たとえば、デフォルトのVodafoneの表示設定は以下のようになってます。

$agents = array(

##中略

// Vodafone's embedded browser
// Sample: "J-PHONE/2.0/J-T03"	// 2.0は"ブラウザの"バージョン
// Sample: "J-PHONE/4.0/J-SH51/SNxxxx SH/0001a Profile/MIDP-1.0 Configuration/CLDC-1.0 Ext-Profile/JSCL-1.1.0"
array('pattern'=>'#^(J-PHONE)/([0-9\.]+)#',	'profile'=>'keitai'),

最初の3行はコメントで、最後の1行が有効行です。

意味としては、簡単に言うと、「agent」という変数の「pattern」に「J-PHONE」とその後に「09」があった場合、「profile」に「keitai」をセットしなさい、ってことです。

ってことは、表示できてもよさそうなもんですが、表示できないってことは、

  • E71でアクセスした際の「pattern」は「J-PHONE」ではない

ってことになるんですね~

じゃあ、E71の「pattern」は何なんだ!って話になるわけです。

E71のagentのpatternを調べる

じゃあ、E71の「pattern」を調べてみました。

まずあたりをつけたのは、apacheのアクセスログ。(当サイトはapacheで動作してます)

apacheのアクセスログの設定を調べてみると、実は簡単にagentの情報をログに出力できることが判明しました。

対象ファイルは

  • httpd.conf

です。

うちの設定ファイルでは、変更対象箇所は514行目辺りにありました。

変更内容は以下の通りです。

□変更前
#CustomLog logs/agent_log agent

□変更後
CustomLog logs/agent_log agent

つまり、変更内容は、この行のコメントアウトをとっただけです笑

これで、apacheのログ出力ディレクトリに「agent_log」ってログファイルが出力されるようになります。

へ~、簡単。

そして、さっそくE71より当サイトにアクセスを実施。その結果のログは以下の通り。

SoftBank/1.0/705NK/NKJ001 Series60/3.0 Profile/MIDP-2.0 Configuration/CLDC-1.1

へ~、「SoftBank?」って最初に入るんだ笑

pukiwiki.ini.phpへの設定追加

先にしらべたagentが来たときに、携帯用skinがロードされるように、pukiwiki.ini.phpの480行目付近に

array('pattern'=>'#^(SoftBank)/([0-9\.]+)#',	'profile'=>'keitai'),

を追加します。

これで、携帯からアクセスすると、だいぶシンプルな「''携帯用スキン`'」で表示されます。

E71の場合の追加の設定

先の設定でE71を使って表示させると、文字化けして表示されます。

え〜

と言うわけで、keitai.skin.phpを覗いてみる。

ふむふむ、なるほど。

標準で付属されている「keitai.skin.php」では、携帯の日本語ブラウザを対象としているため、85行目〜92行目あたりで、強制的に文字コードをSJISにエンコードしてるんですね〜

(※うちのPUKIWIKIはUTF8版を使ってます)

これが、E71的にはかなり余計笑

というわけで、87行目〜89行目の文字コードエンコードの部分を「//」でコメントアウトします。

// header('Content-Type: text/html; charset=Shift_JIS');
// $title = mb_convert_encoding($title, 'SJIS', SOURCE_ENCODING);
// $body  = mb_convert_encoding($body,  'SJIS', SOURCE_ENCODING);

ちなみに、E71対象でなければ子の操作はいりません。

とりあえず、これで表示はできるようになった!

やった〜

しかし、ちょっと表示の表現力がしょぼい気が・・・

というわけで、次のテーマはcssの編集かな〜