Может с помощью модуля "меню категорий pro" попробовать? Но, боюсь придётся ещё код допиливать. Полностью он не справится.
УРА!!! сделал. Может кому то пригодиться. Это код файла /catalog/controller/module/category.php PHP: <?phpclass 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; } if (isset($parts[1])) { $this->data['child_id'] = $parts[1]; } else { $this->data['child_id'] = 0; } if (isset($parts[2])) { $this->data['child2_id'] = $parts[2]; } else { $this->data['child2_id'] = 0; } if (isset($parts[3])) { $this->data['child3_id'] = $parts[3]; } else { $this->data['child3_id'] = 0; } $this->load->model('catalog/category'); $this->load->model('catalog/product'); $this->data['categories'] = array(); $categories = $this->model_catalog_category->getCategories(0); foreach ($categories as $category) { $total = $this->model_catalog_product->getTotalProducts(array('filter_category_id' => $category['category_id'])); $children_data = array(); $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 ); // $children_data_level2 = array(); $children_level2 = $this->model_catalog_category->getCategories($child['category_id']); foreach ($children_level2 as $child_level2) { $data_level2 = array( 'filter_category_id' => $child_level2['category_id'], 'filter_sub_category' => true ); $children_data_level3 = array(); $children_level3 = $this->model_catalog_category->getCategories($child_level2['category_id']); foreach ($children_level3 as $child_level3) { $data_level3 = array( 'filter_category_id' => $child_level3['category_id'], 'filter_sub_category' => true ); $children_data_level3[] = array( 'category_id' => $child_level3['category_id'], 'name' => $child_level3['name'], 'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'] . '_' . $child_level2['category_id'] . '_' . $child_level3['category_id']), 'id' => $category['category_id']. '_' . $child['category_id']. '_' . $child_level2['category_id'] . '_' . $child_level3['category_id'] ); } $children_data_level2[] = array( 'category_id' => $child_level2['category_id'], 'name' => $child_level2['name'], 'children3' => $children_data_level3, 'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'] . '_' . $child_level2['category_id']), 'id' => $category['category_id']. '_' . $child['category_id']. '_' . $child_level2['category_id'] ); } // $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 . ')' : ''), 'children2' => $children_data_level2, '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']) ); } $url = ''; $category_id = 0; if ($category_id == 0 && isset($this->request->get['path'])) { $url = '&path=' . $this->request->get['path']; $parts = explode('_', (string)$this->request->get['path']); $category_id = array_pop($parts); } if (isset($this->request->get['product_id']) && $category_id == 0) { $results = $this->model_catalog_product->getCategories($this->request->get['product_id']); if (count($results)) { $url = '&path=' . $results[0]['category_id']; $category_id = $results[0]['category_id']; } } $this->data['products'] = array(); $data = array( 'filter_category_id' => $category_id, 'sort' => 'p.sort_order', 'order' => 'ASC', 'start' => 0, 'limit' => 100 ); $results = $this->model_catalog_product->getProducts($data); foreach ($results as $result) { if ($result['image']) { $image = $this->model_tool_image->resize($result['image'], 140, 140); } else { $image = false; } if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) { $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax'))); } else { $price = false; } if ((float)$result['special']) { $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax'))); } else { $special = false; } if ($this->config->get('config_review_status')) { $rating = $result['rating']; } else { $rating = false; } $this->data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'price' => $price, 'special' => $special, 'rating' => $rating, 'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']), 'href' => $this->url->link('product/product', $url . '&product_id=' . $result['product_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(); }}?> Вывод в default/template/module/category.tpl PHP: <?php foreach ($products as $product) { ?> <div class="category_table3" style="padding-left:10px;"> <center> <?php if ($product['thumb']) { ?> <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" alt="<?php echo $product['name']; ?>" /></a></div> <?php } ?> <div style="width:140px; padding-left:6px;"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></div> <div class="price" style="width:140px; padding-left:6px;"> <?php if (!$product['special']) { ?> <span><?php echo $product['price']; ?></span> <?php } else { ?> <span><div class="price-old"><?php echo $product['price']; ?></div> <div class="price-new"><?php echo $product['special']; ?></div></span> </div> <?php } ?> </div> <div style="padding-left:26px;" class="cart"><a onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button_oform"><span>Купить</span></a></div> </div> <?php } ?>
Вот только если файл будет обновляться, нужно будет не забывать каждый раз ручками всё прописывать заново. Хорошоб решить эту проблему, всё же, модулями.
Файл не должен обновляться. В ОК любые обновления категорически противопоказаны. Даже, если какие-то правки оформлены в виде vQmod это совсем не гарантирует, что они не слетят после обновления.