hampom TODAY

「TODAY」ってタイトルが付くブログが作りたいな、と思った10分後に作ったブログ。

Codeigniter で超簡易的なモバイルページ出力をする

コメントする »

モバイルページ作ってますかー!

私は「いや、これモバイルっていうか…」というほどのページしか作ってこなかったので「簡易」となっております。どこがどう簡易なのか、というと「絵文字対応してない」「セッションとか使わない」という超がつくほど簡易的なものです。

やっている事は

  • ビューの読み込みを切り替える
  • 文字コードを変換する
  • 全角文字を半角文字に変換する

といった程度のものです。

私は、これらを実現するために フック(フック – フレームワークコアの拡張) を使っています。

簡易的なものなので、ちゃっちゃと行きましょう。
まずは application/config/hook.php に設定。

$hook['post_controller_constructor'][] = array(
                                'class'    => 'Mobile',
                                'function' => 'view_set',
                                'filename' => 'Mobile.php',
                                'filepath' => 'hooks'
                                );

$hook['display_override'][] = array(
                                'class'    => 'Mobile',
                                'function' => 'display',
                                'filename' => 'Mobile.php',
                                'filepath' => 'hooks'
                                );

hook に追加しているのは、2点。 post_controller_constructor というポイントでは、 view の読込先ディレクトリを書き換え、 display_override では文字コードの変換などを行っています。

呼びだされる、 Mobile.php は /application/hooks/ に保存します。

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Mobile {

	function Mobile()
	{
    $this->ci =& get_instance();
    $this->ci->load->library('user_agent');
	}

  function view_set()
  {
    if ($this->ci->agent->is_mobile())
    {
      $this->ci->load->_ci_view_path .= 'mobile/';
    }
  }

  function display()
  {
    if ($this->ci->agent->is_mobile())
    {
      $buffer = $this->ci->output->get_output();

      $buffer = preg_replace("/\n/", '', $buffer);
      $buffer = mb_convert_kana($buffer, 'aks', "UTF-8");
      $buffer = mb_convert_encoding($buffer, 'SJIS', $this->ci->config->item('charset'));

      header("Content-type: text/html; charset=Shift_JIS;");
      echo $buffer;
    }
    else
    {
      echo $this->ci->output->get_output();
    }
  }

}

ユーザエージェントクラスを呼び、パソコンからのアクセスか、モバイルからのアクセスかの判断を行っています。モバイルからのアクセスと判断されると、既存の view ディレクトリに mobile という指定を付け加えます。コントローラーで以下のように「home」を指定した場合、

  $this->load->view("home");

  • パソコンの場合:
    • /application/views/home.php
  • モバイルの場合:
    • /application/views/mobile/home.php

それぞれ読み込まれるようになります。

さらに、出力には以下の通り変換を行っています。

      $buffer = preg_replace("/\n/", '', $buffer);
      $buffer = mb_convert_kana($buffer, 'aks', "UTF-8");
      $buffer = mb_convert_encoding($buffer, 'SJIS', $this->ci->config->item('charset'));

改行をなくし、全角の英数字・カタカナを半角に変換、文字コードを Shift-JIS に変換し出力しています。
徐々に機能的にも増強していきたいなあ、と思っております m(_._)m

投稿者: hampom

2010年 3月 5日 at 12:51 PM

カテゴリー: 未分類

コメントする

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

%s に接続中

フォロー

Get every new post delivered to your Inbox.

現在332人フォロワーがいます。