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

Замена get переменной на чпу категорию


Recommended Posts

Привет!

 

Есть url типа: site.ru/categoriya и к ней добавляем get-переменную (допустим size), получаем примерно такой url: site.ru/catogoriya&size=20x20

 

Подскажите как превратить такой урл? например в такой: site.ru/catogoriya/20х20    (желательно еще конечно х латиницей, заменить на русски Х=), но это мелочь, можно будет допилить)

Все что нашел на форуме, близко но не то...

 

Не могу даже понять как вычленять эту переменную, с "&", с "=", все вместе или вообще достаточно только "size" найти?  Наработки даже не вижу смысла выкладывать, все равно не работают

 

 

 

 

OpenCart 1.5.6.4

ЧПУ родной, не pro

 

 

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


Решил проблему. Может кому пригодится:

все правки только в одном фале (catalog\controller\common\seo_url.php), поэтому сделать будет не трудно

 

Еще раз напишу что дано:

 

1. Базовое урл (с включенным ЧПУ и дополнительно переданной переменной size)  doski.ru/krutaya_fanera&size=80x200    //krutaya_fanera в данном случае категория, но может быть и продуктом

 

2. Урл которое надо получить: doski.ru/krutaya_fanera/fanera-80x200-sm

 

 

В функции index

// Decode URL
		if (isset($this->request->get['_route_'])) {
			$parts = explode('/', $this->request->get['_route_']);
			
			foreach ($parts as $part) {
				
				
// Нужно вставить следующие строки
				$size_buf = explode('-', $part);
				if ($size_buf[0]=='fanera'){
					 $this->request->get['size'] = $size_buf[1];
				}
//конец вставки

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

В функцию rewrite тоже добавить пару строк надо:

		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) {
						$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) {
							$url .= '/' . $query->row['keyword'];
						}							
					}
					
					unset($data[$key]);
				//вставляем это:	
				}elseif ($key == 'size'){
  					$url .= '/fanera-'.$value.'-sm';
  					
  					unset($data[$key]);
                                 //конец вставки
				}
			}
		}

Кстати, таким образом можно заменить и переменные sort или page на какие-нибудь ЧПУ-шные

 

 

На самом деле проверить работает ли код в функции rewrite у меня не получилось. Я вообще не уверен, что моем случае он нужен.

 

 

Но  думаю есть одна более существенная проблема, прошу помощи знающих: мне кажется такой способ очень ресурсозатратный. Т.к. каждая $part будет проходить через  explode('-', $part). Я конечно использовал более редкий символ в урл "-", а не "_" что бы explode не выполнялся, но не уверен что это поможет. Не будет ли такой способ слишком "тяжелым" и медленным? Может кто-то подскажет альтернативное решение.

 

п.с. добавить алиасы в бд, чтобы работало как с обычным product_id например, тоже была мысль, но это менее гибко и каждый новый размер пришлось бы добавлять в базу

 

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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