デスクトップ Web 用に設計されたサイトを持っていて、モバイル向けのデザインのバージョンを作成したい場合、非常に類似したロジックを持つ 2 つのバージョンのページを維持せずにこれを表示するにはどうすればよいでしょうか。
別の HTML 構造を提供する予定であるため、モバイル バージョンに別の CSS を使用することはできません。各ページで多数の if ステートメントを使用するよりも良い方法はありますか?
デスクトップ Web 用に設計されたサイトを持っていて、モバイル向けのデザインのバージョンを作成したい場合、非常に類似したロジックを持つ 2 つのバージョンのページを維持せずにこれを表示するにはどうすればよいでしょうか。
別の HTML 構造を提供する予定であるため、モバイル バージョンに別の CSS を使用することはできません。各ページで多数の if ステートメントを使用するよりも良い方法はありますか?
サイトには 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';
}
1 つのアイデアは、Smarty や Zend View などのテンプレート システムを実装することです (世の中にはたくさんあります)。メイン サイトから、コントローラ コードがすべてのロジックを実行し、値をテンプレート変数に割り当てます。次に、サイトの表示に使用されているバージョン (デスクトップ/モバイル) に応じて、適切なテンプレート ファイルを読み込みます。これらは、ビューをレンダリングする前に同じ PHP ロジックを使用しながら、非常に異なる HTML/CSS ルールと構造を持つことができます。
以下の例のようなコードを使用して、ユーザーがモバイルバージョンのサイトにリダイレクトするかどうかを判断しました。このサイトは同じモデルファイルとコントローラーファイルを使用していますが、異なるビューファイルを使用しています。
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();
}
各ページで多くの if ステートメントを使用するよりも良い方法はありますか?
はい、もっと良い方法があります。残念ながら、これを念頭に置いてサイトを設計していれば、はるかに簡単だったでしょう. テンプレート エンジンを使用して、PHP コードと実際のコンテンツを完全に分離することができます。したがって、いくつかの新しいクライアント ページを変更または追加する場合、これは非常に簡単です。テンプレートに何かを追加するだけです。ユーザーのユーザー エージェント文字列 (OS 情報を含む) に基づいて、読み込むテンプレートを選択することもできます。PHP自体は、データベース/ファイル/動的データが取得される場所からデータを取得することのみを担当します。
そこにある多くのPHP用テンプレートエンジンを見てください。