- []
- []
PRADO ケータイ(モバイル)での利用を考える
PRADO ケータイ(モバイル)での利用 概要
しつこいと思われるかもしれないが、
私はどのフレームワークでもケータイで利用することを考える。
最近ではどのシステムでも携帯電話対応は必須になりつつあると思う。
最近のAJAXフレームワークはケータイでの利用を考える時、
むしろ障害になることの方が多い。
PC用のフレームワークにとって、
JavaScriptレスのプログラミングは考えられないと言うことなのだろう。
PRADOもAJAXで使うことを想定している。
そう言った機能をむしろ取っ払うのがケータイ対応策ということになる。
ここでは、ケータイ対応での中核になるところを
一つ一つ押さえていってみることにする。
PRADO ケータイ(モバイル)での利用 詳細
PRADO 文字コードをSJIS(Shift-JIS)にする
一番問題になる部分なのが、
表示部分がShift-JISに対応しなければならない点。
ただ、どのフレームワークにもフィルタ機能は実装されている。
その付近で変換コードを追加していく形になるだろう。
システムは基本UTF-8で構築する。
(ケータイだからといって内部処理をSJISにしないこと。) データベースもUTF8で作成する。
入出力部分にSJISからUTF8(またはその逆)に変換するコードを記述する。
PRADO 文字コードをSJIS(Shift-JIS)にする 詳細
入力を全自動で全変換という方法は試してみたがどれもうまくいかない。
最終的には$this→username→Textなどでデータ取得するところで、
変換をかけてUTF-8に変換する処理を行った。
PRADO標準のlocalazeシステムも同様のことをやっていたので
間違ってはいないようだ。
出力はシステム起動時のイベントで出力ハンドラを登録し、
ハンドラを作成すればOk。
public function onInit ($param) { parent::onInit($param); $this->getApplication()->attachEventHandler('OnPreFlushOutput', array ($this, 'onPreFlushOutput')); } public function onPreFlushOutput ($sender, $param) { $content = $this->Response->getContents(); $this->Response->clear(); // ・・・(どっかで$contentをecho) }
PRADO Softbank対応
これは問題ないだろう。
入出力分に端末判別処理は追加することになるわけだが、
Softbank3Gケータイの時だけ、
SJIS変換を素通りさせればいい。
PRADO non-AJAX
TFormを利用すると、
自動的にJavaScriptコードが埋め込まれ、
TRequiredFieldValidatorなどを利用すると、
エラーメッセージがSpanタグで記述されている。
JavaScriptコードは放置すれば良いだけと言うことでもあるが、
エラーメッセージはCSSのvisiblility属性で表示、非表示を行っているようで、
(この仕様はどうかと思うが)
ケータイでは問題が無くてもエラーメッセージがでている。
これらを解除する仕組みが必要になる。
Renderが動き出す何処かの段階で、
JavaScriptをカットするメソッドを叩けばいい。
public function onPreRender( $param ) { parent::onPreRender( $param ); $this->setClientSupportsJavaScript( false ); }
PRADO Validation
エラーの表示の自由度は意外に低い。
たくさん発生したエラーのうち、
最初の一つだけ表示したい場合どうにもならなくなる。
http://www.pradosoft.com/forum/index.php/topic,1066.0.html に書いてある内容は、
返信者がどうも勘違いしている気がする。
バリデータ全体のうち最初のエラーメッセージだけ取得したいと読みとってしまったのだろう。
確かにErrorMessage以外(Textまたはbody部)にエラーを記述して、
TValidatorSummaryで取得すると、
最初の一つだけエラーが取得できる。
それって意味あるの?って話だが、
そういうことではない。
最終的にはvalidatorを継承したクラスを作って、
それを利用することにした。
Validatorの数だけ必要なのが難点。
PRADO 絵文字
これの処理は出力部分だけで済む。
データをUTF8からSJISに変換する時に、
3キャリ対応する場合はマップデータに掛け、
3キャリ対応しない場合はそのまま使ってやればいい。
前述の入出力の出力部分で使うonPreFlushOutputに、
絵文字のマップデータに当てる記述を加えればOK。
- ブックマークショートカット