Jump to content
Sign in to follow this  
SiteX

Замена 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

 

 

Share this post


Link to post
Share on other sites

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

все правки только в одном фале (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 например, тоже была мысль, но это менее гибко и каждый новый размер пришлось бы добавлять в базу

 

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  

  • 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.