47日目:User_Agentを調べる
新サイトでは、UAを調べて、その機種にあわせた適切な表示を行います。という訳で、さくっと調べる方法を探したところよく分からず、なんと5時間ほど悪戦苦闘してしまいました(笑)。
いいですか、いまから書く情報は、日本ではまだ誰も書いていない貴重な情報です。心して読んで下さい。
actionの中でブラウザの user_agentを読むには、
$ua = $this->getRequest()->getHttpHeader('User_Agent');
とするんですよ!!
いやーみんさん、書籍1冊分ぐらいの貴重な情報でしたね!
そんな訳で、サイトのTOPにアクセスした場合、携帯の場合は、キャリア名を、PSPなどの場合は右メニューに機種名を表示するようにしてみました。UAみているだけなのでいくらでも偽装できちゃいますが、それで特に問題ないです。
/var/www/podtv/apps/frontend/modules/default/actions/actions.class.php
public function executeIndex() { $ua = $this->getRequest()->getHttpHeader('User_Agent'); if ( preg_match( "/DoCoMo/", $ua)) { return $this->renderText("<html><body>docomoの携帯ですね。対応までしばらくお待ちください</body></html>"); } elseif ( preg_match( "/KDDI/", $ua)){ return $this->renderText("<html><body>KDDIの携帯ですね。対応までしばらくお待ちください</body></html>"); } elseif ( preg_match( "/SoftBank/", $ua)){ return $this->renderText("<html><body>SoftBankの携帯ですね。対応までしばらくお待ちください</body></html>"); } elseif (preg_match( "/iPod/", $ua)){ $this->user_agent = "iPod"; return sfView::SUCCESS; } elseif ( preg_match( "/PSP/", $ua)){ $this->user_agent ="PSP"; return sfView::SUCCESS; } else { $this->user_agent ="PC"; return sfView::SUCCESS; } }
/var/www/podtv/apps/frontend/templates/layout.php
あなたがアクセスしている端末は<br /> <?php echo $user_agent; ?><br /> <?php echo 'referer : <br />'; print_r( $sf_request->getReferer()); ?>
UAとか OSとか、総合的に判定してくれるプラグインとか、どこかにあるのでしょうか?
これをアクションじゃなくて、フィルターに仕込んでやれば、もっとちゃんと使えそうです。