Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Проблема с категориями/подкатегориями


Гість

Recommended Posts

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

При открытии сайта спортивного питания в категории "аксессуары" и "аминокислоты" есть одинаковая подкатегория "Линия Body Shaper".

Самое интересное, что урл открывается правильный, а вот информация на нем...

Так вот независимо от того, по какой именно из них кликнуть откроется все-равно первая... Как можно это исправить не назначая разных псевдонимов? :blink:

Надіслати
Поділитися на інших сайтах

никак

"псевдоним" один - ссылка на первую категорию с ним.

вот и все.

если не хотите полностью менять Псевдонимы для категорий, то добавляйте ID-категории при формировании SEO-URL

Надіслати
Поділитися на інших сайтах

Тоже столкнулся с такой проблемой, когда перегонял товары из другого движка в opencart.

Решил это на уровне патча к конкретно моей задаче.

Чтобы бы не терзать БД лишними запросами, добавил столбец 'parent_id' в таблицу oc_url_alias после 'keyword'

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

Чтобы обойтись без доп. столбца - в seo_url.php нужно добавить несколько доп. запросов к БД,

тогда все будет работать и в стандартной комплектации опенкарта.

ALTER TABLE oc_url_alias ADD parent_id INT AFTER keyword

Изменил запрос к БД и добавил пару строк в catalog/controller/common/seo_url.php

Код с изменениями:

<?php
class ControllerCommonSeoUrl extends Controller {
       public function index() {
               if (isset($this->request->get['_route_'])) {
                       $parts = explode('/', $this->request->get['_route_']);

                       $parent_category = 0;      // ADDED

       foreach ($parts as $part) {

       // $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'");

       // CHANGED TO:

       $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "' AND parent_id = '".$parent_category."'");

                               if ($query->num_rows) {
                                       $url = explode('=', $query->row['query']);

                                       if ($url[0] == 'product_id') {
                                               $this->request->get['product_id'] = $url[1];
                                               $parent_category = $url[1];
                                       }

                                       if ($url[0] == 'category_id') {
                                               if (!isset($this->request->get['path'])) {
                                                       $this->request->get['path'] = $url[1];

                                               } else {
                                                       $this->request->get['path'] .= '_' . $url[1];
                                               }

                                               $parent_category = $url[1];               // ADDED
                                       }

                                       if ($url[0] == 'manufacturer_id') {
                                               $this->request->get['manufacturer_id'] = $url[1];

                                       }

                                       if ($url[0] == 'information_id') {
                                               $this->request->get['information_id'] = $url[1];

                                       }
                               } else {
                                       $this->request->get['route'] = 'error/not_found';
                               }
                       }

                       if (isset($this->request->get['product_id'])) {
                               $this->request->get['route'] = 'product/product';
                       } elseif (isset($this->request->get['path'])) {
                               $this->request->get['route'] = 'product/category';
                       } elseif (isset($this->request->get['manufacturer_id'])) {
                               $this->request->get['route'] = 'product/manufacturer';
                       } elseif (isset($this->request->get['information_id'])) {
                               $this->request->get['route'] = 'information/information';
                       }

                       if (isset($this->request->get['route'])) {
                               return $this->forward($this->request->get['route']);
                       }
               }
       }
}
?>

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.