1

私はこれにかなりの時間を費やし、2番目の目を使うことができました。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)

「メンズ20kgバー」の後に複製が始まることに注意してください。これは、変数がリセットされないためです。

これが私のコードです:

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エラーではなく、論理エラーであることを知っています。コードは正常に機能します。

ヘルプに感謝します。ありがとうございました。

4

1 に答える 1

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;
}
于 2012-05-25T12:52:08.100 に答える