2012-05-24 44 views
1

我已经花了好几个小时,并可以使用第二双眼睛。我正在使用Magento并希望打印类别的“文本层次结构”。例如:Magento和递归

Default Category > Weightlifting Bars & Plates > Bars 

我的文本正在重复。这里是我的击穿应该是什么样子

CATEGORY_NAME(top_category,sub_category1,sub_sub_category1,sub_sub_sub_category3等)

这里是我有:

Default Category (Default Category) 
    Weightlifting Bars & Plates (Default Category > Weightlifting Bars & Plates) 
     Bars (Default Category > Weightlifting Bars & Plates > Bars) 
      Men's 20kg Bars (Default Category > Weightlifting Bars & Plates > Bars > Men's 20kg Bars) 
      Women's 15kg Bars (Default Category > Weightlifting Bars & Plates > Bars > Men's 20kg Bars > Women's 15kg Bars) 
      Junior 10k Bars (Default Category > Weightlifting Bars & Plates > Bars > Men's 20kg Bars > Women's 15kg Bars > Junior 10k Bars) 
      Technique Bars (Default Category > Weightlifting Bars & Plates > Bars > Men's 20kg Bars > Women's 15kg Bars > Junior 10k Bars > Technique Bars) 

注意到它开始复制后“男士20公斤酒吧“。这是因为变量没有被重置。

这里是我的代码:

function print_tree($tree, $level, $category, $root_id, $print_category) { 
    $r = $root_id; 
    $cat = $category; 
    $level++; 

    foreach($tree as $item) { 
     if ($item['name'] == "Default Category" || $r != '') { 
      if ($level == 1) { 
       $cat = $item['name']; 
      } 
      else { 
       $cat .= " > " . $item['name']; 
      } 

      $parent_id = ($r != '' ? $r : $item['category_id']); 
      echo str_repeat("&nbsp;&nbsp;&nbsp;&nbsp;", $level) . $item['name'] . " (" . $cat . ")<br/>"; 

      $this->print_tree(
       $item['children'], 
       $level, 
       $cat, 
       $parent_id, 
       $print_category 
      ); 
     } 
    } 

    return; 
} 

什么就说:

$string = Mage::helper('googlemerchant/data')->print_tree($tree['children'], 0, 'Default Category', 0, $cat->getName()); 

不注意$ print_category。这是我用于其他用途的变量。 我知道它的逻辑错误,而不是Magento错误。代码工作正常。

欣赏帮助。谢谢。

回答

1

我想通了。我不得不修正$ new_cat(原名$ cat)。

function print_tree($tree, $level, $category, $root_id, $print_category) { 
    $r = $root_id; 
    $old_cat = $category; 
    $new_cat = $category; 
    $level++; 

    foreach($tree as $item) { 
     if ($item['name'] == "Default Category" || $r != '') { 
      if ($level == 1) { 
       $new_cat = $item['name']; 
      } 
      else { 
       $new_cat = $old_cat . " &gt; " . $item['name']; 
      } 

      $parent_id = ($r != '' ? $r : $item['category_id']); 

      if (count($item['children']) != 0) { 
       echo "level " . $level . str_repeat("&nbsp;&nbsp;&nbsp;&nbsp;", $level) . $item['name'] . " (" . $old_cat . ") <br/>"; 
       $this->print_tree(
        $item['children'], 
        $level, 
        $new_cat, 
        $parent_id, 
        $print_category 
       ); 
      } 
      else { 
       echo "level " . $level . str_repeat("&nbsp;&nbsp;&nbsp;&nbsp;", $level) . $item['name'] . " (" . $old_cat . ")<br/>"; 
       $this->print_tree(
        $item['children'], 
        $level, 
        $old_cat, 
        $parent_id, 
        $print_category 
       ); 
      } 
     } 
    } 

    return; 
}