エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


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」としなくてもいいようです。どちらでも動きます。
 
 
記述する関数は、以下の通りです。
———————-

———————-
 
この関数は、下記のファイルにある「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のファイルに下記の処理を記述します。
———————-

———————-
 
スマホ振り分け(スマホ判定)の関数で、モバイルの場合に「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の提供が止まっても大きな問題にはなりませんが、それをアテにされている方には死活問題となるでしょう。
 
ここでの紹介が何かのお役に立つことがあれば幸いです。

 - baserCMS

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

baserCMS 画面が真っ白になる不具合があった場合の対応の一つ

baserCMSで画面が真っ白になる不具合があった場合の対応方法の説明です。PHPでエラーが起こっている場合がほとんどですが、その対処方法です。

baserCMS ブログカテゴリーの表示を柔軟な形で取得する方法

baserCMSのgetCategoryListではなくもっと柔軟に利用できる方法でブログカテゴリを取得する方法をサンプルコードを用いて説明をしています。

baserCMSで開発環境と公開環境でドメイン、フォルダが変わる場合の不具合

baserCMSで開発環境と公開環境でドメインが変わる場合は URLに絡む設定を変更する必要がありますのでその解説です。

baserCMSは 3種類のデバッグモードが用意されています

デバッグモードは3種類あります。デバッグモードにすることでキャッシュされなくなりますので、開発の際には必須の設定です。

baserCMS getCategoryの使い方について

baserCMS getCategoryの使い方についての説明です。公式サイトの説明ではわかりにくいところを補足説明しています。

baserCMS ID以外のカラムでアソシエーション(連携)をさせる場合

baserCMSで ID以外のカラムでアソシエーション(連携)させる方法と注意点を解説しています。CakePHPとは動作に差異があり注意が必要です。

baserCMS getCategoryListの使い方について

baserCMS getCategoryListの使い方についての詳細説明です。公式サイトの説明では分かりにくい部分を補足説明しています。

baserCMSをほかのサーバ、環境にコピーする場合

baserCMSを他のサーバ、環境にコピーする場合の設定方法について説明します。

baserCMSでオリジナルのデータベースから情報を取得する場合

オリジナルで作ったテーブルから情報を取得し利用する場合はプラグインとして機能を拡張することで対応出来ます。その方法について説明しています。

ロリポップで baserCMSを利用する際の Basic認証の設置には注意しましょう

ロリポップではBasic認証を設置する際に.htaccessを書き換えますがbaserCMSで利用する処理も上書きされます。その対処方法の解説です。