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

[БАГ] *Fix Проблема в ЧПУ: лишний контент в категориях


yandex-lexa

Recommended Posts

Версия магазина: ОС 1.4.8

Изменений вносилось очень много )

Хостинг у хостера.

Проблема (Баг)

Все еще началось с этого

Создал категории

категория/подкатегория 1/производитель/

категория/подкатегория 2/производитель/

категория/подкатегория 3/производитель/

Последние 2 создал, пожже на пару дней, но сути это не меняет дела, потому что ID у них всеравно будет выше первой

Добавляем товары в категория/подкатегория 1/производитель/ и получаем товары сразу в 3х подкатегориях

категория/подкатегория 1/производитель/товары

категория/подкатегория 2/производитель/товары

категория/подкатегория 3/производитель/товары

потому что у них псевдоним (производитель) одинаковый, ко всему по схеме работы СЕО в ОС мы можем получить доступ к товарам и как

категория/подкатегория 1/производитель/товары

категория/подкатегория 1/товары

подкатегория 1/товары

категория/товары

Ну и все различные вариации этой комбинации.

Добавляем товары в категория/подкатегория 2/производитель/ и получаем ...

А ничего мы не получаем. В модуле последние, товары есть, ссылки рабочие, а вот зайдя в категорию товара нет, только тот товар что мы добавили в подкатегория 1 (потому что у них общий производитель)

Так же происходит с 3й подкатегорией, ну и по ходу так далее.

Если добавить товар из подкатегории 2 (он должен быть в ней) в подкатегорию 1 или дополнительно к ней добавить 1ю подкатегорию, соответственно он появится опять в 3х местах.

З.Ы. В общем я постарался максимально детально выложить проблему. Если надо что то разъяснить спрашивайте. Просто хочу этот вопрос решить, муляет, понимаю что есть менее радикальные решения, типа как то менять имя производителя и будет мне счастье. Но как то это не хочется делать т.к. это же имя производителя и оно должно и так работать. Если кому то этот вопрос тоже интересен и есть возможность протестить у себя в магазине, буду благодарен.

Интуитивно догадываюсь что все решение в:

/catalog/controller/common/seo_url.php

l/catalog/model/tool/seo_url.php

В проверке формирования адреса, что тут можно решить сразу обе проблемы. Но PHP я не силен, по этому решить этот вопрос сил и знаний у меня не хватит.

Давайте решим этот трабл вместе :)

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


по моему это баг не опенкарта, а баг пользователя, который пытается присвоить 1 псевдоним 2м или более разным категориямстатьямтоварампроизводителям. А решение тут наверно такое: сделать поле keywords в таблице url_alias уникальным, чтоб даже если сильно захотелось сделать одинаковый псевдоним опенкарт бы не дал сделать этого.

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


Почему это баг пользователя? Как это так, если один производитель не может быть в двух разных категориях товара? Сами рассудите. Если к примеру кто то будет продавать технику и его будут такие бренды как самсунг ЛДЖи т.д. ведь это бренды которые грубо говоря производят все, начиная от батареек заканчивая процессорами и микроконтроллерами. И что людям делать, как разделять товар?Но это лирика. Можно подробнее о возможном решении на счет уникальности keywords в таблице url_alias ?Каким образом его сделать уникальным? Сделать auto_increment не для url_alias_id а для url_alias? Или добавить к PRIMARY еще и keywords?

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


Почему это баг пользователя? Как это так, если один производитель не может быть в двух разных категориях товара? Сами рассудите. Если к примеру кто то будет продавать технику и его будут такие бренды как самсунг ЛДЖи т.д. ведь это бренды которые грубо говоря производят все, начиная от батареек заканчивая процессорами и микроконтроллерами. И что людям делать, как разделять товар?

делайте одинаковое название, но разные псевдонимы

Но это лирика. Можно подробнее о возможном решении на счет уникальности keywords в таблице url_alias ?Каким образом его сделать уникальным? Сделать auto_increment не для url_alias_id а для url_alias? Или добавить к PRIMARY еще и keywords?

вы мне сейчас мозг просто разорвали.Лучше пока не заходите в СУБД, пока не ознакомитесь с основными принципами базы данных.
Надіслати
Поділитися на інших сайтах


делайте одинаковое название, но разные псевдонимы

Это не решение. Если есть производитель к примеру Samsung, то он должен им быть во всех категориях, на то они ЧПУСпасибо за помощь :)
Надіслати
Поділитися на інших сайтах


И так, предлагаю решение данной проблемы, т.к. решение использовать разные псевдонимы это не решение.

Решение

В файле /catalog/controller/common/seo_url.php

меняем

public function index() {		if (isset($this->request->get['_route_'])) {			$parts = explode('/', $this->request->get['_route_']);						foreach ($parts as $part) {				$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'");								if ($query->num_rows) {					$url = explode('=', $query->row['query']);										if ($url[0] == 'product_id') {						$this->request->get['product_id'] = $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];						}					}
на

public function index() {		if (isset($this->request->get['_route_'])) {			$parts = explode('/', $this->request->get['_route_']);			$parent_category_id = 0;						foreach ($parts as $part) {				$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'");											if ($query->num_rows) {					$row = $query->row;										if($query->num_rows > 1) {												foreach($query->rows as $cur_row) {							$url = explode('=', $cur_row['query']);							if ($url[0] == 'category_id') {								$query_category_id = $this->db->query("SELECT * FROM " . DB_PREFIX . "category WHERE parent_id = " . $parent_category_id . " AND category_id = " . $url[1]);																if($query_category_id->num_rows) {									$row = $cur_row;									break;								}							} else if($url[0] == 'manufacturer_id') {								$row = $cur_row;							}						}											}									$url = explode('=', $row['query']);										if ($url[0] == 'product_id') {						$this->request->get['product_id'] = $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_id = $url[1];					}
Надіслати
Поділитися на інших сайтах


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

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

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

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

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

Вхід

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

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

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

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

Important Information

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