Шаблонный класс не зацикливается на str_replace - PullRequest
0 голосов
/ 10 октября 2011

Ну, у меня есть этот набор кодов

<?php
include "includes/config.php";
class template{
    var $page;
    var $built;
    public $block = array();

    function _start($tpl){
        $this->page = $tpl;
    }

    function set_array($data){
        $this->block[] = $data;
    }

    function _show(){
        foreach($this->block as $k => $v){
            foreach($v as $k1 => $v1){
                //echo $k1."<br />";
                //echo $v1."<br />";
                $this->page = str_replace("{".$k1."}", $v1, $this->page);
            }
        }
        echo $this->page;
    }
}

$template = new template();

$file = "<html>
<body>
<p>{CAT}</p>
<p>{SUBCAT}</p>
</body>
</html>";

$template->_start($file);

// Category Query
while($row1 = mysql_fetch_assoc($cat)){

$template->set_array(array("CAT" => $row1['title']));

// Sub Category Query
while($row2 = mysql_fetch_assoc($subcat)){

$template->set_array(array("SUBCAT" => $row2['title']));

}
}

$template->_show();

?>

Теперь, когда я отображаю $ k1 или $ v1, они отображают ключи и значения в правильном порядке, например

CAT1 SUBCAT1.1 SUBCAT1.2 CAT2 SUBCAT2.1 SUBCAT2.2

но когда он проходит через str_replace, он отображает только CAT1 и SUBCAT1.2, что не так?

1 Ответ

0 голосов
/ 10 октября 2011

Вы перезаписываете переменную $ page внутри цикла foreach ();либо вы делаете его массивом, либо добавляете переменную.Может быть:

function _show(){
       $this->page = '';
        foreach($this->block as $k => $v){
            foreach($v as $k1 => $v1){
                $this->page .= str_replace("{".$k1."}", $v1, $this->page); //appending every time onto the previous. As you were doing:
                // $this->page =str_replace("{".$k1."}", $v1, $this->page);
                // here you were overwriting $this->page at every passage of the loop
            }
        }
        echo $this->page;
    }
...