baserCMSでwp_is_mobileと同じスマホ振り分け関数を実装
2017/04/29
PCかスマホかを振り分けし・判定し、それぞれ違うものを表示させたい
baserCMSには WordPressの wp_is_mobileに相当する関数がない
現在、baserCMSで、レスポンシブデザインのテンプレートを利用して構築したサイトを運営しています。
ですが、一部のコンテンツ、アフィリエイトのバナーに関するものですが、PC用に表示するものとスマホ用に表示するものを分けて処理したいと思いまして、スマホ振り分け(スマホ判定)の関数(WordPressでいうところの「wp_is_mobile」関数)を探しましたが、どうやら baserCMSにはそのような関数は実装されていなさそうだということが分かりました。
baserCMSフォーラムより
http://forum.basercms.net/modules/newbb/viewtopic.php?topic_id=1615&forum=3&post_id=6068#forumpost6068
そこで、自分で作ってみることにしました。
フォーラムでも「自作関数でつくっちゃうのが早いかもしれません」とアドバイスをいただきましたので。
※この記事は、baserCMS 2.1.2で実装の実験を行っています。
baserCMS 3.0.2での実験ではうまく動きませんでしたが、引き続き実験し、動作確認できたら改めて追記いたします。
ヘルパーにスマホ振り分け(スマホ判定)関数を実装
上記フォーラムに、「Viewで使うためにはヘルパーの関数」として作成、とアドバイスいただきましたので、ヘルパー関数の使い方を調べて実装することにしました。
まず、関数を記述します。
記述する対象のファイルは、下記になります。
/app/webroot/themed/{テーマのフォルダ}/helpers/{テーマ名}.php
今回、私は、スケルトンのテーマ「bootstrap_baser」を使っていますので、下記のフォルダ、ファイル名になります。
/app/webroot/themed/bootstrap_baser/helpers/bootstrap_baser.php
※最後に記載している参考サイトに書いてありますが、ファイル名は「bootstrap_baser_baser.php」としなくてもいいようです。どちらでも動きます。
記述する関数は、以下の通りです。
———————-
1 2 3 4 5 6 7 8 9 10 11 |
function isMyMobile() { if (!defined('REQUEST_MOBILE_UA_MY')) { define('REQUEST_MOBILE_UA_MY', '(Mobile|Android|Silk\/|Kindle|BlackBerry|Opera Mini)'); } preg_match('/' . REQUEST_MOBILE_UA_MY . '/i', env('HTTP_USER_AGENT'), $match); if (!empty($match) ) { return true; } return false; } |
———————-
この関数は、下記のファイルにある「isMobile()」という関数を元にしています。
/cake/libs/controller/components/request_handler.php
しかし、「REQUEST_MOBILE_UA_MY」の値は、WordPressから取得しています。
もともとの値では、ほとんどの Android端末が対象外になるためです。
baserCMS 3.0.2の値も確認しましたが、WordPressの値の方がよりベターだと判断しました。
関数の内容としては簡単で、端末のユーザーエージェント(User agent)の値を取得し、それが「REQUEST_MOBILE_UA_MY」で指定されているモバイルのものであるかどうかをチェックしています。
マッチするものがあれば、モバイルであるとして「true」を返し、そうでなければ「false」を返す、という処理です。
そして、分岐処理をしたい Viewのファイルに下記の処理を記述します。
———————-
1 2 3 4 5 |
<?php if ( $bootstrapBaser->isMyMobile() ) : ?> モバイル端末に表示する処理 <?php else: ?> PCブラウザに表示する処理 <?php endif ?> |
———————-
スマホ振り分け(スマホ判定)の関数で、モバイルの場合に「true」を返すようにしていますので、if文で条件にマッチする方にモバイル端末に表示する処理を記述します。
ちなみに、「$bootstrapBaser」部分は、「$BootstrapBaser」などの様に大文字小文字が違っているとエラーになりますので注意してください。
isMobileの関数と違う点
先ほど書きましたが、isMyMobile関数を作成する際の参考にした isMobile関数ですが、if文の中には「$this-<accepts(‘wap’)」の記述もあります。
これは、ユーザーエージェントの情報に頼るだけではなく、モバイル端末の表示情報をください、と言ってきた端末に対しては、その情報を返すための処理...なのではないか、と思っています。
この部分は、「isMobile」関数とは違っています。
そのうち、その部分の確認も行って、必要に応じて対応していこうと思っています。
参考サイト
この記事を書くにあたって、下記のサイトを参考にさせていただきました。
http://wiki.mani-lab.com/index.php?title=%E3%83%86%E3%83%BC%E3%83%9E%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E7%94%A8%E8%AA%9E
http://pops-web.com/main/pops/archives/106
Google Adsenseはモバイルの場合は 1画面に 1個まで
今回のこの関数を作成した理由は、最初の方に少し書きましたが、詳しく書くと Google Adsenseの広告枠の調整のためでした。
Google Adsenseの広告は、モバイル端末で見た場合 1画面に 1個まで
Google Adsenseの規約には上記の規定が存在します。
そのため、私のようにレスポンシブデザインで作られたサイトを運営し、Google Adsenseの広告を貼っている方は注意が必要です。
レスポンシブデザインのテンプレートを使い、Adsenseの枠を 2連続で張っていたり、上部とサイドナビに分けて張っていてもスマホで見た場合は、実は一つの画面に両方出るようになってしまっている、という場合もあるでしょう。
その場合は、Google Adsenseの規約に違反しているとして、警告や利用停止、強制退会などの措置が執られますので、ここで作成したスマホ振り分け(スマホ判定)関数などを作成し、スマホサイトでは Adsenseの広告表示を減らす対応をしておく必要があるでしょう。
かくいう私も、知らず知らずのうちに、というかちゃんと規約を読まずに Adsenseを始めたために規約に違反し、警告が 1回、該当サイトへの Adsenseの提供停止が 1回ありました。今回の記事で説明した「このモバイル広告は 1画面に 1個まで」という規約に対する違反ではありませんが。
警告は警告だけですので指摘事項に従ってすぐに対応すれば問題ないのですが、提供停止は Adsenseの提供が即時で止まります。
指摘事項の対応を行った後に対応の申請し、それを受理してもらって始めて Adsenseの広告提供が復活しますので、最短でも 10日ほどは Adsenseの提供が止まります。
このサイトのようにほとんど収益がないサイトであれば、Adsenseの提供が止まっても大きな問題にはなりませんが、それをアテにされている方には死活問題となるでしょう。
ここでの紹介が何かのお役に立つことがあれば幸いです。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
baserCMSのメルマガで当サイトが紹介されていたようです
baserCMSのメルマガで当サイトが紹介されていたようです。非常にありがたく、嬉しく思っており、今後も baserCMSが少しでも広がっていくお手伝いをさせていただければ、と思っています。
-
baserCMS getCategoryListの使い方について
baserCMS getCategoryListの使い方についての詳細説明です。公式サイトの説明では分かりにくい部分を補足説明しています。
-
baserCMSは 3種類のデバッグモードが用意されています
デバッグモードは3種類あります。デバッグモードにすることでキャッシュされなくなりますので、開発の際には必須の設定です。
-
baserCMS 画面が真っ白になる不具合があった場合の対応の一つ
baserCMSで画面が真っ白になる不具合があった場合の対応方法の説明です。PHPでエラーが起こっている場合がほとんどですが、その対処方法です。
-
baserCMSをほかのサーバ、環境にコピーする場合
baserCMSを他のサーバ、環境にコピーする場合の設定方法について説明します。
-
baserCMS トップページのニュースの部分をメンテナンスしたい場合
トップページのニュース部分をメンテナンスする場合の具体的な方法をサンプルソースを用いて解説しています。
-
ロリポップで baserCMSを利用する際の Basic認証の設置には注意しましょう
ロリポップではBasic認証を設置する際に.htaccessを書き換えますがbaserCMSで利用する処理も上書きされます。その対処方法の解説です。
-
baserCMS サイト管理者権限でファイルアップロードを行う・権限設定の詳細について
Admin権限以外の権限でファイルをアップロード、ページの更新をする際の権限設定の仕方と、権限設定全般についての設定のコツについて解説しています。
-
baserCMS 詳細エリアが入力できない(詳細エリアの WYSIWYGエディタが起動しない)
baserCMS 詳細エリアの WYSIWYGエディタが起動しない場合の解決方法の参考サイトと、それでも直らない場合の最終手段の説明です。
-
baserCMSでオリジナルのデータベースから情報を取得する場合
オリジナルで作ったテーブルから情報を取得し利用する場合はプラグインとして機能を拡張することで対応出来ます。その方法について説明しています。