2013-11-15 4 views
0

я пытаюсь добиться следующего:OpenCart Split категории на нескольких страницах

Верхнее меню с КАТЕГОРИЯ GROUP1, категория GROUP2, категория group3

При выборе КАТ GROUP1 все categorys в этой группе будут перечислены в левая колонка.

Так левый бар будет выглядеть следующим образом:

КАТЕГОРИЯ GROUP1 category11

КАТЕГОРИЯ GROUP1 category12

КАТЕГОРИЯ GROUP1 category13

и т.д.

и при выборе продукта, только это КАТЕГОРИЯ GROUP1 должна быть видна в левой колонке,

И при выборе КАТЕГОРИЯ GROUP2 в верхнем меню Я хочу, чтобы левый столбец только шоу:

КАТЕГОРИЯ GROUP2 Category21

КАТЕГОРИЯ GROUP2 Category22

КАТЕГОРИИ GROUP2 Category23

и т.д.

и при выборе продукта из этого списка я хочу, чтобы CATEGORY GROUP2 отображалась в левом столбце

То же самое с КАТЕГОРИЯ ГРУППА 3.

Просто не могу понять, как это сделать, так как если вы добавляете модуль категории макет «продукт» будет видно каждый раз, когда вы находитесь в продукте.

Я попытался разделить категории и добавить разные макеты к каждому разделу, пример route page1/page1, page2/page2, это прекрасно подходит для отображения категорий на разных страницах, но как только вы выбираете продукт, показывает все модули, присвоенные странице продукта.

Как это можно сделать?

OpenCart 1.5.6

ответ

0

Я получил это работает с обходным путем.

Я объединил этот ответ:
Adding CSS stylesheet to pages based on route in OpenCart

с этим: OpenCart module on product page based on route

Затем я добавил новый макет, чтобы я мог дробить categorys на разных страницах, и не добавил дисплея: ни для модули, основанные на пути к продукту.

Работы, но не лучшее разрешение.

0

Я понимаю, что вы хотите достичь. Я знал, что лучше создать новый вопрос. Это можно сделать в контроллере catalog/controller/module/category.php, где категории извлекаются для корня и дети загружаются. Измените код следующим образом:

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(); 
    } 
} 

Это должно работать, как и ожидался, а также ранее, если не идентификатор категории не предусмотрен ...

+0

Спасибо, но это просто забирает категории в левом столбце и оставляет onces в топменю? Извините, если я не был достаточно ясен. Если я выберу категорию Group1, то категория 11,12,13 показана в левом столбце, и при выборе продукта категории 11,12,13 все еще существуют (image1 + 2), то при выборе категории 2 категории категории 21 , 22,23 показаны в левом столбце вместо этого, и при выборе продукта существуют только те категории. (image3 + 4) Так что сделайте страницу продукта наследовать то, что вы там, где раньше, надейтесь, что это заставляет? –

+0

OK Я решил его с помощью CSS, добавив разные классы в тело на основе маршрута, и просто показать/скрыть вещи, которые я не хочу. Не окончательное решение, но работает. Должен ли я публиковать ответ здесь или слишком много грязного обходного пути? –

+0

IMHO это обходной путь, но если он работает, OFC опубликует его здесь и примет его, чтобы кто-то мог использовать его также и в будущем ;-) – shadyyx

Смежные вопросы