2012-06-12 2 views
0

데스크톱 웹 사용을 위해 설계된 사이트가 있지만 모바일 지향 디자인의 버전을 만들고 싶었던 경우 두 가지 버전의 페이지를 매우 비슷한 논리로 유지하지 않으면 어떻게 표시 할 수 있습니까?PHP 기반 사이트는 다른 버전의 사이트를 어떻게 제공합니까?

다른 HTML 구조를 제공하기 때문에 모바일 버전에 다른 CSS를 사용할 수는 없지만 각 페이지에 if 문을 많이 사용하는 것보다 나은 방법이 있습니까?

답변

2

하나의 아이디어는 Smarty 또는 Zend View와 같은 템플릿 시스템을 구현하는 것입니다 (거기에는 많은 것들이 있습니다). 기본 사이트에서 컨트롤러 코드가 모든 논리를 수행하고 템플릿 변수에 값을 할당합니다. 그런 다음 사이트를 보는 데 사용되는 버전 (데스크톱/모바일)에 따라 적절한 템플릿 파일을로드하십시오. 뷰를 렌더링하기 전에 동일한 PHP 로직을 사용하면서 매우 다른 HTML/CSS 규칙과 구조를 가질 수 있습니다.

0

각 페이지에 if 문을 많이 사용하는 것보다 나은 방법이 있습니까?

네, 훨씬 더 좋은 방법이 있습니다. 불행히도, 이것을 염두에두고 사이트를 디자인하면 훨씬 쉬울 것입니다. 템플릿 엔진을 사용하여 PHP 코드와 실제 내용을 완전히 분리 할 수 ​​있습니다. 따라서 새로운 클라이언트 페이지를 변경/추가하려는 경우 매우 간단합니다. 템플릿에 물건을 추가하기 만하면됩니다. 사용자 에이전트 에이전트 문자열 (OS 정보 포함)을 기반으로로드 할 템플릿을 선택할 수도 있습니다. PHP 자체는 데이터베이스/파일/동적 데이터를 얻을 수있는 모든 위치에서 데이터를 가져와야합니다.

밖에있는 많은 template engines for PHP을 살펴보십시오.

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(); 
} 
3

두 가지 버전의 사이트가 있습니다. 하나는 데스크톱 용이고 다른 하나는 휴대 기기 용입니다. 그런 다음 $_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'; 
} 
+0

당신은 두 버전 모두에 대해 동일한 모델을 요구하려는 경우, 그것은 if 문에서로드하는 것이 좋습니다. –

관련 문제