0

谢谢.......但是......我有下面的代码,它正在工作到第一级而不是类别树中的更多级别,有人可以帮助我达到第三级和更多...... ........类别树的级别...........这意味着如果我单击父类别,只有那个特定的父级与他的孩子一起打开,所有其他的都会像 Category1 一样关闭-subcategory1 ----subsubcategory1 -subcategory2

类别 2 -子类别 1 -子类别 2

      <?php
          $obj = new Mage_Catalog_Block_Navigation();
          $store_cats   = $obj->getStoreCategories();
          $current_cat  = $obj->getCurrentCategory();
           $current_cat = (is_object($current_cat) ? $current_cat->getName() : '');

            foreach ($store_cats as $cat) {
                  if ($cat->getName() == $current_cat) {
                        echo '<li class="current"><a href="'.$this->getCategoryUrl($cat).'">'.$cat->getName()."</a>\n<ul>\n";
                        foreach ($obj->getCurrentChildCategories() as $subcat) {
                        echo '<li><a href="'.$this->getCategoryUrl($subcat).'">'.$subcat->getName()."</a></li>\n";
                  }
                   echo "</ul>\n</li>\n";
                  } else {
                       echo '<li><a href="'.$this->getCategoryUrl($cat).'">'.$cat->getName()."</a></li>\n";
                       }
                 }
         ?>
4

1 回答 1

1

解决这个问题的最简单方法是创建一个递归函数(一个调用自身的函数)。

以下是您可能希望设置代码的方式:

//go through all the parent catgeroies
foreach ($store_cats as $cat) {
        // if it's the category we are looking for let's spit it out as an <li>
        if ($cat->getName() == $current_cat) {
                    echo '<li class="current"><a href="'.$this->getCategoryUrl($cat).'">'.$cat->getName()."</a>\n<ul>\n";
                    // let's get all the subcategories no matter how deep (look at function below).
                    getChildCategories();

       }
}
//our new sub-category getter
public function getChildCategories() {

            // lets loop through all the children of the current category and spit out <li> for them    
            foreach ($obj->getCurrentChildCategories() as $subcat) {
                         echo '<li><a href="'.$this->getCategoryUrl($subcat).'">'.$subcat->getName()."</a></li>\n";

                        //lets call ourself again to see whether there are deeper layer to be found
                         getChildCategories();
              }
}

您想要添加到代码中的是一个 if 语句,用于检查是否有子代:

   if ($obj->getCurrentChildCategories()) {//then loop through etc.}

这样,您就可以避免在触底时出现错误。

于 2012-08-21T15:41:49.233 回答