0

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

目前我做了一个viewhelper,它可以帮助我为其他模块生成这个treeMap,因为这些模块也将使用这个特性,只要这个helper带有一个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>";
    }
}

通过将 HTML 与 PHP 回显分开来解决此问题的任何建议。

4

1 回答 1

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)); ?>
于 2013-03-28T16:19:56.710 回答