1

OpenCartカテゴリモジュールで第3レベルにしたいと思いforeachます。これは、2レベルのカテゴリのみを生成するコードです。第3レベルを生成するように、ヘルプと変更を行ってください。

<ul id="menu">
    <?php foreach ($categories as $category) { ?>
    <li><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a>
      <?php if ($category['children']) { ?>
        <?php for ($i = 0; $i < count($category['children']);) { ?>
        <ul>
          <?php $j = $i + ceil(count($category['children']) / $category['column']); ?>
          <?php for (; $i < $j; $i++) { ?>
          <?php if (isset($category['children'][$i])) { ?>
          <li><a href="<?php echo $category['children'][$i]['href']; ?>"><?php echo $category['children'][$i]['name']; ?></a></li>
          <?php } ?>
          <?php } ?>
        </ul>
        <?php } ?>
      <?php } ?>
    </li>
    <?php } ?>
  </ul>
4

5 に答える 5

7

この最初の場合、ヘッダーコントローラーを編集する必要があります。

カタログ->コントローラー->共通->header.phpに移動します

$categories変数を作成するセクションを編集します。次のスクリプトで更新します。

$categories = $this->model_catalog_category->getCategories(0);

        foreach ($categories as $category) {
            if ($category['top']) {
                $children_data = array();



                $children = $this->model_catalog_category->getCategories($category['category_id']);

                foreach ($children as $child) {

                    $sec_children_data = array();
                    $sec_children = $this->model_catalog_category->getCategories($child['category_id']);

                    foreach ($sec_children as $sec_child) {
                        $sec_children_data[] = array(
                        'name'  => $sec_child['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
                        'href'  => $this->url->link('product/category', 'path=' . $child['category_id'] . '_' . $sec_child['category_id'])  
                           );
                        }
                    $data = array(
                        'filter_category_id'  => $child['category_id'],
                        'filter_sub_category' => true
                    );

                    $product_total = $this->model_catalog_product->getTotalProducts($data);

                    $children_data[] = array(
                        'name'  => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
                        'href'  => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id']), 'children' => $sec_children_data 
                    );                      
                }

                // Level 1
                $this->data['categories'][] = array(
                    'name'     => $category['name'],
                    'children' => $children_data,
                    'column'   => $category['column'] ? $category['column'] : 1,
                    'href'     => $this->url->link('product/category', 'path=' . $category['category_id'])
                );
            }
        }

次に、ビューファイルを更新して第3レベルのカテゴリを表示します。

于 2012-10-25T12:00:56.700 に答える
2

あなたはこれを試すことができます、それはエレガントではありませんが、うまくいくはずです:

    <ul id="menu">
    <?php foreach ($categories as $category) : 
        echo '<li><a href="'.$category['href'].'">'.$category['name'].'</a>';
        if (!empty($category['children'])) : 
            echo '<ul>';
            foreach ($category['children'] as $category_level2) :
                echo '<li><a href="'.$category_level2['href'].'">'.$category_level2['name'].'</a>';
                if (!empty($category_level2['children'])) :
                    echo '<ul>';
                    foreach ($category_level2['children'] as $category_level3) :
                        echo '<li><a href="'.$category_level3['href'].'">'.$category_level3['name'].'</a></li>';
                    endforeach;
                    echo '</ul>';
                endif;
                echo '</li>';
            endforeach;
            echo '</ul>';
        endif;
        echo '</li>';
    endforeach;
    echo '</ul>';
    ?>
于 2012-10-25T11:59:23.763 に答える
0

管理側がすでに完了していると仮定すると、第2レベルの下にいくつかのカテゴリがあるかどうかを確認する必要があります。はいの場合、for構築(またはforeach)を行い、それらを第3レベルとして表示します。

三重<ul></ul>の構造を生成します。CSSで定型化する必要があります。

再帰関数を使用して無限のサブカテゴリを作成することもできます。

わからない場合はお知らせください。

于 2012-10-25T11:55:26.663 に答える
0

最初にここからvqmodをダウンロードし、次にそれを抽出します。これで、vqmodフォルダーがサイトのルートディレクトリに保持されます。次に、ブラウザに移動してサイトのURLを入力し、「/ vqmod / install」を押してEnterキーを押すと、サイトにvqmodを正常にインストールできるというメッセージが表示されます。ここで拡張フォームをダウンロードして解凍します。抽出ファイルをサイトに保持し、foulder exmを示します:menu3rdlevel-opencart-2_2 \ vqmod \ xml / Menu3rdLevel.xmlファイル(例:vqmod \ xml / Menu3rdLevel.xml)「menu3rdlevel」フォルダーを持つ他のファイル。拡張子フォルダーから「javascript」をサイトフォルダ「javescript」に、拡張フォルダ「image」をサイトフォルダ「image」に拡張フォルダ「stylsheet」をサイトフォルダ「stylsheet」に。

注意:xmlファイルのみのファイルと他のファイルをフォルダとともに転送します。

于 2016-02-11T04:16:02.703 に答える
0

第3レベルのメニューを編集するには、header.phpコントローラーファイルに次の変更を加えてください。

 foreach ($sec_children as $sec_child) {
                    $sec_children_data[] = array(
                        'name'  => $sec_child['name'] . ($this->config->get('config_product_count') ? '' : ''),
                        'href'  => $this->url->link('product/category', 'path=' . $child['category_id'] . '_' . $sec_child['category_id'])
                    );

                }

また、header.tplファイルに次の変更を加えます。

?php if (isset($category['children'][$i]['level3'])) {  
          $level3menus = $category['children'][$i]['level3'];
          ?>
          <ul class="level3">
          <?php
                foreach( $level3menus as $level3menu) {
          ?>
                <li><a href="<?php echo $level3menu['href']; ?>" class=""><?php echo $level3menu['name'];?></a></li>
          <?php } ?>

ステップバイステップの説明とデモについては、私のチュートリアルを参照してください。

http://www.pearlbells.co.uk/third-level-category-menu-opencart/

于 2016-12-16T09:41:23.227 に答える