dポイントプレゼントキャンペーン実施中!

宜しくお願い致します。

現在モバイルサイトを構築しており、PHP+Smartyを利用しているのですが、テンプレート内で"if文"を利用した(ユーザーエージェントによる)キャリア振り分けをしたいと考えています。

ロジックとしては、PHPファイル内でユーザーエージェントを取得し、変数に適当な値を入れる。
その変数をassignし、テンプレート内ではき出す際に条件分岐。

と考えているのですが、うまくいきません。

ご教授いただけましたら幸いです。


なお、ソースは下記のようになります。

【carrier.php】※ディレクトリーの指定など一部省略
$agent = $_SERVER['HTTP_USER_AGENT'];
if(preg_match("/^DoCoMo/i", $agent)){
$ca == "i";
}else if(preg_match("/^KDDI\-/i", $agent) || preg_match("/UP\.Browser/i", $agent)){
$ca == "ez";
}else if(preg_match("/^(J\-PHONE|Vodafone|MOT\-[CV]|SoftBank)/i", $agent)){
$ca == "sb";
}else {
$ca == "pc";
}
$tpl->assign('ca','$ca');
$tpl->display('carrier.html');


【carrier.html】
{if $ca == "ez"}ezです{/if}

A 回答 (4件)

あとは…


$tpl->assign('ca','$ca');

$tpl->assign('ca', $ca);
じゃないとezとは入らないですね。
一度構文を復習した方がいいような。
    • good
    • 0
この回答へのお礼

==を=にし、''をはずしたらできました!

''のところは
(php)
$test = mt_rand();
$tpl->assign('rdm','$rdm');

(tpl)
{{assign var=mynum value=1|rand:100}}
{{$mynum}}

とやったら表示されたので、これでもいいのかと思ってました…

勉強不足ですね、ありがとうございました!!

お礼日時:2009/02/13 16:23

$ca == "i";


これが、イコール2つで代入になってないのでは?
    • good
    • 0
この回答へのお礼

御返答ありがとうございます。
イコール1つでもやはりだめですね。。。

smartyを使わずにPHPファイルを読み込んで、$ca==ez;とかの代わりにechoで吐き出せば問題なく表示されるのですよ。

smartyを利用して、テンプレート側で条件を分けたいのですが・・・

お礼日時:2009/02/13 13:25

PEARのNet_UserAgent_Mobile使えばいい。


ついでにテンプレートでこんな表示方式の変更をする?
キャリアごとにテンプレート作って呼び出すテンプレートを
変えた方がいいと思うけど

この回答への補足

ざっくり見てみましたが、おおよそ上のプログラムと変わらないようです。

smartyとの繋ぎがうまくいかないようです。

補足日時:2009/02/13 13:38
    • good
    • 0
この回答へのお礼

御返答ありがとうございます。
さっそくPEARの方を調べてみます。

基本的に3キャリア対応でコーディングしているので、分けたいのはごく一部なんですよ。。

その場合はsmartyでちょこっと書いた方が楽ですね。

お礼日時:2009/02/13 13:29

正規表現のとこがあやしいような気がします。


とりあえず、うちで動いてるコード張っておきます。
厳密にいえばアドレス帯の判定しなければならないみたいです。

$agent=$_SERVER["HTTP_USER_AGENT"];

//DoCoMoの処理
if (strstr($agent,"DoCoMo")){

$career="docomo";
//キャリア設定

//AUの処理
}else if(strstr($agent,"UP.Browser")){

$career="au";

}else if(strstr($agent,"SoftBank") or strstr($agent,"Vodafone") or strstr($agent,"J-PHONE") ){
//そうではなくて、もしユーザーエージェントにSoftBankを含むなら
$career = "softbank";

}else{
$career = "pc";
}
    • good
    • 0
この回答へのお礼

御返答ありがとうございます。

普通にPHPで呼び出して、$career="au";の代わりにecho "ezです";とやれば、キャリアによって"docomoです"、"ezです"のように条件わけできるんですけどね…

smartyを利用して、html内で条件分岐したのです。

お礼日時:2009/02/13 13:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!