2012-01-19 9 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がインクルードされた後に、PHPの生成されたエラーのリストをHTMLリストに並べ替えることです。フッタに(ドキュメントが実行された後に)置くと、リストを意図した通りに動作させることができますが、私はそれを望んでいません。私はJSでそれを動かすことができると思うが、PHPソリューションが必要であると思う。

UPDATE

私はエラーリストを置くために正規表現によるバッファを検索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でこれを行うには、とにかく考えることはできません。ページを1回だけ実行することができ、2回戻すことはできません。あなたができることは、フッタの後に要素を作成し、javascriptを使用して要素を表示したい場所に移動することです。これは私が考える最も簡単な方法でしょう。これはjqueryで簡単に行うことができます。

私は正しい軌道に乗っていた場合、私はさらに説明することができますが、私はあなたがまだ求めているものを100%わからないんだけど...

あなたが使用するjQueryのコマンドは.appendToです()。

+0

うん、あなたは正しく理解されています。実際、jQueryでは、フッターの後からリストを希望の場所に移動するのは簡単ですが、可能であれば純粋なPHPソリューションを好むでしょう。 –

+0

これは私のPHP理解の範囲を少し超えていますが、計算されるポイントよりも前の要素をドキュメント内に実装できないことは間違いありません。どんな種類のエラーをキャプチャしていますか? DOMにコミットする前にこれらのエラーをキャプチャすることは可能ですか? – VictorKilo

+0

私がキャプチャしているエラーは、何か問題があるときにPHPがトリガするE_NOTICEとE_WARNINGのエラーです。すべての目的は、すべてのクライアントが直面しているページにバグレポートフォームがあり、可能な限りバグを引き起こした可能性のあるページに関する情報を、そのフォームに記入したいということです。うん、出力バッファリングはあなたが提案していることをします。 –

関連する問題