在函数中调用函数中断模板

时间:2016-03-31 20:59:59

标签: php mysqli

我目前正在尝试建立一个简单的论坛。我正在使用函数List_Category()来获取类别,然后我在List_SubCategory($id)内调用另一个函数List_Category()来获取类别子类别。但是,我遇到了麻烦,因为如果我echo来自List_SubCategory($id)的结果,它会使子类别出现在内容框上方,而不是内部框(对我来说,这没有任何意义! )

它应该如何显示(但结果超过1): enter image description here

我在echo中使用List_SubCategory($id)时的效果如何: enter image description here

功能:

public function List_Category() {

    $GetCat = $this->dbc->prepare("SELECT id,name,type,minrank,mini_icon FROM categories ORDER BY id ASC");
    if($GetCat->execute()) {

        $GetCat->bind_result($catid, $catname, $cattype, $catminrank, $caticon);
        $GetCat->store_result();

        if($GetCat->num_rows >= 1) {

            while($GetCat->fetch()) {
                echo '<h3 id="CatTitle"><a href="#"><i class="'.$caticon.'"></i> '.$catname.'</a> <a href="javascript:void(0)" class="CatMin-'.$catid.'"><i class="fa fa-minus-square" id="CategoryMinim"></i></a></h3>
                    <div id="CategoryBlock" class="Cat-'.$catid.'">
                        '.$this->List_SubCategory($catid).'
                    </div>
                    <br style="clear:both">';
            }

        }

    } else {

        return BoardTemplate::ThrowNewAlert("error", $GetCat->error);

    }

}

public function List_SubCategory($id) {

    $GetSub = $this->dbc->prepare("SELECT id,name,attach_id FROM subcategories WHERE attach_id = ? ORDER BY id ASC");
    $GetSub->bind_param("i", $id);
    if($GetSub->execute()) {

        $GetSub->bind_result($subid, $subname, $subattach);
        $GetSub->store_result();

        if($GetSub->num_rows >= 1) {


            while($GetSub->fetch()) {

            echo '<div id="CatSep" style="position: relative;">
                        <i class="fa fa-comments-o" id="ReadStatus"></i>  <div class="Title"><a href="#">'.$subname.'</a></div>
                        <img src="http://cdn.akamai.steamstatic.com/steamcommunity/public/images/avatars/78/783bd2db99ca87c20c23b2ff59427fdd8aff8329_full.jpg" class="SizeTinyAvatar" id="CatAva" style="float:right;" />
                        <div class="Desc">
                            <div style="float: right" id="fr"><b>Latest:</b> <a href="#">Welcome to your first fucking...</a></div><br style="clear:both">
                            <div style="float: right" id="fr">Posted by <a href="#">Kah!</a>, 2 days ago</div>
                        </div>

                        <div id="StatsHelp">
                            <div id="CatStats">10<br>Topics</div>
                            <div id="CatStats">10<br>Posts</div>
                        </div>
                    </div>';
            }




        } else {
            echo "no cat";
        }



    }

}

我现在的理论是它被打破了,因为List_Category()正在回应它的结果,List_SubCategory($id)也在做,所以它在回声中回响。 FUNC-ception?

我可以确保我的HTML或我的CSS没有任何问题。如果我将echo中的List_SubCategory($id)替换为return,它看起来就像在第一张图片中,但它似乎忽略了while(),因为它只给了我第一行数据库。

这很难解释。但任何帮助表示赞赏。我不知道应该如何让它看起来应该如此。

1 个答案:

答案 0 :(得分:1)

第二个echo中的List_SubCategory()echo函数中的List_Category()之前完成。

不应直接回显字符串,而应将其写入变量并在List_SubCategory()函数的末尾返回此变量。正如您已经描述的那样,您不应该将回报放在里面。