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()andpageFooter()関数を使用しています。私が達成しようとしているのは、_header.phpがインクルードされた直後の時点で、PHPで生成されたエラーの順序付けられていないリストをHTMLリストに入れることです。(ドキュメントが実行された後)フッターにリストを配置すれば、リストを意図したとおりに機能させることができますが、リストをそこに配置したくありません。JSで動かせると思いますが、PHPソリューションが必要だと思います。

アップデート

ob_start()エラーリストをどこに置くかを正規表現でバッファを検索し、それを挿入するコールバック関数が解決策になるかどうか疑問に思っています。

UPDATE 2私は問題を解決しました、私の答えは以下の通りです。許可されたら2日以内に受け付けます。

4

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();
}
于 2012-01-19T03:25:17.657 に答える
0

私がこれを正しく理解している場合、ヘッダーとフッターの間に計算されたコード/エラーを挿入しようとしています。エラーはページの最後で合計/合計されており、ページフッターの後に完了すると思います。

これが本当なら、とにかく純粋なphpでこれを行うことは考えられません。ページを 1 回だけ実行でき、2 回戻ることはできません。できることは、フッターの後に要素を作成し、javascript を使用して表示したい領域に移動することです。これは私が考える最も簡単な方法です。これはjqueryで簡単にできます。

私が正しい方向に進んでいれば、さらに説明できますが、あなたが何を求めているのかまだ100%確信が持てません...

使用する jquery コマンドは .appendTo() です。

于 2012-01-19T02:14:14.220 に答える