ZF2从递归PHP函数中分离HTML

时间:2013-03-28 15:47:26

标签: php model-view-controller view zend-framework2

我正在尝试从Zend Framework 2中的PHP代码中分离HTML元素,但我不知道如何解决这个问题/单独。我现在正在回应那些完成工作的HTML元素。但是必须有一种方法可以从PHP中分离HTML,而不是回显HTML元素。

目前我做了一个viewhelper,它帮助我让我为其他模块生成这个treeMap,因为这些也将使用这个功能,只要这个帮助器是用treeMap给出的。 categoryTreeMap包含类别(Doctrine 2 ORM)对象的树形图。

这是我到目前为止所得到的:

namespace Application\View\Helper;

use Zend\View\Helper\AbstractHelper;

class CategoryTreeMapHelper extends AbstractHelper
{
    public function __invoke($categoryTreeMap)
    {
        echo "<ol class=\"sortable\">";
        foreach ($categoryTreeMap as $category) {
            $this->showCategories($category);
        }
        echo "</ol>";
    }

    public function showCategories($category)
    {
        echo "<li><div>" . $category->name . "</div>";
        if (isset($category->childs)) {
            echo "<ol>";
            foreach ($category->childs as $child_category) {
                $this->showCategories($child_category);
            }
            echo "</ol>";
        }
        echo "</li>";
    }
}

有关如何解决此问题的任何建议,请从PHP echo中分离HTML。

1 个答案:

答案 0 :(得分:3)

如果您的助手仅包含这两种方法,您可以通过使用部分助手来复制模板中的功能

为您的树形图容器创建一个部分

// view/partial-treemap.phtml
<ol class="sortable">
    <?php foreach ($this->categoryTreeMap as $category) :
        echo $this->partial('partial-category', array('category' => $category));
     endforeach; ?>
</ol> 

为递归部分创建一个部分(为子项递归调用自身)

// view/partial-category.phtml
<li>
    <div><?php echo $category->name; ?></div>
    <?php if (isset($category->childs)) : ?>
    <ol>
        <?php foreach ($category->childs as $child_category) :
            echo $this->partial('partial-category', array('category' => $child_category));
        endforeach; ?>
    </ol>
    <?php endif; ?>
</li>

然后在您的控制器操作视图中,您只需要一行

<?php echo $this->partial('partial-treemap', array('categoryTreeMap' => $categoryTreeMap)); ?>
相关问题