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

Избавляемся от дублей в OpenCart


Recommended Posts

Избавляемся от дублей в OpenCart

На днях мне поставили задачу запустить в кратчайшие сроки интернет-магазин. Я начал искать подходящее решение среди готовых CMS и мой выбор пал на OpenCart (Версия 1.5.5.1). Данная CMS как и все не идеальна и поэтому я начал ковырять ее и изучать как там все устроено. 

Первое что я заметил это куча дублей при включенном ЧПУ. Проблема дублей товаров решается при помощи тега rel='canonical' а вот с категориями дело обстояло намного хуже. Каждая категория была доступна по +100500 URL. 
Например категория site.ru/category/podcategory будет доступна по следующим URL
site.ru/category/podcategory/a 
site.ru/category/podcategory/ab
site.ru/category/podcategory/abc
и так до бесконечности. 

Решается проблема не сложно.
Открываем файл catalog/controller/common/seo_url.php ищем 39 строку $this->request->get['route'] = 'error/not_found'; и после ее вставляем 
return $this->forward($this->request->get['route']);

Эта проблема возникала из-за того что URI /category/podcategory/abc разбивался на массив и при обходе его циклом, каждый элемент массива проверялся, при помощи запроса к БД, соответствует ли он категории или продукту, если нет то для get['route'] присваивалось значение error/not_found. 

В нашем случае при первой итерации цикла get['path'] будет присваиваться ID категории «category», при второй итерацииget['path'] будет перезаписываться на ID категории «podcategory» при третей итерации get['route'] присваивалось значение error/not_found потому что продукта abc не существует. 

Все выглядит хорошо, но в следующем блоке if-ов get['route'] перезаписывается на product/category. Это происходит из-за того что у нас есть get['path'] соответствующее ID категории, что позволяет зайти под условие и перезаписатьget['route'].

Данную проблему я решил тем что, возвращаю return $this->forward($this->request->get['route']); сразу же после того как get['route'] станет равным error/not_found не дожидаясь пока она перезапишется. 

Хоть проблема дублей товаров и решается тегом rel='canonical', но все же данное изменение позволяет избавиться от большинства и остается только несколько. 
Теперь товар не будет доступен по таким URL:
site.ru/category/podcategory123/tovar
site.ru/category/podcategory123456/tovar
site.ru/category123/podcategory/tovar
и так далее.
Избавляемся от дублей в OpenCart
На днях мне поставили задачу запустить в кратчайшие сроки интернет-магазин. Я начал искать подходящее решение среди готовых CMS и мой выбор пал на OpenCart (Версия 1.5.5.1). Данная CMS как и все не идеальна и поэтому я начал ковырять ее и изучать как там все устроено. 

Первое что я заметил это куча дублей при включенном ЧПУ. Проблема дублей товаров решается при помощи тега rel='canonical' а вот с категориями дело обстояло намного хуже. Каждая категория была доступна по +100500 URL. 
Например категория site.ru/category/podcategory будет доступна по следующим URL
site.ru/category/podcategory/a 
site.ru/category/podcategory/ab
site.ru/category/podcategory/abc
и так до бесконечности. 

Решается проблема не сложно.
Открываем файл catalog/controller/common/seo_url.php ищем 39 строку $this->request->get['route'] = 'error/not_found'; и после ее вставляем 
return $this->forward($this->request->get['route']);

 

Эта проблема возникала из-за того что URI /category/podcategory/abc разбивался на массив и при обходе его циклом, каждый элемент массива проверялся, при помощи запроса к БД, соответствует ли он категории или продукту, если нет то для get['route'] присваивалось значение error/not_found. 

В нашем случае при первой итерации цикла get['path'] будет присваиваться ID категории «category», при второй итерацииget['path'] будет перезаписываться на ID категории «podcategory» при третей итерации get['route'] присваивалось значение error/not_found потому что продукта abc не существует. 

Все выглядит хорошо, но в следующем блоке if-ов get['route'] перезаписывается на product/category. Это происходит из-за того что у нас есть get['path'] соответствующее ID категории, что позволяет зайти под условие и перезаписатьget['route'].

Данную проблему я решил тем что, возвращаю return $this->forward($this->request->get['route']); сразу же после того как get['route'] станет равным error/not_found не дожидаясь пока она перезапишется. 

Хоть проблема дублей товаров и решается тегом rel='canonical', но все же данное изменение позволяет избавиться от большинства и остается только несколько. 
Теперь товар не будет доступен по таким URL:
site.ru/category/podcategory123/tovar
site.ru/category/podcategory123456/tovar
site.ru/category123/podcategory/tovar
и так далее.

Материл взят с сайта http://habrahabr.ru, ссылка на статью http://habrahabr.ru/sandbox/65278/

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


  • 8 months later...

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

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

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

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

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

Вхід

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

Вхід зараз

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

Important Information

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