Jump to content
Sign in to follow this  
EvgeniyNesterenko

подстройка сео урл

Recommended Posts

всем добра  :-)

нуждаюсь в помощи!

нужно настроить seo url в opencart 2.x.x, так чтоб все продукты(товары) отображались таким site.ru/product/'product_id' образом. 

 

class ControllerCommonSeoUrl extends Controller {
public function index() {
// Add rewrite to url class
if ($this->config->get('config_seo_url')) {
$this->url->addRewrite($this);
}

// Decode URL
if (isset($this->request->get['_route_'])) {
$parts = explode('/', $this->request->get['_route_']);

// remove any empty arrays from trailing
if (utf8_strlen(end($parts)) == 0) {
array_pop($parts);
}

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];
}
}

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

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

if ($query->row['query'] && $url[0] != 'information_id' && $url[0] != 'manufacturer_id' && $url[0] != 'category_id' && $url[0] != 'product_id') {
$this->request->get['route'] = $query->row['query'];
}
} else {
$this->request->get['route'] = 'error/not_found';

break;
}
}

if (!isset($this->request->get['route'])) {
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/info';
} elseif (isset($this->request->get['information_id'])) {
$this->request->get['route'] = 'information/information';
}
}

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

public function rewrite($link) {
$url_info = parse_url(str_replace('&', '&', $link));

$url = '';

$data = array();

parse_str($url_info['query'], $data);

foreach ($data as $key => $value) {
if (isset($data['route'])) {
if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/info' || $data['route'] == 'product/product') && $key == 'manufacturer_id') || ($data['route'] == 'information/information' && $key == 'information_id')) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE `query` = '" . $this->db->escape($key . '=' . (int)$value) . "'");

if ($query->num_rows && $query->row['keyword']) {
$url .= '/' . $query->row['keyword'];

unset($data[$key]);
}
} 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 && $query->row['keyword']) {
$url .= '/' . $query->row['keyword'];
} else {
$url = '';

break;
}
}

unset($data[$key]);
}
}
}

if ($url) {
unset($data['route']);

$query = '';

if ($data) {
foreach ($data as $key => $value) {
$query .= '&' . rawurlencode((string)$key) . '=' . rawurlencode((string)$value);
}

if ($query) {
$query = '?' . str_replace('&', '&', trim($query, '&'));
}
}

return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . $query;
} else {
return $link;
}
}
}

Share this post


Link to post
Share on other sites

Чем Вам не угодили ЧПУ ?!

Share this post


Link to post
Share on other sites

у товара урл будет код(артикул) товара  урл  будет получатся такой site.ru/category/subcategory/00057845 или такой site.ru/00057845 а нужно site.ru/product/00057845

Share this post


Link to post
Share on other sites

А почему просто не хотите сделать, велик начинаете изобретать

 

site.ru/product-00057845

Share this post


Link to post
Share on other sites

думал велик уже изобретен давно  :oops:

Самый просто вариант site.ru/product-00057845

Генерите любым seo генератором ЧПУ, у которого есть токен ID товара

Share this post


Link to post
Share on other sites
 site.ru/product-00057845

 

это самый оптимальный вариант

Share this post


Link to post
Share on other sites

Я подозреваю что дело в сохранении адресации при миграции, иначе бессмысленный бред создавать это

Share this post


Link to post
Share on other sites

Я подозреваю что дело в сохранении адресации при миграции, иначе бессмысленный бред создавать это

В обоих случаях - бессмысленная

301 с domen.com/product/id очень легко сделать на domen.com/product-id

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By Leingard
      Очень лёгкий и простой модуль для ручной генерации SEO URL для товара, простым нажатием кнопки "Генерировать ссылку" под полем SEO URL.
      Преобразует Ваше название в правильный SEO_URL. 
      Не конфликтует с другими модулями и полностью совместим со всеми версиями 2.*
       
      Друзья, Ваша оценка в отзывах поможет развитию модуля
       
      Инструкция:
      Установить модуль В товар -> Данные найти поле SEO URL: и нажать кнопку "Генерировать ссылку". SEO URL сгенерируется из введенного Ваши названия  
    • By Leingard
      Скачать/Купить дополнение


      Seo Url Gen - генерация SEO URL для товаров из названия
      Очень лёгкий и простой модуль для ручной генерации SEO URL для товара, простым нажатием кнопки "Генерировать ссылку" под полем SEO URL.
      Преобразует Ваше название в правильный SEO_URL. 
      Не конфликтует с другими модулями и полностью совместим со всеми версиями 2.*
       
      Друзья, Ваша оценка в отзывах поможет развитию модуля
       
      Инструкция:
      Установить модуль В товар -> Данные найти поле SEO URL: и нажать кнопку "Генерировать ссылку". SEO URL сгенерируется из введенного Ваши названия  
      Добавил Leingard Добавлено 26.01.2018 Категория SEO, карта сайта, оптимизация Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1
      2.0 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х Обращение к серверу разработчика Нет Старая цена 0  
    • By Rainier
      Изменил структуру сайта на Opencart. Удалил главную категорию MAGAZIN, вместо нее использую префикс /magazin/ для всех дочерних категорий, которые были вложены, чтобы их url не менялись. Далее создал информационную страницу с соответствующим содержанием и присвоил ей URL удаленной страницы категории: https://invalidnye-koljaski.ru/magazin/ 
      Однако при переходе на нее выдает 404
       
      Более того 301 редирект также не работает, он должен вести на https://invalidnye-koljaski.ru/store/   (это дубль страницы https://invalidnye-koljaski.ru/magazin/)
      Кеш Seo-Pro почищен, модуль UNI SEO Pro настроен корректно, остальные редиректы с других страниц работают как нужно
       
      В чем проблема, подскажите, пожалуйста? 
    • By BB30
      И второй вопрос по теме ссылок.
      При создании например категории на сайте OC создает и генерирует ссылку в Дизайн - SEO URL сразу для все магазинов = поддоменов
      например 
      category_id=65 igrushki Иваново Russian   category_id=65 igrushki По умолчанию Russian  
      А вот ссылки, кот идут из коробки только для того, что по умолчанию.
      например
      account/account account По умолчанию Russian   account/address address-book По умолчанию Russian  
      Как бы все ссылки из коробки разом сгенерировать и для других магазинов т.к., их будет становится все больше и вручную все это добавлять очень не хочется.
       
       
       
       
       
       
    • By BB30
      Добрый день.
       
      Сайт с поддоменами для регионов. Пока два магазина = региона.
      Изначально после установки в Дизайн - seo url для главной страницы в поле common/home было пустое значение, сгенерированное при установке магазина по умолчанию.
      При добавлении второго магазина для другого региона (регионы выбираются при помощи модуля ProgRoman - CityManager Pro 8.1) в common/home было обычное index.php?route=common/home, которое я хотел заменить на /пустоту/ по аналогии с магазином по умолчанию, однако не дает это сделать.
      Пришлось прописать index.html, а потом и для магазина по умолчанию тоже, иначе находясь на главной страницы при смене региона пользователь попадал на 404.
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.