PHP Pear HTML-IT 从 PHP5 迁移到 PHP7 后无法呈现



我最近将一个古老的PHP应用程序从2004年移到了一个新安装的Linux主机上。它最初是用PHP4编写的,但在PHP5上没有任何修改。

现在,用PHP7和Phar渲染Pear HTML_Template_IT出现了问题。非工作代码看起来像这个

<?php
require_once("HTML/Template/IT.php");
class Layout_normal
{

function __construct($views)
{
$this->views = $views;
$Tt = new HTML_Template_IT("../tpl");
$Tt->loadTemplatefile("layoutNormal.tpl");
foreach($views as $view => $data)
{
if($view == "main") {
$Tt->setVariable("PAGE", $data);
}
elseif($view == "help")
{
$Tt->setCurrentBlock("help");
$Tt->setVariable("HELP", $data);
$Tt->parseCurrentBlock();
}
elseif($view == "pagename") $Tt->setVariable("PAGENAME", $data);
elseif($view == "active") $active = $data;
elseif($view == "module") $module = $data;
}
$Tt->setVariable("MENU", $this->getMenu($view));
$Tt->setVariable("TOPMENU", $this->getMenu($view));
$this->page = $Tt->get();
}
// some more methods here
}
?>

根据该代码变量{{PAGE}}按预期进行了渲染,但{{MENU}和{{TOPMENU}}没有进行渲染。同样的代码也适用于旧的PHP5环境。

原因是当当前块被设置为"help"$Tt->setCurrentBlock("help");时,它从未从那里返回。所以在这里添加最后一行解决了问题:

elseif($view == "help")
{
$Tt->setCurrentBlock("help");
$Tt->setVariable("HELP", $data);
$Tt->parseCurrentBlock();
$Tt->setCurrentBlock("__global__"); // <- THIS DID THE MAGIC
}

在PHP5中,您不需要将__global__设置回当前块,但在更新到PHP7和较新版本的Pear(确切地说是Phar,API 1.1.1版(后,您需要这样做。

最新更新