まずは3キャリアに向けてXHTMLを出力する準備。

ポイントはDoCoMo端末にXHTMを出力する際、default_mimetypeを出力してやること。

ini_set関数の前に少しでも出力があるとtext/htmlが送られてしまうので注意。コントローラ部分で「echo “hoge=[{$hoge}]\n” ;」とかデバッグプリントしちゃうことがよくあると思うけど、それがあるとXHTMLとして解釈してくれなくなる。

au端末はヘッダに不備があると「このページは表示できません」というダイアログが出てレンダリングを中止してしまうため、開発中のプレビューには向いていない。

ついでにキャッシュの生存期間を出力している。kwappaは更新頻度の高いコンテンツで使われているので、キャッシュされることにはデメリットのほうが大きくなってしまうので。

ということでsmartyのヘッダ出力関数と、キャリア別に用意したヘッダ部分のテンプレートを掲載する。

<?php
/**
*  Smarty plugin {kwappa_header}
*
*  usage: {kwappa_header [title=$title]}
*
*  キャリア別ヘッダの出力
*
*/
// 実際はもっとcommonな場所でdefineしておくが…。
define("KWAPPA_TERM_PC",  ) ;  // PCで見た場合(テスト用)
define("KWAPPA_TERM_DCM", 1) ;  // DoCoMo
define("KWAPPA_TERM_AU",  2) ;  // au
define("KWAPPA_TERM_SB",  3) ;  // SoftBank
function smarty_function_kwappa_header($value, &$smarty)
{
    // あらかじめコントローラでキャリア種別を取得しておく
    $term_type = $smarty->get_template_vars('term_type') ;

    // キャリアごとにヘッダを出力
    switch ($term_type)
    {
        case KWAPPA_TERM_DCM :
        {
            ini_set("default_mimetype", "application/xhtml+xml") ;
            $header_tpl = "inc/header_dcm.tpl" ;
            break ;
        }
        case KWAPPA_TERM_AU :
        {
            header("Cache-Control: no-cache") ;
            header('Expires: Sun, 10 Jan 1990 01:01:01 GMT');
            header('Pragma: no-cache');
            $header_tpl = "inc/header_au.tpl" ;
            break ;
        }
        case KWAPPA_TERM_SB :
        {
            header("Cache-Control: no-cache") ;
            $header_tpl = "inc/header_sb.tpl" ;
            break ;
        }
        default :
        {
            $header_tpl = "inc/header_dcm.tpl" ;
            break ;
        }
    }
    // タイトルをassign
    if (isset($value['title']))
    {
        $smarty->assign("kwappa_page_title", $value['title']) ;
    }
    // ヘッダを表示
    $smarty->display($header_tpl) ;
}
?>

header_dcm.tpl

<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE html PUBLIC "-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/1.1) 1.0//EN" "i-xhtml_4ja_10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type"       content="application/xhtml+xml; charset=Shift_JIS" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title>{$kwappa_page_title}</title>
</head>
<body>

header_au.tpl

<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE html PUBLIC "-//OPENWAVE//DTD XHTML 1.0//EN" "http://www.openwave.com/DTD/xhtml-basic.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type"       content="application/xhtml+xml; charset=Shift_JIS" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title>{$kwappa_page_title}</title>
</head>
<body>

header_sb.tpl

<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE html PUBLIC "-//J-PHONE//DTD XHTML Basic 1.0 Plus//EN" "xhtml-basic10-plus.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type"       content="application/xhtml+xml; charset=Shift_JIS" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title>{$kwappa_page_title}</title>
</head>
<body>
<pre class="code">&lt;?php
<span class="rem">/**