前の記事 ≪:PHPで複雑な数学式の画像が作れる「PhpMathPublisher」
次の記事 ≫:2009年1月27日 管理人のブックマーク

携帯サイト用inputフィールドのデフォルトIME設定を3キャリア共通で得る関数

2009年01月27日-はてなブックマーク

スポンサード リンク
[PR] 英単語を忘却曲線アプリを使って超効率よく記憶する方法

携帯サイト用inputフィールドのデフォルトIME設定を3キャリア共通で得る関数を作ってみました。
特段、素晴らしいものでもないけれど、作ったのでシェアです。
前提としてUserAgentの判別をしておく必要があります。

$attr = mobileform("hiragana", "docomo"); // istyle="1" が返る
$attr = mobileform("alphabet", "au"); // format="a" が返る
$attr = mobileform("numeric", "softbank"); // mode="numeric" が返る

<input type="text" $attr> のように出力すれば、3キャリアごとに違うinput属性を作ってくれるというもの。softbankがhiragana,alphabetなどになっていて一番分かりやすかったのでsoftbankを基本としています。

<?php

function mobileform($key, $agent
) {
    
$docomo
= array(
        
"hiragana" => "1"
,
        
"alphabet" => "3"
,
        
"numeric"  =>
"4"
    
);
    
$au     
= array(
        
"hiragana" => "*M"
,
        
"alphabet" => "*a"
,
        
"numeric"  =>
"*N"
    
);
    
    if (
$agent == 'docomo') {
// docomo
        
return " istyle=\"".$docomo[$key]."\" "
;
    } elseif (
$agent == "softbank") {
// softbank
        
return " mode=\"".$key."\" "
;
    } elseif (
$agent == "au") {
// au
        
return " format=\"".$au[$key]."\" "
;
    }
}

次に、Smarty プラグインも作ったのでよければお使い下さい。
ファイル名:「function.mobileform.php」として以下内容を Smartyのpluginsディレクトリに設置

<?php

/*
* Usage
*
* 予め、$smarty->assign("mobile_agent", "au"); のような形で判別したキャリアを割り当てておく
* docomoの場合はdocomo、softbankの場合はsoftbank、auの場合はau
*
* テンプレート内で以下のように利用する
*
* <input type="text" name="p1"{mobileform key="hiragana"}> ひらがな
* <input type="text" name="p2"{mobileform key="alphabet"}> アルファベット
* <input type="text" name="p3"{mobileform key="numeric"}>  数字
*/

function smarty_function_mobileform($params, &$smarty
)
{
    
$key = $params['key'
];

    
$docomo
= array(
        
"hiragana" => "1"
,
        
"alphabet" => "3"
,
        
"numeric"  =>
"4"
    
);
    
$au     
= array(
        
"hiragana" => "*M"
,
        
"alphabet" => "*a"
,
        
"numeric"  =>
"*N"
    
);
    
    
$agent = $smarty->get_template_vars('mobile_agent'
);
    
    if (
$agent == 'docomo') {
// docomo
        
return " istyle=\"".$docomo[$key]."\" "
;
    } elseif (
$agent == "softbank") {
// softbank
        
return " mode=\"".$key."\" "
;
    } elseif (
$agent == "au") {
// au
        
return " format=\"".$au[$key]."\" "
;
    }
}


使い方は、上記ソース内コメントに書いておきました。

やっぱり、こういうところは3キャリア共通にしてくれないと、こういう仕組みを作る必要があるので共通にしてくれると助かるなぁと思いますね。今更しょうがないと思いますが。

エージェントの判別は「 PHPで携帯のエージェント判別法 - phpspot」などが参考に出来ます。

Smarty版を使う場合は「ke-tai.org > Blog Archive > 携帯サイトでSmartyを使う場合の注意点」も参考にしてください。

関連サイト:PHPで携帯サイト - phpspot
関連の記事検索:PHP, 携帯, 携帯サイト
スポンサード リンク

By.KJ : 2009年01月27日 21:01 livedoor Readerで購読 Twitterに投稿

間違いの指摘をしていただける方はメール、あるいはTwitter/FBでお願いします(クリック)