0

ありがとう…………しかし……私は、カテゴリツリーのより多くのレベルではなく、第1レベルまで動作する以下のコードを持っています。誰かが第3レベル以上のために私を助けてくれます... ........ カテゴリ ツリーのレベル ............つまり、親カテゴリをクリックすると、その特定の親のみが開き、その子が開きます。他のすべてのカテゴリは、カテゴリ 1 のように閉じられます。 -サブカテゴリ1 ----サブサブカテゴリ1 -サブカテゴリ2

カテゴリー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 に答える