PHP Груша HTML -IT не рендерится после миграции с PHP5 на PHP7 - PullRequest
0 голосов
/ 24 апреля 2020

Недавно я переместил одно старое приложение PHP, первоначально с 2004 года, на недавно установленный хост Linux. Первоначально он был написан на PHP4, но он работал без каких-либо изменений на PHP5.

. Теперь существует проблема с рендерингом Pearl HTML_Template_IT с PHP7 и Phar. Нерабочий код выглядит следующим образом

<?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 среде.

1 Ответ

0 голосов
/ 24 апреля 2020

Причина была в том, что, когда текущему блоку было присвоено значение «помощь» $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, если быть точным), вам нужно это сделать.

...