元フリーエンジニアライフ

Ruby on Rails とか MovableType とかAWSやってるフリーランスウェブエンジニアの記録でした。現在は法人成りしてIT社長。

MovableType で.php書き出しをしてPC/スマホ/ガラケーの出し分けをする

DynamicMTMLとか使えない・使いたくないケースで。単にPHPUAの判別してるだけです。

ただしPHPだけではプレビューできないので、拙作のmt-plugin-httpuseragentと組み合わせてます。

案件で使ってるので問題があれば修正。

UserAgent判定PHP テンプレートモジュール

<?php 
    $user_agent = $_SERVER['HTTP_USER_AGENT'];

    $ua = 'pc';

    $docomo = 0;
    $au = 0;
    $softbank = 0;
    $ios = 0;
    $android = 0;
    $blackberry = 0;
    $windowsmobile = 0;

    $tablet = 0;
    $smartphone = 0;
    $featurephone = 0;
    $generic = 0;

    # http://maxfactory.biz/blog/2011/05/27/device_f/

    if(preg_match("/DoCoMo/", $user_agent)){
        $ua = 'docomo';
        $docomo = 1;
        $featurephone = 1;
    }else if(preg_match("/UP\.Brower|KDDI-/", $user_agent)){
        $ua = 'au';
        $au = 1;
        $featurephone = 1;
    }else if(preg_match("/J-PHONE|Vodafone|SoftBank/", $user_agent)){
        $ua = 'softbank';
        $softbank = 1;
        $featurephone = 1;
    }else if(preg_match("/iPhone/", $user_agent)){
        $ua = 'iphone';
        $ios = 1;
        $smartphone = 1;
    }else if(preg_match("/iPad/", $user_agent)){
        $ua = 'ipad';
        $ios = 1;
        $tablet = 1;
    }else if(preg_match("/Android/", $user_agent)){
        $android = 1;
        if(preg_match("/Mobile/", $user_agent) && !preg_match("/SC-01C/", $user_agent)){
            $ua = 'androidmobile';
            $smartphone = 1;
        }else{
            $ua = 'androidtablet';
            $tablet = 1;
        }
    }else if(preg_match("/BlackBerry/", $user_agent)){
        $ua = 'blackberry';
        $blackberry = 1;
        $smartphone = 1;
    }else if(preg_match("/IEMobile/", $user_agent)){
        $ua = 'iemobile';
        $windowsmobile = 1;
        $smartphone = 1;
    }else{
        $generic = 1;
    }
?>

利用方法(メインページ インデックステンプレート)

<mt:if name="preview_template" rtrim="1">
    <mt:IfHttpUserAgent smartphone="1" rtrim="1">
        <$MTInclude module="スマホ-トップページ"$>
    <mt:Else>
        <mt:IfHttpUserAgent featurephone="1" rtrim="1">
            <$MTInclude module="携帯-トップページ"$>
        <mt:Else>
            <$MTInclude module="PC-トップページ"$>
        </mt:IfHttpUserAgent>
    </mt:IfHttpUserAgent>
<mt:else>
    <$MTInclude module="UserAgent判定PHP" cache="1"$>
    <?php if ($smartphone): ?>
        <$MTInclude module="スマホ-トップページ"$>
    <?php else: ?>
        <?php if ($featurephone): ?>
            <$MTInclude module="携帯-トップページ"$>
        <?php else: ?>
            <$MTInclude module="PC-トップページ"$>
        <?php endif ?>
    <?php endif ?>
</mt:if>
  • スタティックパブリッシング
  • 書き出し先 index.php