基于 PHP 的网站如何为不同版本的网站提供服务


How do PHP based sites serve different versions of the site?

如果我有一个为桌面Web使用而设计的网站,但我想创建一个具有面向移动设备的设计的版本,我将如何在不维护两个版本的页面的情况下显示它,它们背后有非常相似的逻辑。

我不能只为移动版本使用不同的 CSS,因为我计划提供不同的 HTML 结构,有没有比在每个页面中使用大量 if 语句更好的方法?

您将有两个版本的站点,一个用于桌面,另一个用于移动设备。然后,根据$_SERVER['HTTP_USER_AGENT']重定向用户。

例如:

<?php
// Let's define a function to make it easier to read
function is_mobile(){
 $list = array('Android', 'Iphone'); // Add more yourself
 foreach ($mobile as $agent) {
    if (stripos($agent, $_SERVER['HTTP_USER_AGENT']) {
        // Looks like mobile
        return true; 
      }
  }
  // Assuming desktop by default
  return false;
}
// Then before rendering a template, you'd it approach like this:
if (is_mobile()) {
   require 'mobile.php';
} else {
  require 'desktop.php';
} 

一个想法是实现像Smarty或Zend View这样的模板系统(有很多)。在主站点中,控制器代码将为您执行所有逻辑,并为模板变量赋值。然后,根据用于查看站点的版本(桌面/移动设备),加载相应的模板文件。它们可能具有非常不同的 HTML/CSS 规则和结构,同时在呈现视图之前仍使用相同的 PHP 逻辑。

有没有比在每个页面中使用大量 if 语句更好的方法?

是的,有一个更好的方法。不幸的是,如果您在设计网站时考虑到这一点,那会容易得多。您可以做的是使用模板引擎来保持PHP代码和实际内容完全分离。因此,如果您想更改/添加一些新的客户端页面,这将非常简单。您只需将内容添加到模板中即可。您还可以根据用户的用户代理字符串(包括操作系统信息)选择要加载的模板。PHP 本身只负责从您的数据库/文件/获取动态数据的地方获取数据。

看看那里的许多PHP模板引擎。

我使用类似以下示例的代码来确定用户是否是移动设备,以重定向到网站的移动版本。站点使用相同的模型和控制器文件,但使用不同的视图文件。

if (preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|android)/i', strtolower($_SERVER['HTTP_USER_AGENT']))
    or strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') > 0 
    or ((isset($_SERVER['HTTP_X_WAP_PROFILE']) or isset($_SERVER['HTTP_PROFILE'])))
)
{
    header('location: /m/index.php');
    exit();
}