Zend Frmaeworkで携帯サイトを作る(PCサイトを作った後で)2

| | コメント(0) | トラックバック(0)
前回の続きで、2.携帯サイトの文字コードをShift_jisにする。をやる。

その前にまず、携帯サイト用のindex.phpを作ってみる。



 その前にまず、携帯サイト用のindex.phpを作ってみる。
PC用のindex.phpをコピペしてindex_mobile.phpとか適当な名前にして保存。

ファイル中の/pc/の部分を/mobile/に書き換える。

後は、IndexControllerとそのviewテンプレートをやっぱりPCからコピペで持ってくる。
あとは、httpd.confなどのmod_rewriteの設定をindex.phpからindex_mobile.phpにすると
携帯用モジュールの一番シンプルな動作確認ができる。(この時点ではPCのブラウザで確認)
で、次に出力の文字コードをshift_jisにする。なんでShift_jisにするかっていうと、主要キャリアの文字コード対応状況上、それが一番無難だからだそうです。
詳しくは「携帯サイトの文字コードに気をつける」を参照。

ところで、このブログで書いたかどうかわかんないけど、僕は、開発に関わる文字コードはDBからファイルからすべてutf-8で統一してます。なので、必要な箇所だけ、shift_jsにしたいのです。

まず、viewテンプレートのmetaタグの部分をshift_jisにしてみる。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
に。

で、アクセスしてみると激しく文字化けしてるはず。まだ出力はutf-8でそれをshift_jisとして解釈しようとしてるのだから、あたりまえだね。

出力の文字コードを一括して変換するには、smartyのoutputfilterプラグインを使うと便利。
ということを「携帯サイトをUTF-8で出力するかShift_JISで出力するか」で知る。

こいつを作って。。。
function smarty_outputfilter_convert_encoding ($output, &$smarty) {
    return mb_convert_encoding($output, 'SJIS-WIN', 'UTF-8');
}
SJIJ-WINの理由はここ

smartyで呼び出す。呼び出しタイミングは最終的には以下のようにした。
<?php
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();
require_once('Smarty.class.php');

class Hoge_View_Smarty implements Zend_View_Interface {
    /**
     * Smarty object
     * @var Smarty
     */
    protected $_smarty;
~ 中略 ~
    
    /**
     * filterをロードします。
     *
     * @param string $name 処理するテンプレート
     * @return string 出力結果
     */
    public function loadFilter($filter, $name)
    {
        $this->_smarty->load_filter($filter, $name);
    }
}
という感じに、フィルタをロードするメソッドをSmartyのラッパークラスに追加して。。
index_mobile.phpでさっき作ったメソッドを呼び出す。

~ 前略 ~
$config = new Zend_Config_Ini(dirname(__FILE__). '/config/application.ini', SITE_ENVIRONMENT);
$view = new Hoge_View_Smarty($config);
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
$viewRenderer->setViewBasePathSpec(dirname(__FILE__) . '/modules/mobile/views/templates')
->setViewScriptPathSpec(':controller/:action.:suffix')
->setViewScriptPathNoControllerSpec(':action.:suffix')
->setViewSuffix('tpl');

$view->loadFilter('output', 'convert_encoding');

~ 後略 ~

と、この時点で文字化けがなくなった。
次はセッションかな。


トラックバック(0)

このブログ記事を参照しているブログ一覧: Zend Frmaeworkで携帯サイトを作る(PCサイトを作った後で)2

このブログ記事に対するトラックバックURL: http://hirop0164.s326.xrea.com/mt/mt-tb.cgi/252

コメントする


画像の中に見える文字を入力してください。

ブックマーク

はてなブックマークに追加 Yahoo!ブックマークに登録 del.icio.us に登録 ライブドアクリップに追加 Google Bookmarks に追加

Ajax: 2009年5月: 月別アーカイブ

このブログ記事について

このページは、ぴろしが2009年2月 4日 12:27に書いたブログ記事です。

ひとつ前のブログ記事は「Zend Frmaeworkで携帯サイトを作る(PCサイトを作った後で)」です。

次のブログ記事は「Zend Frmaeworkで携帯サイトを作る(PCサイトを作った後で)3」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。