SiteX

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

Рекомендуемые сообщения

SiteX    1

Привет!

 

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

 

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

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

 

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

 

 

 

 

OpenCart 1.5.6.4

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
SiteX    1

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

все правки только в одном фале (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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу