2012-01-19 3 views
0

PHP에서는 대부분 페이지를 실행해야하지만 해당 페이지의 출력에 항목을 삽입해야하는 경우가 있습니다.문서가 실행 된 후 페이지로 출력 삽입

출력 버퍼링이 도움이 될 수 있다고 생각하지만 상황에 맞게 구현하는 방법을 찾지 못했습니다.

내 코드는 다음과 같습니다 : 사이트에

//this document is part of a global functions file 

function pageHeader(){ 

    //I'm using $GLOBALS here because it works, however I would really rather a better method if possible 
    $GLOBALS['error_handler'] = new ErrorHandler(); //ErrorHandler class sets a function for set_error_handler, which gets an array of errors from the executed page 

    require_once($_SERVER['DOCUMENT_ROOT'].'/sales/global/_header.php'); 

    //I would like the unordered list from ->displayErrorNotice() to be displayed here, but if I do that the list is empty because the list was output before the rest of the document was executed 
} 

function pageFooter(){ 

    $GLOBALS['error_handler'] ->displayErrorNotice(); //this function displays the errors as an html unordered list 

    include($_SERVER['DOCUMENT_ROOT']."/sales/global/_footer.php"); 
} 

대부분의 문서가이 문서를 포함하고 pageHeader()pageFooter() 기능을 사용합니다. 내가 성취하려고 노력하는 것은 _header.php가 포함 된 시점에 HTML리스트에 PHP 생성되지 않은 에러리스트를 넣는 것이다. 문서를 실행 한 후 바닥 글에 넣으면 의도 한대로 작동하도록 목록을 가져올 수 있지만 그 위치는 원하지 않습니다. JS로 옮길 수는 있지만 PHP 솔루션이 있어야한다고 생각합니다.

그때 에러 목록을 넣어 정규식에 의해 버퍼를 검색하고 ob_start()위한 콜백 함수가 용액 것이다 삽입 여부 궁금

UPDATE.

업데이트 2 나는이 문제를 해결했으며 내 대답은 아래에 있습니다. 내가 허용 될 때 2 일 안에 받아 들일 것입니다.

답변

1

마지막으로 해결했습니다. 핵심은 출력을 버퍼링하고 주어진 html 조각에 대한 버퍼를 검색하여 순서가 지정되지 않은 목록으로 대체하는 것이 었습니다.

내 구현은 다음과 같다 :

function outputBufferCallback($buffer){ 

    return str_replace("<insert_errors>", $GLOBALS['error_handler']->returnErrorNotice(), $buffer); 
} 

function pageHeader(){ 

    ob_start('outputBufferCallback'); 
    //I'm using $GLOBALS here because it works, however I would really rather a better method if possible 
    $GLOBALS['error_handler'] = new ErrorHandler(); //ErrorHandler class sets a function for set_error_handler, which gets an array of errors from the executed page 

    require_once($_SERVER['DOCUMENT_ROOT'].'/sales/global/_header.php'); 

    echo '<insert_errors>'; //this snippet is replaced by the ul at buffer flush 
} 

function pageFooter(){ 

    include($_SERVER['DOCUMENT_ROOT']."/sales/global/_footer.php"); 
    ob_end_flush(); 
} 
0

이 말이 맞다면 계산 된 코드/오류를 머리글과 바닥 글에 삽입하려고합니다. 나는 오류가 합산되고/페이지의 맨 끝에 요약되어 페이지 바닥 글 다음에 완료 될 것이라고 추측합니다.

이것이 사실이라면 나는 어쨌든 순수한 PHP로 이것을 할 수 없다고 생각한다. 페이지를 한 번만 실행할 수 있으며 두 번 뒤로 이동할 수 없습니다. 당신이 할 수있는 것은 바닥 글 다음에 요소를 생성하고 자바 스크립트를 사용하여 그것을 표시하고자하는 영역으로 이동시키는 것입니다. 이것은 내가 생각할 수있는 가장 쉬운 방법 일 것입니다. jquery를 사용하면 쉽게이 작업을 수행 할 수 있습니다.

내가 곧 정상 궤도에 오전 만약 내가 더 설명 할 수있는,하지만 난 아직 요구하는지 100 % 확실하지 않다 ...

당신이 사용하는 것이 JQuery와 명령이 .appendTo()이다.

+0

네, 당신은 제대로 이해된다. 사실, jQuery를 사용하면 목록을 원하는 위치로 이동하는 것이 쉽지만 가능한 경우 순수한 PHP 솔루션을 선호합니다. –

+0

이것은 PHP 이해 범위를 약간 넘어서는 것입니다. 그러나 계산 된 시점보다 먼저 문서에서 요소를 구현할 수 없다고 확신합니다. 어떤 종류의 오류를 캡처하고 있습니까? DOM에 커밋하기 전에 이러한 오류를 캡처 할 수 있습니까? – VictorKilo

+0

내가 캡처하고있는 오류는 무엇인가 잘못되었을 때 PHP가 트리거하는 E_NOTICE 및 E_WARNING 오류입니다. 이 모든 목적은 모든 클라이언트가 마주보고있는 페이지에 버그 리포트 양식을 가지고 있으며 가능한 한 버그를 일으킬 수있는 페이지의 상황에 대해 많은 정보를 제공하고자합니다. 네, 출력 버퍼링은 당신이 제안하는 것을합니다. –

관련 문제