我正在尝试从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。
答案 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)); ?>