PHP: 2009年4月アーカイブ
symfonyでモバイルの開発をする際に、とても参考になるテクニック満載のスライドです。
この中でdocomo、au、SoftBankのキャリア別にinputタグの入力モードを切り替えるカスタムヘルパーが紹介されていますが、省略されている以降のソースも組んでみました。
mobInputTagHelper.php
<?php
function mob_input_tag($name, $value=null, $options = array())
{
$carrier = sfContext::getInstance()->getRequest()->getAttribute('carrier');
if(isset($options['input_style']) && $input_style = strtolower($options['input_style']))
{
unset($options['input_style']);
switch (strtolower($input_style))
{
case 'kana':
$options["mode"] = 'hiragana';
if($carrier != 'docomo')
{
$options['istyle'] = '1';
$options['format'] = '*M';
}
else
{
$options['style'] .= ';-wap-input-format:"*<ja:h>";-wap-input-format:*M;';
}
break;
case 'hankana':
$options["mode"] = 'hankakukana';
if($carrier != 'docomo')
{
$options['istyle'] = '2';
$options['format'] = '*M';
}
else
{
$options['style'] .= ';-wap-input-format:"*<ja:hk>";-wap-input-format:*M;';
}
break;
case 'alpha':
$options["mode"] = 'alphabet';
if($carrier != 'docomo')
{
$options['istyle'] = '3';
$options['format'] = '*m';
}
else
{
$options['style'] .= ';-wap-input-format:"*<ja:en>";-wap-input-format:*m;';
}
break;
case 'numeric':
$options["mode"] = 'numeric';
if($carrier != 'docomo')
{
$options['istyle'] = '4';
$options['format'] = '*N';
}
else
{
$options['style'] .= ';-wap-input-format:"*<ja:n>";-wap-input-format:*N;';
}
break;
}
}
return input_tag($name, $value, $options);
}
作成したカスタムヘルパーは、オートロードされるlibディレクトリ内にhelperというディレクトリを作りその下に配置。
lib/helper/mobInputTagHelper.php
ヘルパーをテンプレートで使用するには、カスタムヘルパーを宣言してロードする必要があります。
<?php use_helper('mobInputTag') ?>
これでテンプレート内でヘルパー関数が使用できます。
// ひらがな
<?php echo mob_input_tag('name', '', array('input_style' => 'kana')) ?>
// 半角カナ
<?php echo mob_input_tag('name', '', array('input_style' => 'hankana')) ?>
// アルファベット
<?php echo mob_input_tag('name', '', array('input_style' => 'alpha')) ?>
// 数字
<?php echo mob_input_tag('name', '', array('input_style' => 'numeric')) ?>
注意点
上記ソースでのいくつか注意点です。
- format属性には半角カナの指定方法がないため、'hankana'オプション指定時にはとりあえず「M」(全角文字)を指定するようになっています。
- 入力モード以外のstyle属性指定にも対応させるよう、-wap-input-formatの前にセミコロンがデフォルトで入るようになってますが、他の指定がある時のみセミコロンを付けるようにしても良いかも。
- このソースはFireMobileSimulatorで出力切り替えを確認したのみで、実機での動作は未確認です。
本来、各キャリアの仕様上では、
docomo
- iモードHTMLはistyle属性、iモードXHTMLは-wap-input-formatをstyle属性
au
- format属性
SoftBank
- mode属性
ということになっているようなのですが、一部の機種依存問題などがあったりすることもあり、こういう冗長的な書き方がバッドノウハウとしてベターなようです。
この辺り、詳しくはスライド作者ゆどうふさんのブログの説明が参考になります。
携帯XHTMLでの入力モードのまとめと、ちょっとしたハマりどころについて - ゆどうふろぐ
また、携帯仕様の資料として以下の書籍も参考にさせて頂きました。
携帯サイト コーディング&デザイン高木 悠介
![4797348488](http://ecx.images-amazon.com/images/I/41tNXmdgxpL._SL160_.jpg)
ソフトバンククリエイティブ 2008-12-26
売り上げランキング : 805
おすすめ平均
![star](http://g-images.amazon.com/images/G/01/detail/stars-5-0.gif)
Amazonで詳しく見る by G-Tools