获得opencart中的第三级类别

时间:2012-10-25 11:26:48

标签: php opencart

我想在OpenCart类别模块中foreach第三级, 这里是只生成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>

5 个答案:

答案 0 :(得分:7)

首先,您需要编辑标题控制器:

转到目录 - &gt; controller-&gt; common-&gt; 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'])
                );
            }
        }

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

答案 1 :(得分: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>';
    ?>

答案 2 :(得分:0)

假设您已经完成了管理方面,那么您应该检查第二级是否有某些类别。如果是,则进行for构建(或foreach)并将其显示为第3级。

您将生成三重<ul></ul>构造。它应该在CSS下风格化。

您甚至可以使用递归函数创建无限子类别。

如果你没有得到它,请告诉我。

答案 3 :(得分:0)

首先从here下载vqmod然后解压缩。现在vqmod文件夹保存在您的站点根目录中。然后转到浏览器编写您的站点URL然后“/ vqmod / install”并按Enter然后您会收到一条消息,您可以在您的站点中成功安装vqmod。现在,您下载扩展表单here并将其解压缩。并在您的站点中保留提取文件,指示您站点中的foulder exm:menu3rdlevel-opencart-2_2 \ vqmod \ xml / Menu3rdLevel.xml文件,例如:vqmod \ xml / Menu3rdLevel.xml,其他文件带有“menu3rdlevel”文件夹。从您的扩展文件夹“javascript”到您的站点文件夹“javescript”,扩展文件夹“image”到站点文件夹“image”扩展文件夹“stylsheet”到站点文件夹“stylsheet”。然后在浏览器中刷新您的网站即可。

注意:仅传输xml文件和文件夹的其他文件。

答案 4 :(得分: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/