smarty を使用するカスタム ビルドのアプリがあります。モバイル デバイス (iPhone、Driods など) をサポートするアプリが必要です。一般的な Web は問題ないように見えます。また、多くの場合、CSS ハックを使用できることもわかっていますが、Smarty でブラウザを検出する方法はありますか?使用されてから、そのリクエストに基づいてテンプレートを提供しますか?
1 種類のテンプレート: -デスクトップおよびラップトップ - スマートフォン用の別のタイプ
smarty を使用するカスタム ビルドのアプリがあります。モバイル デバイス (iPhone、Driods など) をサポートするアプリが必要です。一般的な Web は問題ないように見えます。また、多くの場合、CSS ハックを使用できることもわかっていますが、Smarty でブラウザを検出する方法はありますか?使用されてから、そのリクエストに基づいてテンプレートを提供しますか?
1 種類のテンプレート: -デスクトップおよびラップトップ - スマートフォン用の別のタイプ
SmartyではプレーンPHPを使用できます。
{php}
if (preg_match('/iphone/i', $_SERVER['HTTP_USER_AGENT'])) {
// iphone
} else if (preg_match('/android/i', $_SERVER['HTTP_USER_AGENT'])) {
// android
} // and so on...
{/php}
または、Smartyプラグインを作成することもできます。私はそれがこのようなものであることを思い出します:
function smarty_function_useragent_match($params, $template) {
return preg_match($params['pattern'], $_SERVER['HTTP_USER_AGENT']);
}
Smartyサイトでプラグインの作成に関する詳細情報を探してください。
プレーンな PHP は Smarty 3 では非推奨です。使用しないでください。
Mobile DetectやDetect Mobile Browsersなどのライブラリを使用できます。
plugins
ディレクトリにプラグインを作成しますfunction.detect_mobile.php
:
function smarty_function_detect_mobile($params, &$smarty) {
require_once './libraries/Mobile_Detect.php';
$detect=new Mobile_Detect;
$smarty->assign('is_mobile', false);
if($detect->isMobile()) {
$smarty->assign('is_mobile', true);
}
}
次に、テンプレート ファイルで使用します。
{detect_mobile}
{if $is_mobile}
<link rel="stylesheet" href="css/styles-mobile.css" type="text/css" />
{else}
<link rel="stylesheet" href="css/styles.css" type="text/css" />
{/if}
ユーザーエージェント/デバイスに基づいて一連のテンプレートをロードする方がより良い方法です。たとえば、次のようになります。
$template_dir = '/path/to/default/templates/';
if($mobile_device) {
$template_dir = '/path/to/default/templates/';
}
または次のようにより動的に:
$template_dir = '/path/to/templates/' . $device;
ここで $device をどの程度細かくできるかは、アプリケーションのニーズによって異なります。