0

Zend Framework 2 内の PHP コードから HTML 要素を分離しようとしていますが、この問題を解決する方法や分離する方法についての手がかりがありません。現在、これらの HTML 要素をエコーし​​ています。しかし、HTML 要素をエコーする代わりに、HTML を PHP から分離する方法が必要です。

現時点では、このヘルパーがツリーマップで提供されている限り、他のモジュールでもこの​​ツリーマップを生成できるようにするビューヘルパーを作成しました。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エコーからHTMLを分離することにより、これを解決する方法に関する提案。

4

1 に答える 1

3

ヘルパーがこれら 2 つのメソッドのみで構成されている場合、部分ヘルパーを使用してテンプレートで機能を複製できます。

ツリーマップ コンテナーのパーシャルを作成する

// 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>

次に、コントローラーアクションビューで必要なのは1行だけです

<?php echo $this->partial('partial-treemap', array('categoryTreeMap' => $categoryTreeMap)); ?>
于 2013-03-28T16:19:56.710 に答える