Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2006-04-05 06:59:25

tefuo
メンバー
登録日: 2006-01-23
投稿: 29

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

こんにちわ
いつもお世話になっております

携帯用のサイトをNP_Mobileで表示させております。
ドコモ、AU、ボーダフォンの3つで表示させるスキンを振り分けたいのですが、どのようにすればいいでしょうか?
知恵をお貸し下さい。
よろしくお願いします。

オフライン

#2 2006-04-05 12:01:05

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

NP_Mobileにはスキン振り分け機能がないので,NP_MobileWithSinglePageをベースに改造するのがいいと思います。
具体的にはevent_InitSkinParseという関数の中でモバイル用のスキンに切り替えているので,そこで_isMobileUAから返ってきた値をベースにスキンを変える,といった感じになると思います。

オフライン

#3 2006-04-06 01:52:20

tefuo
メンバー
登録日: 2006-01-23
投稿: 29

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

Andyさん

思ってたより難しいことだったんですね
PHP勉強してみます

ありがとうございました

オフライン

#4 2006-04-06 02:01:46

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

そんなに難しくないですよ。
たとえばスキン名を決めうちにしてしまうならば

  function event_InitSkinParse($data) {

    // UAがモバイルと設定されたモノに該当するかどうかチェック
    if(!$this->_isMobileUA()) return;
    
    // モバイル用のスキンに切り替え(該当するスキンが存在しなくても処理は続行される)
    $skinName = trim($this->getOption('mobileSkin'));
    if (SKIN::exists($skinName)) {
      $skin =& SKIN::createFromName($skinName);
      $data['skin'] = $skin;
    }
    
  }

  function event_InitSkinParse($data) {

    // UAがモバイルと設定されたモノに該当するかどうかチェック
    $ua = $this->_isMobileUA();
    if(!$ua) return;
    
    // モバイル用のスキンに切り替え(該当するスキンが存在しなくても処理は続行される)
    switch ($ua) {
		case 'DoCoMo' : $skinName = 'ドコモ用スキン'; break;
		case 'J-PHONE' : $skinName = 'ボーダフォン用スキン'; break;
		case 'UP.Browser' : $skinName = 'au用スキン'; break;
	}
    if (SKIN::exists($skinName)) {
      $skin =& SKIN::createFromName($skinName);
      $data['skin'] = $skin;
    }
    
  }

というような程度でもできてしまうと思います。
ちゃんとやろうとするときりがないというところもありますが。

オフライン

#5 2006-04-06 02:15:14

tefuo
メンバー
登録日: 2006-01-23
投稿: 29

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

何度もありがとうございます

プログラミングをしたことが無いのでPHPをいじるとかになるともうお手上げで :oops:
勉強しろと言われればそれまでなのですが。
Andyさんの書いてくれたものを使わせていただきます。

そんなわけで、キャリア別にサイトのアドレスを変えようとも考えたのですが、
現在のアドレスがかなり浸透しており、検索サイト等の再登録も必要になるので煮詰まってました。

話変わりますが、このフォーラムって本当に凄いですよね。
的確な答えがババッっと返信されるので、いつも質問するたびに感動してしまいます。

Andyさんありがとうございました。

オフライン

#6 2006-04-07 14:15:53

tefuo
メンバー
登録日: 2006-01-23
投稿: 29

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

何度も申し訳ありません

NP_MobileからNP_MobileWithSinglePageに入れ替えてみたのですが、携帯からみると正常に表示されませんでした。

NP_MobileWithSinglePageはNP_Mobileのようにhttp://hoge.com/i/というディレクトリではなく、http://hoge.com/にアクセスするとプラグイン内でUAを判断しスキンを変える、という認識でいいんですよね?

やったことは
・index.phpに記入していたUAがモバイル端末であった場合、/i/ディレクトリに移動させる記述を削除
・スキンはNP_Mobileで使っていた携帯用のスキンを流用 スキン名:mobile
・プラグインの管理 → NP_MobileWithSinglePageの編集 → スキン名に"mobile"と入力

以上のことをし、携帯からみてみるとどうやらPC用のスキンで表示されているようで、スキンの選択が正常に行なわれていないようでした。PC用のデフォルトスキンからCSSと画像を抜いたような表示になります。

先日、Andyさんに教えていただいた改造をしていな状態のプラグインを使っても同様になります。
環境がいけないのかと思いあれこれ考えたのですが、思い浮かびませんでした。
ちなみにxreaにて運用してます。

どうすれば正常に表示されるでしょうか?

オフライン

#7 2006-04-07 16:52:44

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

ソースを見ていたら先日の修正だけでは足りないことがわかりました。

が,それは置いておいて,まずは携帯でちゃんと見られるようになることが先決ですね。

event_InitSkinParseの先頭に次のようなコードを置いてみてください

	if (requestVar('debug') == '1') {
		echo serverVar('HTTP_USER_AGENT') . '<br />';
		echo serverVar('SCRIPT_FILENAME') . '<br />';
		echo $this->getOption('UserAgent') . '<br />';
		echo $this->getOption('mobileSkin') . '<br />';
	}

それから,通常のURLに ?debug=1 と付けてアクセスしてみてください。
頭に表示されている内容はどうなっているでしょうか。

オフライン

#8 2006-04-07 17:26:13

tefuo
メンバー
登録日: 2006-01-23
投稿: 29

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

Andyさん 返信ありがとうございます。

コードを付け加えアドレスに?debug=1を加えてみると先頭に

DoCoMo/2.0 ISIMO302(c100;TB;W24H16)
/サイトのアドレス/index.php
DoCoMo|J-PHONE|UP\.Browser
mobile

と表示されています。

最後の'mobile'ってもしかして・・・スキン名でしょうか :oops:
だとしたらスキンの書き間違えっぽいですね。
すみません

オフライン

#9 2006-04-07 17:49:03

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

tefuo さんの発言:

最後の'mobile'ってもしかして・・・スキン名でしょうか :oops:
だとしたらスキンの書き間違えっぽいですね。
すみません

そうじゃないです。設定を確認しているだけです。

次に_isMobileUAという関数を次のものに置き換えてください。

  function _isMobileUA() {
    global $DIR_NUCLEUS;
    
    if($this->isMobile == 'unset') {
      $ua = serverVar('HTTP_USER_AGENT');
      $path = serverVar('SCRIPT_FILENAME');
      if (strstr($path, $DIR_NUCLEUS) === FALSE) {
		 $this->isMobile = preg_match('/' . $this->getOption('UserAgent') . '/i', $ua, $match) ? $match[0] : FALSE;
	  } else {
		 $this->isMobile = FALSE;
	  }
    }
    return $this->isMobile;
  }

さらに,先ほど追加したifブロックの最後に

		echo $this->_isMobileUA(). '<br />';

を追加してみてください。

オフライン

#10 2006-04-07 18:14:02

tefuo
メンバー
登録日: 2006-01-23
投稿: 29

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

コードをいれてみました

DoCoMo/2.0 ISIM0303(c100;TB;W24H16)
/サイトのアドレス/index.php
DoCoMo|J-PHONE|UP\.Browser
mobile<br />DoCoMo<br />

と先頭に表示されています。
でも、まだPCのスキンのです。
もしかしてUTF-8だからでしょうか?

オフライン

#11 2006-04-07 19:12:01

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

tefuo さんの発言:

と先頭に表示されています。
でも、まだPCのスキンのです。
もしかしてUTF-8だからでしょうか?

すみません。まだどこが原因だか調べている段階です。
一足飛びにしてしまうと,どこで問題が起きているのか分からないのです。

次は

  function event_InitSkinParse($data) {

の行を

  function event_InitSkinParse(&$data) {

にしてみてもらえますか。

オフライン

#12 2006-04-07 19:39:31

tefuo
メンバー
登録日: 2006-01-23
投稿: 29

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

Andyさんホントすみません

変更してみましたが変化はありませんでした。

表示される大部分の日本語がUTF-8、SHIFT-JIFともに"?"で表示されています。
また、/i/ディレクトリにNP_Mobileのindex.phpがあり、これを携帯で表示させると3行目位で途切れてしまっています。

他のプラグインなどが原因なのかな?と探っています。

オフライン

#13 2006-04-08 00:23:54

NKJG
メンバー
From: あなたのうしろ
登録日: 2005-03-28
投稿: 56
ウェブサイト

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

プラグインのご利用ありがとうございます。
作者ですが、残念ながら僕にはいまのところ原因がわかりません……申し訳ない話ですが……。

Andyさん汚いソースの面倒見てくださってありがとうございます。
引数に&が欠落してる件はまったく気づいてませんでした。おかげさまで修正できました。

オフライン

#14 2006-04-10 01:51:40

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

tefuoさん,返信遅くなってすみません。

今度はevent_InitSkinParseの中の

    if (SKIN::exists($skinName)) {
      $skin =& SKIN::createFromName($skinName);
      $data['skin'] = $skin;
    }

    if (SKIN::exists($skinName)) {
      $skin =& SKIN::createFromName($skinName);
      $data['skin'] = $skin;
	  if (requestVar('debug') == '1') {
		echo $skin->getID(). '<br />';
	  }
    }

としてみてください。そして,前と同じように?debug=1を加えてアクセスしてみてください。

オフライン

#15 2006-04-11 17:30:46

tefuo
メンバー
登録日: 2006-01-23
投稿: 29

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

Andyさんありがとうございます。
返信に気がつくのが遅れてしまい申し訳ありませんでした。

上記コードに入れ替え、アドレスに?debug=1を加えると

DoCoMo/2.0 ISIM0303(c100;TB;W24H16)
/サイトのアドレス/index.php
DoCoMo|J-PHONE|UP\.Browser
mobile
DoCoMo
16

のように表示されます。
正直もう諦めてました。

オフライン

#16 2006-04-12 00:50:24

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

どうも,ここまでおかしなところは全くありませんね。
もしかすると文字コード変換の問題かも,という気がしてきました。

mobileスキンに適当な文字を追加してみて,表示が変わるかどうか調べてみてもらえますか?

オフライン

#17 2006-04-12 13:10:39

tefuo
メンバー
登録日: 2006-01-23
投稿: 29

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

ありがとうございます

新たに単純なスキンをつくり表示させてみましたが、以前と同じようにデフォルトのPCサイト用スキンが表示されています。
先日、教えていただいたデバッグコードのスキンナンバーの表示が16から17になったのでスキンは変更されているはずなのですが・・・。

iモードエミュレータでソースを確認したところPCサイトと同じようにUTF-8が宣言されています。
モバイル用スキンでshift-jisを宣言してみましたがUTF-8になってしまいます。
しかし、以前設置したNP_Mobile用の/i/ディレクトリを見ると、文字化けしてますがshift-jisで表示されています。

どちらもNP_MobileSinglePageを通すと文字化けしている感じです。

オフライン

#18 2006-04-12 17:25:32

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

やっぱり,スキンが適用されていないんですかねえ。
今度はevent_PreSkinParseに

	  if (requestVar('debug') == '1') {
		echo $data['skin']->getID(). '<br />';
	  }

と加えてみてもらえますか。

オフライン

#19 2006-04-12 18:11:20

tefuo
メンバー
登録日: 2006-01-23
投稿: 29

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

Andyさん 何度もありがとうございます。

上記コードを加えると以下のようになります

DoCoMo/2.0 ISIM0301(c100;TB;W24H16)
/サイトのアドレス/index.php
DoCoMo|J-PHONE|UP\.Browser
mobile
DoCoMo
17
17

先日、このプラグインを使うためNucleusを3.22にUPしたのですが、それがうまくいっていないとか考えられませんか?
失敗してるために、このプラグインで使う関数を扱えないのではないかとふと思いました。

あと、気づいたことはデフォルトでUTF-8を使っているのですが、NP_MobileSinglePageを使い携帯端末からみた表示は、PC上で強制的にShift-jisをUTF-8にしたときと同じ文字化けを起こしていることです。

だからといって原因がわかるわけではないのですが。

すみません

オフライン

#20 2006-04-12 18:17:53

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

スキンは変更されているということですね。
PHPのmbstringの設定はどうでしょう。無理やりUTF-8で出力するようになってませんか?

オフライン

#21 2006-04-12 18:28:12

tefuo
メンバー
登録日: 2006-01-23
投稿: 29

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

申し訳ないです
mbstringとは、どこにあるのでしょうか?

オフライン

#22 2006-04-13 09:47:07

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

<?php phpinfo(); ?>

という内容のPHPを作って実行し(PCでやってください),その中のmbstringという項目を調べてください。

オフライン

#23 2006-04-13 18:55:17

tefuo
メンバー
登録日: 2006-01-23
投稿: 29

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

このようになっていました

Multibyte Support     enabled
Multibyte string engine     libmbfl
Multibyte (japanese) regex support     enabled
Multibyte regex (oniguruma) version     3.7.1

mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.

Directive    Local Value    Master Value
mbstring.detect_order    auto    auto
mbstring.encoding_translation    Off    Off
mbstring.func_overload    0    0
mbstring.http_input    auto    auto
mbstring.http_output    pass    pass
mbstring.internal_encoding    EUC-JP    EUC-JP
mbstring.language    Japanese    Japanese
mbstring.strict_detection    Off    Off
mbstring.substitute_character    no value    no value

オフライン

#24 2006-04-13 19:57:23

Andy
メンバー
登録日: 2004-03-18
投稿: 1,495
ウェブサイト

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

internal_encodingがEUC-JPになっているところだけちょっと怪しいですね(今回の原因ではないような気がしますが)。
念のため,.htaccessファイルに

php_value mbstring.internal_encoding UTF-8

という行を付け加えた方がいいと思います。

オフライン

#25 2006-04-13 21:35:46

tefuo
メンバー
登録日: 2006-01-23
投稿: 29

Re: NP_Mobile キャリア別にスキンを振り分ける方法について

Andyさん お付き合いいただいてありがとうございます。

.htaccessに上記コードを入れたところ文字化けが無くなりました!!やった
ですが、PC用のスキンがまだ適用されており、モバイル用スキンになっていません。

xreaだからなんでしょうか

オフライン

Board footer