Php OpenCart在更多页面上拆分类别

Php OpenCart在更多页面上拆分类别,php,opencart,Php,Opencart,我正在努力实现以下目标: 带有类别组1、类别组2、类别组3的顶部菜单 选择类别组1时,该组中的所有类别将列在左栏中 所以左栏看起来像这样: 类别组1类别11 类别组1类别12 类别组1类别13 等 在选择产品时,只有该类别组1在左列中可见 在顶部菜单中选择CATEGORY GROUP2时,我希望左列仅显示: 类别2类别21 类别组2类别22 类别组2类别23 等 当从这个列表中选择产品时,我只希望类别GROUP2在左列中可见 第三组也是这样 只是想不出怎么做,因为如果你把分类模块添加到布局“产品

我正在努力实现以下目标:

带有类别组1、类别组2、类别组3的顶部菜单

选择类别组1时,该组中的所有类别将列在左栏中

所以左栏看起来像这样:

类别组1类别11

类别组1类别12

类别组1类别13

在选择产品时,只有该类别组1在左列中可见

在顶部菜单中选择CATEGORY GROUP2时,我希望左列仅显示:

类别2类别21

类别组2类别22

类别组2类别23

当从这个列表中选择产品时,我只希望类别GROUP2在左列中可见

第三组也是这样

只是想不出怎么做,因为如果你把分类模块添加到布局“产品”中,它将在你每次进入产品时都可见

我尝试过拆分类别,并为每个拆分添加了不同的布局, 示例route page1/page1、page2/page2,仅在不同页面上显示类别就可以了,但一旦您选择了产品,它就会显示与产品页面关联的所有模块

如何做到这一点


OpenCart 1.5.6

我看到了您想要实现的目标。我知道提出一个新问题更好。这可以在
catalog/controller/module/category.php
controller中完成,在这里为根目录检索类别并加载子目录。将代码更改为:

class ControllerModuleCategory extends Controller {
    protected function index($setting) {
        $this->language->load('module/category');

        $this->data['heading_title'] = $this->language->get('heading_title');

        if (isset($this->request->get['path'])) {
            $parts = explode('_', (string)$this->request->get['path']);
        } else {
            $parts = array();
        }

        if (isset($parts[0])) {
            $this->data['category_id'] = $parts[0];
        } else {
            $this->data['category_id'] = 0;
        }

        $categories = $this->model_catalog_category->getCategories($this->data['category_id']);

        if (isset($parts[1])) {
            $this->data['child_id'] = $parts[1];
        } else {
            $this->data['child_id'] = 0;
        }

        $this->load->model('catalog/category');

        $this->load->model('catalog/product');

        $this->data['categories'] = array();

        foreach ($categories as $category) {
            $total = $this->model_catalog_product->getTotalProducts(array('filter_category_id' => $category['category_id']));

            $children_data = array();

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

                foreach ($children as $child) {
                    $data = array(
                        'filter_category_id'  => $child['category_id'],
                        'filter_sub_category' => true
                    );

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

                    $total += $product_total;

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

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

        if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/category.tpl')) {
            $this->template = $this->config->get('config_template') . '/template/module/category.tpl';
        } else {
            $this->template = 'default/template/module/category.tpl';
        }

        $this->render();
    }
}

如果没有提供类别id,这应该可以像以前一样正常工作…

我使用了一个解决方案

我组合了这个答案:

为此:

然后我添加了一个新的布局,这样我可以在不同的页面上划分类别, 并添加显示:基于产品路径的模块无显示


有效,但不是最好的解决方案

谢谢,但这只是删除了左栏的类别,并将ONCE保留在顶部菜单中?对不起,如果我不够清楚的话。如果我选择类别组1,则类别11、12、13显示在左栏中,当选择产品时,类别11、12、13仍然存在(图像1+2),然后当选择类别组2时,类别21、22、23显示在左栏中,而当选择产品时,只有这些类别存在。(image3+4)让productpage继承您刚才在哪里看到的内容,希望它有意义?好吧,我用CSS解决了这个问题,根据路由向body添加了不同的类,并简单地显示/隐藏我不想要的内容。不是最终的解决方案,但有效。我应该把答案贴在这里还是太脏了?我认为这是一个解决办法,但如果它有效,OFC将它贴在这里并接受它,以便将来有人也可以使用它;-)