我有一个使用 smarty 的定制应用程序。我需要我的应用程序来支持移动设备(iphone、driods 等...)正在使用然后根据该请求提供模板?
一种模板用于: -台式机和笔记本电脑 另一种用于 -智能手机
我有一个使用 smarty 的定制应用程序。我需要我的应用程序来支持移动设备(iphone、driods 等...)正在使用然后根据该请求提供模板?
一种模板用于: -台式机和笔记本电脑 另一种用于 -智能手机
您可以在 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 网站上查找有关编写插件的更多信息。
更好的方法是加载基于用户代理/设备的模板集,例如:
$template_dir = '/path/to/default/templates/';
if($mobile_device) {
$template_dir = '/path/to/default/templates/';
}
或者像这样更动态:
$template_dir = '/path/to/templates/' . $device;
这里的 $device 可以有多精细,取决于应用程序的需要。
在 Smarty 3 中不推荐使用纯 PHP,不要使用它!
您可以使用库,例如 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}