PHP Pear HTML-IT从PHP5迁移到PHP7后不渲染

问题描述 投票:0回答:1

最近,我把一个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环境下也能用。

php templates pear html-templates
1个回答
0
投票

原因是当当前块设置为 "帮助" $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(准确的说是API版本1.1.1)后,你需要这样做。

© www.soinside.com 2019 - 2024. All rights reserved.