2013-01-31 4 views
1

현재 프로젝트는 index.php를 통해 모든 경로를 지정합니다. 그런 다음 $_SERVER['REQUEST_URI']이 무엇인지 확인하고 허용 목록을 확인한 다음 관련 HTML 템플릿을 포함하는 로직을 수행합니다. 이처럼 :모든 페이지에 PHP 헤더를 올바르게 포함하는 방법

<?php 

include("header.html"); 

$requested_page = $_SERVER['REQUEST_URI']; 

if ($requested_page in $whitelist){ 
    $page_title = $requested_page; 
    include ($requested_page . "_controller.php"); 
    include ($requested_page . "_template.html"); 
} 

include ("footer.html") 

?> 

내 문제는 내가 같이, 헤더 템플릿에 $page_title을 사용하고자하는 것입니다 ...

<title><?php echo $page_title?></title>

그러나 분명히 작동하지 않습니다 헤더가 포함되는 경우 때문에 , $ page_title이 설정되지 않았습니다. 누구든지이 문제를 해결할 수있는 방법을 제안 할 수 있습니까? "출력 버퍼링"도움? 그렇다면 어떻게? php를 사용하여 페이지를 생성하는 방식에 중대한 문제가있는 경우 그렇게 말하십시오! 감사합니다

편집 : 조건부 논리는 실제 프로젝트에서 좀 더 복잡해졌으며, 여기서는 많은 부분을 단순화했습니다. 머리말과 꼬리말을 반복해서 포함하고 싶지 않기 때문에 포함되지 않습니다. 가능하다면 나는 모든 논리에서 그들을 지킬 것입니다.

+1

요청한 페이지가 무엇인지 확인한 후 헤더를 포함하지 않는 이유는 무엇입니까? –

+0

수정에 관해서. header.html이 포함 된 후에는 제목을 변경하는 정말 깨끗한 방법은 없습니다. 출력 버퍼를 파싱하지 않아야합니다. – Jim

+0

@ 짐 아마 내가해야 할 일이있을거야. 그러나 실제로 "출력 버퍼를 구문 분석"하는 것이 무엇을 의미하는지 알지 못합니다. PHP가 모든 것을 준비하고 저장하는 것이 좋을 것입니다. 그러면 $ page_title이 * 어딘가에 정의되어있는 한 페이지가 최종적으로 제공 될 때 올바른 결과가 인쇄됩니다. 그게 가능하니?! 그 출력 버퍼링인가? – Lars

답변

3

이를 달성하기 위해 코드 순서를 변경할 수 있습니다 내로드 MVC 라이브러리보기를로드 할 수 있지만이 편리한 될 것 같아요 :

$target = "myfile.php"; 

$data = array(
    'page_title' => 'page title' 
); 

ob_start(); 
if(count($data) > 0) extract($data); 
include_once($target); 
$content = ob_get_clean(); 

echo $content; 

extract() 기능을 사용하면 $data 키를 변수로 사용할 수 있습니다.

+0

고마워요. 실제로 고마워요.하지만 방금 내 질문에 대한 명확한 설명을했습니다.내가 싫어하는 점은이 대답에 (header.html) include가 반복되어야한다는 것입니다. 나는 머리말 및/또는 꼬리말을 논리에서 완전히 지켜서 그것을하는 방법이다는 것을 믿고 싶다! – Lars

+0

@Lars Include를 중복 제거하는 대체 방법을 추가했습니다. – Jim

+0

감사합니다. 두 번째 것은 정말 좋은 아이디어입니다. – Lars

-1

페이지 제목으로 $_POST 또는 $_GET으로 index.php 페이지로 다시 리디렉션 해보세요.

이 값이 설정된 경우 페이지의 처음부터 읽을 수 있습니다.

<?php 
$requested_page = $_SERVER['REQUEST_URI']; 

if ($requested_page in $whitelist){ 
    $page_title = $requested_page; 
    include("header.html"); 
    include ($requested_page . "_controller.php"); 
    include ($requested_page . "_template.html"); 
}else{ 
    //Make sure we include header if page not in white list 
    include("header.html"); 
} 

include ("footer.html") 
?> 

편집 : 사실 당신은 아마 논리를 분리 할 수 ​​그것에 대해 생각하고이 포함

<?php 
$requested_page = $_SERVER['REQUEST_URI']; 
$includes = array(); 
$includes[] = 'header.html'; 
if ($requested_page in $whitelist){ 
    $page_title = $requested_page; 
    $includes[] = $requested_page . "_controller.php"; 
    $includes[] = $requested_page . "_template.html"; 
} 

$includes[] = "footer.html"; 
foreach($includes as $include){ 
    include($include); 
} 
?> 
+0

불필요한 리디렉션을 위해 -1 – eyecatchUp

1

나는이 쓴

<?php 

if (isset($_GET['pagetitle'])){ 
    echo "<html><head><title>".$_GET['pagetitle']."</title></head>"; 
} 

include("header.html"); 

$requested_page = $_SERVER['REQUEST_URI']; 

if ($requested_page in $whitelist){ 
    $page_title = $requested_page; 
    include ($requested_page . "_controller.php"); 
    include ($requested_page . "_template.html"); 
    header('Location: http://www.yoursite.com/index.php?pagetitle='. 
      urlencode('This is the page title'),'"') 
} 

include ("footer.html") 

?> 
0

쉬운

무엇에 대한
<?php 
$requested_page = $_SERVER['REQUEST_URI']; 

$page_title = ""; 

if ($requested_page in $whitelist) $page_title = $requested_page; 

include("header.html"); 

if(!empty($page_title)) { 
    include ($requested_page . "_controller.php"); 
    include ($requested_page . "_template.html"); 
} 

include ("footer.html") 
?> 
0

..?

<?php 
$page_title = $requested_page = $_SERVER['REQUEST_URI']; 
if (!in_array($requested_page, $whitelist)) { 
    header('Location: http://example.com/your404'); 
    exit(0); 
} 

include 'header.html'; 
include "$requested_page_controller.php"; 
include "$requested_page_template.html"; 
include 'footer.html'; 
관련 문제