Помощь Вывод категории с большим уровнем вложенности и коротким url

Тема в разделе "Opencart", создана пользователем Freeman Liberty, 18 сен 2014.

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

    Freeman Liberty

    Регистр.:
    19 май 2009
    Сообщения:
    468
    Симпатии:
    171
    Работаю над магазином женской одежды и аксессуаров на ocstore, застопорился на структуре категорий .
    Дело в том структура получается достаточно сложной с большим уровнем вложенности подкатегорий.

    Например, категория «Женская одежда» включает в себя категории «Платья», «Юбки», «Футболки» и т.д.
    2014-09-18_104433.jpg
    В свою очередь категория «Платья» должна включать в себя подкатегории выводящие платья по цветам «Красные платья», «Черные платья» и т.д.; сезонам «Летние», «Зимние»; длине «Короткие платья», «Длинные платья», а еще по сезону, фасону и т.п.

    Если реализовывать эту структуру с помощью подкатегорий получается слишком большой уровень вложенности и длинный урл
    http://site.ru/zhenskaya-odezhda/platya/po-tcvetu/belye-platya/ или
    http://site.ru/zhenskaya-odezhda/platya/po-sezonu/letneye-platya/

    Хотелось бы, чтобы урл имел вида http://site.ru/platya/belye-platya/ или http://site.ru /belye-platya/
    т.е. чтобы в url выводилась только последняя категория.
    Возможно ли так доработать Seo PRO?
    Или, есть другие пути решения данного вопросы?
     
  2. Lery

    Lery

    Регистр.:
    17 май 2013
    Сообщения:
    273
    Симпатии:
    86
    Настройки - Сервер - ЧПУ товаров с категориями выберите НЕТ... и у вас не будут в адресной строке отображаться подкатегории...
     
  3. Freeman Liberty

    Freeman Liberty

    Регистр.:
    19 май 2009
    Сообщения:
    468
    Симпатии:
    171
    подкатегории не будут отображаться только для товаров, для самих подкатегорий этот механизм не работает.
    http://site.ru/zhenskaya-odezhda/platya/po-tcvetu/belye-platya/ - это адрес подкатегории, а не товара.
    Было бы гораздо лучше если бы подкатегории выводились без родительской - http://site.ru/platya/ или http://site.ru/belye-platya/
    Что позволило бы не опасаться изменения улов в случае смены структуры или уровня вложенности категории.
     
  4. Lery

    Lery

    Регистр.:
    17 май 2013
    Сообщения:
    273
    Симпатии:
    86
    тогда стандартным сео-про не обойтись.. необходимо ставить дополнительно модули..
     
  5. Freeman Liberty

    Freeman Liberty

    Регистр.:
    19 май 2009
    Сообщения:
    468
    Симпатии:
    171
    Решение.
    Стандартными средствами OpenCart убрать родительские категории в SEO у нас не получится, для решения данной задачи нам нужно будет отредактировать SEO контроллер.

    Редактируем seo_pro

    Открываем файл “catalog/controller/common/seo_pro.php”, в функции rewrite() находим код:
    Код:
    case 'path':
        $categories = explode('_', $value);
        foreach ($categories as $category) {
            $queries[] = 'category_id=' . $category;
        }
        unset($data[$key]);
        break;
    Заменяем его на:
    Код:
    case 'path':
        $categories = explode('_', $value);
        $queries[] = 'category_id=' . end($categories);
        unset($data[$key]);
        break;
    Открываем файл “catalog/controller/common/seo_url.php”, в функции rewrite() находим код:
    Код:
    } elseif ($key == 'path') {
        $categories = explode('_', $value);
      
        foreach ($categories as $category) {
            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)$category . "'");
    
            if ($query->num_rows) {
                $url .= '/' . $query->row['keyword'];
            }                           
        }
      
        unset($data[$key]);
    }
    По аналогии с seo_pro заменяем код на:
    Код:
    } elseif ($key == 'path') {
        $categories = explode('_', $value);
      
        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = 'category_id=" . (int)end($categories) . "'");
        if ($query->num_rows) {
            $url .= '/' . $query->row['keyword'];
        }
      
        unset($data[$key]);
    }
    Источник: halfhope.ru