1

我想foreach在 OpenCart 类别模块中进行第三级,这里是只生成 2 级类别的代码,请帮助和修改,以便它生成第三级:

<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 Controller:

转到目录->控制器->common->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'])
                );
            }
        }

然后更新视图文件以显示第三级类别。

于 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。现在你在这里下载一个扩展表格并解压它。并在您的站点中保留提取文件指示folder 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

要编辑第三级菜单,请在 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 回答