0

デスクトップ Web 用に設計されたサイトを持っていて、モバイル向けのデザインのバージョンを作成したい場合、非常に類似したロジックを持つ 2 つのバージョンのページを維持せずにこれを表示するにはどうすればよいでしょうか。

別の HTML 構造を提供する予定であるため、モバイル バージョンに別の CSS を使用することはできません。各ページで多数の if ステートメントを使用するよりも良い方法はありますか?

4

4 に答える 4

3

サイトには 2 つのバージョンがあり、1 つはデスクトップ用、もう 1 つはモバイル デバイス用です。次に$_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';
} 
于 2012-06-12T23:14:49.343 に答える
2

1 つのアイデアは、Smarty や Zend View などのテンプレート システムを実装することです (世の中にはたくさんあります)。メイン サイトから、コントローラ コードがすべてのロジックを実行し、値をテンプレート変数に割り当てます。次に、サイトの表示に使用されているバージョン (デスクトップ/モバイル) に応じて、適切なテンプレート ファイルを読み込みます。これらは、ビューをレンダリングする前に同じ PHP ロジックを使用しながら、非常に異なる HTML/CSS ルールと構造を持つことができます。

于 2012-06-12T22:39:01.633 に答える
0

以下の例のようなコードを使用して、ユーザーがモバイルバージョンのサイトにリダイレクトするかどうかを判断しました。このサイトは同じモデルファイルとコントローラーファイルを使用していますが、異なるビューファイルを使用しています。

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();
}
于 2012-06-12T22:43:55.697 に答える
0

各ページで多くの if ステートメントを使用するよりも良い方法はありますか?

はい、もっと良い方法があります。残念ながら、これを念頭に置いてサイトを設計していれば、はるかに簡単だったでしょう. テンプレート エンジンを使用して、PHP コードと実際のコンテンツを完全に分離することができます。したがって、いくつかの新しいクライアント ページを変更または追加する場合、これは非常に簡単です。テンプレートに何かを追加するだけです。ユーザーのユーザー エージェント文字列 (OS 情報を含む) に基づいて、読み込むテンプレートを選択することもできます。PHP自体は、データベース/ファイル/動的データが取得される場所からデータを取得することのみを担当します。

そこにある多くのPHP用テンプレートエンジンを見てください。

于 2012-06-12T22:39:33.627 に答える