在执行文档后将输出插入页面

时间:2012-01-19 01:47:04

标签: php buffering globals

在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解决方案。

更新

我想知道ob_start()的回调函数是否通过正则表达式在缓冲区中搜索错误列表,然后插入它将是解决方案。

更新2 我已经解决了问题,我的答案如下。我被允许在2天内接受它。

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

如果我说得对,你试图在页眉和页脚之间插入一些计算出的代码/错误。我猜测错误是在页面的最后总计/总结的,并且会在页面页脚之后完成。

如果这是真的,我无论如何都想不到用纯PHP来做这件事。它只能运行一次页面,不能翻回。您可以做的是在页脚之后创建一个元素,并使用javascript将其移动到您想要显示它的区域。这将是我想到的最简单的方法。您可以使用jquery轻松完成此操作。

如果我走在正确的轨道上,我可以进一步解释,但我不能100%肯定你还在问什么......

您将使用的jquery命令是.appendTo()。