0

li と ul を正しいタイミングで閉じるのに問題があります。

私たちが持っているコードを使用して、magento ショップの特定のカテゴリのすべての子供を取得します。

問題は、すべての子をリストに分割したいということです。したがって、カテゴリ -> サブカテゴリ -> サブサブカテゴリで並べ替えることができます。私の構造はこうありたいです。

<ul>
    <li>
        <a>Head Child</a>
        <ul>
            <li>
                <a>Sub child</a>
                <ul>
                    <li><a>Sub sub child</a></li>
                    <li><a>Sub sub child</a></li> 
                </ul>
            </li>
        </ul>
    </li>
    <li>
        <a>Head Child</a>
        <ul>
            <li>
                <a>Sub child</a>
                <ul>
                    <li><a>Sub sub child</a></li>
                    <li><a>Sub sub child</a></li> 
                </ul>
            </li>
        </ul>
    </li>
</ul>

今得ている出力は

<ul>
    <a title="View the products for the " href="#">Head child</a>
    <li class="sub_cat">
        <a title="View the products for the " href="#">Sub child</a>
    </li>
    <li class="sub_cat">
        <a title="View the products for the " href="#">Sub sub child</a>
    </li>
</ul>

これは私たちの php コードです。

<?php
$cat = Mage::getModel('catalog/category')->load(9);
$subcats = $cat->getChildren();

foreach(explode(',',$subcats) as $subCatid)
{
    $_category = Mage::getModel('catalog/category')->load($subCatid);
    if($_category->getIsActive()) {
        echo '<ul><a href="'.$_category->getURL().'" title="View the products for the "'.$_category->getName().'" category">'.$_category->getName().'</a>';
        $sub_cat = Mage::getModel('catalog/category')->load($_category->getId());
        $sub_subcats = $sub_cat->getChildren();
        foreach(explode(',',$sub_subcats) as $sub_subCatid)
        {
            $_sub_category = Mage::getModel('catalog/category')->load($sub_subCatid);
            if($_sub_category->getIsActive()) {
                echo '<li class="sub_cat"><a href="'.$_sub_category->getURL().'" title="View the products for the "'.$_sub_category->getName().'" category">'.$_sub_category->getName().'</a>';
                $sub_sub_cat = Mage::getModel('catalog/category')->load($sub_subCatid);
                $sub_sub_subcats = $sub_sub_cat->getChildren();

                foreach(explode(',',$sub_sub_subcats) as $sub_sub_subCatid)
                {
                    $_sub_sub_category = Mage::getModel('catalog/category')->load($sub_sub_subCatid);
                    if($_sub_sub_category->getIsActive()) {
                        echo '<li class="sub_cat"><a href="'.$_sub_sub_category->getURL().'" title="View the products for the "'.$_sub_sub_category->getName().'" category">'.$_sub_sub_category->getName().'</a>';
                    }
                }
            }
        }
        echo '</ul>';
    }
}

?>
4

1 に答える 1

0

ここで再帰関数の使用を検討する必要があります

$cat =  Mage::getModel('catalog/category')->load(9);
$html = '';
$html = getSubCategoriesHTML($cat, $html);



function getSubCategoriesHTML($cat, $html) {

    $html .= '<a href="'.$cat->getURL().'" title="View the products for the "'.$cat->getName().'" category">'.$cat->getName().'</a>';
    $html .= '<ul>';

    $subcats = $cat->getChildren();
    foreach(explode(',',$subcats) as $subCatid) {
        $_category = Mage::getModel('catalog/category')->load($subCatid);
        if($_category->getIsActive()) {
            $html .= '<li>';
            $html .=  getSubCategoriesHTML($_category, $html);
            $html .= '</li>;
        }
    }

    $html .= '</ul>';
    return $html;
}

この関数をヘルパーまたはカテゴリ モデルに追加できます。
まったくテストしていないので、正しく動作しない可能性があります。しかし、それがあなたを助けることを願っています。

于 2013-01-30T09:37:20.507 に答える