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

Одинковые ЧПУ (SEO URL) для разных языков в OpenCart 3 / ocStore 3


SergeTkach

2 974 перегляди

В поддержку моего модуля по массовой генерации ЧПУ для OpenCart часто обращаются с вопросом: как мне сделать одинаковые ЧПУ для русского и украинского языков (в принципе, проблема может встретьться и для других языков, просто такой расклад встречается в OpenCart чаще всего).

 

Так вот, этот бред (проверка в контроллере товара на эту самую одинаковость) вообще не понятно, зачем нужно. В Дизайн -> SEO URL можно спокойненько добавлять одинаковые ЧПУ для разных языков. На витрине все тоже прекрасно работает. А вот при сохранении товара в админке, нате Вам ошибочку...

 

Проблемка выглядит примерно так:

odinakovye-seo-url-dlya-raznyh-yazikov-opencart-3.thumb.jpg.eb94e094e2babdae10a4540ce9ab40df.jpg

 

 

Так вот, есть такой замечательный модификатор Allow Same SEO URL For Different Languages (OC3.0x), которые убирает это недоразумение.

 

В комментариях ниже, следовало объяснение, почему стоит, чтобы ЧПУ были разными для разных языков. Но если у вас на сайте будут "Языковые папки", то об этой заморочке можно не париться:

 

10 коментарів


Recommended Comments

Странно, но что это?

 

		$seo_urls = $this->model_design_seo_url->getSeoUrlsByKeyword($this->request->post['keyword']);

		foreach ($seo_urls as $seo_url) {
			if ($seo_url['store_id'] == $this->request->post['store_id'] && $seo_url['query'] != $this->request->post['query']) {
				$this->error['keyword'] = $this->language->get('error_exists');
				
				break;
			}
		}

 

Надіслати
Цитата

На витрине все тоже прекрасно работает.

Поясните как прекрасно работает?
Вы на странице xyz , пусть en-gb

переключили язык изменилась кука и сессия
Возможно вы попадаете на альтернативный

А теперь зашла ПС
Какой язык будет? дефолтный
 

Надіслати
В 23.06.2021 в 16:42, chukcha сказав:

Поясните как прекрасно работает?
Вы на странице xyz , пусть en-gb

переключили язык изменилась кука и сессия
Возможно вы попадаете на альтернативный

А теперь зашла ПС
Какой язык будет? дефолтный
 

 

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

 

Также можно использовать вот такой бесплатный модуль для создания "Языковых папок", опубликованный не так давно.

 

__________________________________________

Есть еще один бесплатный вариант подобного модуля, который называется похоже на платный, но работает немного иначе и, соответственно, не создает папку языка для любой ссылки сайта. Вот в случае использования этого модуля, нельзя делать одинаковые ЧПУ для разных языков из-за проблемы, обозначенной @chukcha

Если у вас вот этот модуль, тогда в модуле генерации ЧПУ (SEO URL Generator) необходимо поставить в формулу префикс языка. К примеру, ru-[product_name].

 

  • +1 1
Надіслати
1 час назад, chukcha сказал:

Странно, но что это?

 


		$seo_urls = $this->model_design_seo_url->getSeoUrlsByKeyword($this->request->post['keyword']);

		foreach ($seo_urls as $seo_url) {
			if ($seo_url['store_id'] == $this->request->post['store_id'] && $seo_url['query'] != $this->request->post['query']) {
				$this->error['keyword'] = $this->language->get('error_exists');
				
				break;
			}
		}

 

Действительно странно, потому что ведь сохраняется!

В ocStore 3.0.2.0 - это 100%

Проверил в OpenCart 3.0.3.7 русская сборка - тоже сохраняется.

Надіслати
1 час назад, chukcha сказал:

if ($seo_url['store_id'] == $this->request->post['store_id'] && $seo_url['query'] != $this->request->post['query']) {

 

У меня глюк, или тут как раз таки выдаст ошибку, если новый ЧПУ будет отличаться от того, который в уже существует в базе?

Надіслати
Только что, SergeTkach сказал:

 

У меня глюк, или тут как раз таки выдаст ошибку, если новый ЧПУ будет отличаться от того, который в уже существует в базе?

Не, не выдает... Очень интересно

Надіслати

еще можно тут под корректировать

admin/model/design/seo_url.php

Скрытый текст


   public function getSeoUrlsByKeyword($keyword) {
      $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "seo_url` WHERE keyword = '" . $this->db->escape(trim($keyword)) . "'");
 
      return $query->rows;
   }  
   
   public function getSeoUrlsByQuery($query) {
      $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "seo_url` WHERE keyword = '" . $this->db->escape(trim($query)) . "'");
 
      return $query->rows;
   }  
 
Змінено користувачем Desserro
Надіслати
В 15.06.2023 в 22:37, Desserro сказав:

еще можно тут под корректировать

admin/model/design/seo_url.php

  Приховати вміст

 

 

   public function getSeoUrlsByKeyword($keyword) {
      $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "seo_url` WHERE keyword = '" . $this->db->escape(trim($keyword)) . "'");
 
      return $query->rows;
   }  
   
   public function getSeoUrlsByQuery($query) {
      $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "seo_url` WHERE keyword = '" . $this->db->escape(trim($query)) . "'");
 
      return $query->rows;
   }  

 

 

 

Це для чого? Бо я щось не в'їхав. Правда й код орігінального файлу не дивився.

Надіслати
16.06.2023 в 20:07, SergeTkach сказал:

 

Це для чого? Бо я щось не в'їхав. Правда й код орігінального файлу не дивився.

 

 

Наприклад можуть створюватись дублі або...

Наприклад так:

 

Скрытый текст

image.thumb.png.36630bea553d675efe7b87ac5f4ff232.png

 

 

Виправлення на github

 

Добавить настройку часового пояса на страницу настроек магазина от JesseOC · Запрос на вытягивание #6269 · opencart/opencart · GitHub

 

https://github.com/opencart/opencart/issues/6271

Надіслати

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

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

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

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

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

Вхід

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

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

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

Important Information

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