php - 从 PHP5 迁移到 PHP7 后,PHP Pear HTML-IT 不呈现
问题描述
我最近将一个最初从 2004 年开始的古老 PHP 应用程序移到了新安装的 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 环境。
解决方案
原因是当当前块设置为“帮助”$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)后,您需要这样做。
推荐阅读
- c# - 为什么设置时在文本框上看不到启用的垂直滚动条?
- r - R中的varimax函数内部发生了什么?
- python - 模式到许多参数
- django - 如何在 Django REST 框架序列化程序中添加额外的 false 字段?
- c# - 模拟对象处于重放状态时,此动作无效
- angular - 预期 2 个参数,但在 angular build prod 中得到 1 个
- python - 在函数内向 Pandas 数据框添加列而不发出警告
- javascript - 怎么说。(array[0] 是否等于 secondArray[0] 或 [1] 或 [2])
- javascript - 在 Django 中找不到 JavaScript
- python - 如何从python [9,12,13,11,10] true [17,1,2,3,5] true [19,22,23,27,55] false