Smarty Templating for php 让您编写每次调用fetch()
或被display()
调用的输出过滤器。Smarty 也使用输出缓冲区,你不能创建自己的(当另一个缓冲区仍然处于活动状态时,你不能有一个输出缓冲区)。
我的问题是,我想在完成后对整个文档进行整理,而不是在显示模板时分段进行。我无法将我正在使用的软件重写到只使用一次显示或获取的程度,但我仍然需要使用输出过滤器/整洁,然后将输出刷新到 smarty 中,一次在整个文档上. 但我认为 smarty 没有办法做到这一点。
我的代码工作正常:
function tidy_html(&$output, &$smarty){
$config = array(
'indent' => true,
#'output-html' => true,
'wrap' => 0,
'drop-proprietary-attributes' => false,
'indent-cdata' => true,
'indent-spaces' => 5,
'tab-size' => 5,
'show-warnings' => true
#'markup' => false ,
#'sort-attributes' => 'alpha',
#'char-encoding' => 'utf8'
);
try {
$tidy = new tidy;
$tidy->parseString($output, $config, 'utf8');
$tidy->cleanRepair();
} catch (Exception $e) {
$tidy = $output;
}
return $tidy;
}
$view->register_outputfilter('tidy_html');
但是,因为它在作为fetch()
或被display()
调用的部分上运行,如果右括号表示该文件中不存在表格,它会为我关闭它们并破坏布局,破坏我的网站。它的大部分显示都很好,只是在早期关闭表格和一些 div 框时有问题,因为这个软件是如何设置的,它将页面放入块中并在每个块上调用 display。如果该块包含表格的各个部分,它会提前关闭它们,从而导致布局损坏。至少我认为这是正在发生的事情,任何帮助将不胜感激。也许有可能在输出缓冲区被刷新之前抓住它,即使聪明人也在控制它?