在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天内接受它。
答案 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()。