【Drupal】移动手机版主题根据 iPhone Android 客户端自动切换模板

越来越多的网站开始注重“移动互联网”的价值提供手机移动版的网页界面,当然使用 drupal 构建的站点也可以通过根据 iPhone 或者 Android 设备类型来切换主题模板的方法来实现手机移动版站点,只需要为 drupal 单独制作一套或几套适合手机等移动设备浏览的主题模板即可,不建议在同一套主题模板里面或者模块里面大量使用判断语句来分别对应设备输出,当然也不建议使用 PHP 或 API 从底层新建一个独立的站点那样会相当的得不偿失,就失去了我们使用 drupal 的初衷了,另外虽然采用独立的子域名可以共享主站的文件但却不容易共享主站的很多数据,我一直建议大家在使用及开发 drupal 的时候尽量按照 drupal 的方法来即(Using Drupal by Drupal’s Way)所以在你的移动版站点没有看到预期价值的时候完全没有必要投入大的开发成本而把事情变的复杂对于 drupal 几行代码加一个简单的手机移动版主题就足以最低的开发成本应对绝大多数移动用户……

如果是实现简单的 Drupal 根据用户客户端浏览器设备切换移动版非常容易只需要主题模板在站点的 setting.php 配置文件中添加及修改以下代码:

$mobi = strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone') || strpos($_SERVER['HTTP_USER_AGENT'], 'Android');
$conf = array('theme_default' => $mobi ? '移动版主题名称' : '普通版主题名称');

首先从客户端浏览器的 UA 来判断客户端的具体类型,这里只做了 iPhone 和 Android 的判断其他可自行添加,值得一提的是 iPhone Safari 和 Android Chrome 使用的浏览器核心均为 webkit 也是目前对于 HTML5 + CSS3 支持的最好的浏览器核心,在页面渲染上几乎没有差别大可做统一处理。在当前站点设置目录的 setting 控制着当前站点的所有基本设置信息 $conf 可以用来配置一些默认的属性当然包括用户的主题模板。

由于 iPhone 和 Android 内置的 Safari 及 Chrome 浏览器已经具备几乎全部的富因特网功能,所以需要考虑用户也有使用完整版页面的期望及可能也就是为此多数移动版站点也同时提供切换到完整页面的链接,当然 drupal 中也可以通过修改 $user 对象来实现这一需求 Drupal 中用来控制用户当前主题模板的变量字段为 $user->theme 当然可能需要开启用户多主题支持,然后就可以用程序为 $user->theme 赋值来修改用户当前的主题模板核心代码如下:

function setheme_setheme($theme = NULL){
    global $user;
    user_save($user, array('theme'=>$theme));
    drupal_goto('');
}

上面提供的只是核心函数的代码这里用到了一个 drupal 的内置函数 user_save 可以用来向 $user 对象赋值非常方便,当然需要写成一个小的模块才会完整最好用 hook_menu 定义一个菜单路径例如 /setheme/ 这样就可以通过 /setheme/garland 或者 /setheme/minnelli 将打算切换的主题名称传递给这个函数达到通过链接切换主题模板的目的,最好切换完成后使用 drupal_goto 返回到需要的页面即可,当然这样做还有一些问题例如对于缓存的处理……