Помощь Главные категории с переходом сразу в подкатегорию

Тема в разделе "Opencart", создана пользователем CoderW, 27 июн 2014.

Информация :
Внимание форумчане! При создании тем, или выкладывании какой-либо информации проверьте в какой ветке форума вы находитесь! Не путайте Opencart и Opencart2. При несоблюдении данного условия выносится соответствующее наказание! И потом не говорите что вас НЕ ПРЕДУПРЕЖДАЛИ! По возможности используйте обменники mail, yandex, google, dropbox, rghost Дабы избежать просьб перезалить и проблем с рекламой!
Модераторы: ZiX
  1. CoderW

    CoderW Постоялец

    Регистр.:
    17 янв 2013
    Сообщения:
    121
    Симпатии:
    54
    День добрый,

    есть делема, нужно сделать так, чтобы при нажатии на категорию происходил переход в её подкатегорию.

    П.С.(понимаю, что возможно не понимаете зачем это делать, но очень так сделать нужно)

    пример:
    Главная категория
    "Машины"

    Подкатегории
    "Легковые"
    "Грузовые"
    "Остальные"

    При нажатии в меню на Главную категорию (Машины) сразу открывается страничка с Легковыми автомобилями.
    Как это сделать?

    Я понимаю, что могу засунуть товар как в главную категорию так и в подкатегорию одновременно, но мне нужно, чтобы был активный линк подкатегории а не главной категории.

    Может кто поможет

    Opencart 1.5.x
     
  2. inturned

    inturned Webmaster & Designer

    Регистр.:
    7 ноя 2011
    Сообщения:
    525
    Симпатии:
    233
    Предлагаю через .htacess с перенаправлением (редиректом) на нужную страницу
     
    CoderW нравится это.
  3. animal_x

    animal_x

    Регистр.:
    22 июн 2012
    Сообщения:
    400
    Симпатии:
    127
    Если структура меняться не будет и выводится через главное меню то можно его сделать вручную с нужными ссылками. Если касаемо модуля категория то тут нужно редактировать /catalog/view/theme/шаблон/template/module/category.tpl
     
    CoderW нравится это.
  4. CoderW

    CoderW Постоялец

    Регистр.:
    17 янв 2013
    Сообщения:
    121
    Симпатии:
    54
    Ребят, мне нужно нормальное решение, которое будет работать не понижая функционал администрирования в администрации. Оба решения приводят к тому, что нужно руками лазить и соединять провода в случае изменений категорий.

    Мне нужно чтобы это происходило автоматически.

    И если я правильно понимаю решение нужно писать при помощи if и else

    if (есть подкатегория) вставитт ссылку подкатегории
    ifelse (есть у подкатегории подкатегория) то вставить ссылку подподкатегории
    else вставить ссылку категории.

    Я прав?

    нашёл в модуле файл, который отвечает за построение меню. Кто подскажет ?

    Код:
    class ControllerModuleCategoryAccordion extends Controller {
        protected $category_id = 0;
        protected $parent_id = 0;
        protected $path = array();
     
        /*------------------------------------------------------------------------------*/
    
        protected function index() {
            $this->language->load('module/category_accordion');
               $this->data['heading_title'] = $this->language->get('heading_title');
            $this->load->model('catalog/category');
         
            if (isset($this->request->get['path'])) {
                $this->path = explode('_', $this->request->get['path']);
             
                $this->category_id = end($this->path);
            }
         
            $this->data['category_accordion'] = $this->loadCategories(0, '', $this->category_id);
            $this->data['category_accordion_cid'] = $this->category_id;
            $this->data['category_accordion_jquery_path'] = $this->config->get('config_url') . '/catalog/view/javascript/jquery';
         
            if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/category_accordion.tpl')) {
                $this->template = $this->config->get('config_template') . '/template/module/category_accordion.tpl';
            } else {
                $this->template = 'default/template/module/category_accordion.tpl';
            }
         
            $this->render();
        }
     
        /*------------------------------------------------------------------------------*/
    
        protected function loadCategories($parent_id, $current_path = '', $cid = '') {
            $category_id = array_shift($this->path);
            $this->getCategoriesFromdb($category_id);
         
            $results = $this->model_catalog_category->getCategories($parent_id);
         
            $ret_string = '';
            if ($results) {
                if ($parent_id == 0) {
                    $ret_string .= '<ul id="cat_accordion" class="cat_accordion">';
                } else {
                    $ret_string .= '<ul>';
                }
            }
         
            foreach ($results as $result) { 
                if (!$current_path) {
                    $new_path = $result['category_id'];
                } else {
                    $new_path = $current_path . '_' . $result['category_id'];
                }
             
                $ret_string .= '<li class="cid' . $result['category_id'] . '">';
             
                $children = '';
                $children = $this->loadCategories($result['category_id'], $new_path);
             
                if ($cid == $result['category_id']) {
                    $classactive = 'active';
                } else {
                    $classactive = '';
                }
             
                if(isset($result['linkto']) && $result['linkto'] != '') {
                    if ($result['sort_order'] >= 0 && $result['sort_order'] <= 1000) {
                        if ($children) {
                            $ret_string .= '<a class="havechild ' . $classactive . '" href="' . $result['linkto'] . '">' . $result['name'] . '</a> <span class="expand"></span>';
                        } else {
                            $ret_string .= '<a class="nochild ' . $classactive . '" href="' . $result['linkto'] . '">' . $result['name'] . '</a>';
                        }
                    }
                } else {
                    if ($children) {
                        $ret_string .= '<a class="havechild ' . $classactive . '" href="' . $this->url->link('product/category','path=' .  $new_path)  . '">' . $result['name'] . '</a> <span class="expand"></span>';
                    } else {
                        $ret_string .= '<a class="nochild ' . $classactive . '" href="' . $this->url->link('product/category','path=' .  $new_path)  . '">' . $result['name'] . '</a>';
                    }
                }
             
                $ret_string .= $children;
                $ret_string .= '</li>';
            }
          
            if ($results) $ret_string .= '</ul>';
            return $ret_string;
        }
     
        /*------------------------------------------------------------------------------*/
     
        protected function getCategoriesFromdb($category_id) {
            if($category_id <=0) return false;
            $query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.category_id = '" . (int)$category_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1'");
         
            if ($query->row['parent_id'] == 0) {
                $this->parent_id = $category_id;
            } else {
                $this->getCategoriesFromdb($query->row['parent_id']);
            }
        } 
    }
     
    Последнее редактирование: 29 июн 2014