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

Изменение видов ссылок ЧПУ


Recommended Posts

Здравствуйте , подскажите как поменять вид ссылок с таких:

/index.php?route=common/home

/index.php?route=account/wishlist

/index.php?route=checkout/cart

и так далее.

На такой вид:

/home

/wishlist

/cart

и так далее.

Заранее огромное спасибо!

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


Здравствуйте , подскажите как поменять вид ссылок с таких:

/index.php?route=common/home

/index.php?route=account/wishlist

/index.php?route=checkout/cart

и так далее.

На такой вид:

/home

/wishlist

/cart

и так далее.

Заранее огромное спасибо!

Зависит от версии Вашего магазина,

в catalog/controller/common/seo_url.php нужно вставить что то вроде этого (версия opencart 1.5.x):

в функцию index

if ( $this->request->get['_route_'] == 'home') {
  return $this->forward('common/home');
}
в функцию rewrite

elseif ($data['route'] == 'common/home') {
  $url .= '/home';
}

ну и всё в таком духе

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

Зависит от версии Вашего магазина,

в catalog/controller/common/seo_url.php нужно вставить что то вроде этого (версия opencart 1.5.x):

в функцию index

if ( $this->request->get['_route_'] == 'home') {
  return $this->forward('common/home');
}
в функцию rewrite

elseif ($data['route'] == 'common/home') {
  $url .= '/home';
}

ну и всё в таком духе

<?php
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_']);
			
			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];
					}	
				} else {
					$this->request->get['route'] = 'error/not_found';	
				}
			}
			
			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/product';
			} elseif (isset($this->request->get['information_id'])) {
				$this->request->get['route'] = 'information/information';
			}
			
			if (isset($this->request->get['route'])) {
				return $this->forward($this->request->get['route']);
			}
		}
	}
	
	public function rewrite($link) {
		if ($this->config->get('config_seo_url')) {
			$url_data = parse_url(str_replace('&', '&', $link));
		
			$url = ''; 
			
			$data = array();
			
			parse_str($url_data['query'], $data);
			
			foreach ($data as $key => $value) {
				if (isset($data['route'])) {
					if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/product' || $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]);
					}
				}
			}
		
			if ($url) {
				unset($data['route']);
			
				$query = '';
			
				if ($data) {
					foreach ($data as $key => $value) {
						$query .= '&' . $key . '=' . $value;
					}
					
					if ($query) {
						$query = '?' . trim($query, '&');
					}
				}

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

Подскажи пожалуйста где менять))

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


<?php
class ControllerCommonSeoUrl extends Controller {
.....		}		
	}	
}
?>

Подскажи пожалуйста где менять))

<?php
class ControllerCommonSeoUrl extends Controller {
	/* SEO Custom URL */
	private $url_list = array (
            'common/home'       => 'home',
            'checkout/cart'     => 'cart',
            'account/register'  => 'account/register'
            );
	/* SEO Custom URL */

        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_']);
                        
                        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];
                                        }       
                                } else {
                                        $this->request->get['route'] = 'error/not_found';       
                                }
                        }
                        /* SEO Custom URL */
			if ( $_s = $this->setURL($this->request->get['_route_']) ) {
                                $this->request->get['route'] = $_s;
                        }/* SEO Custom URL */

                        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/product';
                        } elseif (isset($this->request->get['information_id'])) {
                                $this->request->get['route'] = 'information/information';
                        }
                        
                        if (isset($this->request->get['route'])) {
                                return $this->forward($this->request->get['route']);
                        }
                }
        }
        
        public function rewrite($link) {
                if ($this->config->get('config_seo_url')) {
                        $url_data = parse_url(str_replace('&', '&', $link));
                
                        $url = ''; 
                        
                        $data = array();
                        
                        parse_str($url_data['query'], $data);
                        
                        foreach ($data as $key => $value) {
                                if (isset($data['route'])) {
                                        if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/product' || $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]);
                                        }
					/* SEO Custom URL */
					if( $_u = $this->getURL($data['route']) ){
                                            $url .= $_u;
                                            unset($data[$key]);
                                        }/* SEO Custom URL */
                                }
                        }
                
                        if ($url) {
                                unset($data['route']);
                        
                                $query = '';
                        
                                if ($data) {
                                        foreach ($data as $key => $value) {
                                                $query .= '&' . $key . '=' . $value;
                                        }
                                        
                                        if ($query) {
                                                $query = '?' . trim($query, '&');
                                        }
                                }

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

	/* SEO Custom URL */
	public function getURL($route) {
                if( count($this->url_list) > 0) {
                     foreach ($this->url_list as $key => $value) {
                        if($route == $key) {
                            return '/'.$value;
                        }
                     }
                }
                return false;
        }
        public function setURL($_route) {
                if( count($this->url_list) > 0 ){
                     foreach ($this->url_list as $key => $value) {
                        if($_route == $value) {
                            return $key;
                        }
                     }
                }
                return false;
        }/* SEO Custom URL */
}
?>
Это Ваш файл, у меня работает, но немного отличается, проверяйте...

Для добавление и изменения правьте массив

private $url_list = array (
            'common/home'       => 'home',
            'checkout/cart'     => 'cart',
            'account/register'  => 'account/register'
            );
Кстати если изменить на

'account/register'  => 'register'
работать тоже должно

тестируйте.... о результатах отпишитесь

  • +1 2
Надіслати
Поділитися на інших сайтах

Что то мне подсказывает что напрашивается модуль для редактирования таких ссылок через админку...

Если успею и не буду сильно праздновать праздник то сегодня наваяю... :rolleyes:

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

Что то мне подсказывает что напрашивается модуль для редактирования таких ссылок через админку...

Если успею и не буду сильно праздновать праздник то сегодня наваяю... :rolleyes:

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

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


<?php
class ControllerCommonSeoUrl extends Controller {
	/* SEO Custom URL */
	private $url_list = array (
            'common/home'       => 'home',
            'checkout/cart'     => 'cart',
            'account/register'  => 'account/register'
            );
	/* SEO Custom URL */

        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_']);
                        
                        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];
                                        }       
                                } else {
                                        $this->request->get['route'] = 'error/not_found';       
                                }
                        }
                        /* SEO Custom URL */
			if ( $_s = $this->setURL($this->request->get['_route_']) ) {
                                $this->request->get['route'] = $_s;
                        }/* SEO Custom URL */

                        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/product';
                        } elseif (isset($this->request->get['information_id'])) {
                                $this->request->get['route'] = 'information/information';
                        }
                        
                        if (isset($this->request->get['route'])) {
                                return $this->forward($this->request->get['route']);
                        }
                }
        }
        
        public function rewrite($link) {
                if ($this->config->get('config_seo_url')) {
                        $url_data = parse_url(str_replace('&', '&', $link));
                
                        $url = ''; 
                        
                        $data = array();
                        
                        parse_str($url_data['query'], $data);
                        
                        foreach ($data as $key => $value) {
                                if (isset($data['route'])) {
                                        if (($data['route'] == 'product/product' && $key == 'product_id') || (($data['route'] == 'product/manufacturer/product' || $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]);
                                        }
					/* SEO Custom URL */
					if( $_u = $this->getURL($data['route']) ){
                                            $url .= $_u;
                                            unset($data[$key]);
                                        }/* SEO Custom URL */
                                }
                        }
                
                        if ($url) {
                                unset($data['route']);
                        
                                $query = '';
                        
                                if ($data) {
                                        foreach ($data as $key => $value) {
                                                $query .= '&' . $key . '=' . $value;
                                        }
                                        
                                        if ($query) {
                                                $query = '?' . trim($query, '&');
                                        }
                                }

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

	/* SEO Custom URL */
	public function getURL($route) {
                if( count($this->url_list) > 0) {
                     foreach ($this->url_list as $key => $value) {
                        if($route == $key) {
                            return '/'.$value;
                        }
                     }
                }
                return false;
        }
        public function setURL($_route) {
                if( count($this->url_list) > 0 ){
                     foreach ($this->url_list as $key => $value) {
                        if($_route == $value) {
                            return $key;
                        }
                     }
                }
                return false;
        }/* SEO Custom URL */
}
?>
Это Ваш файл, у меня работает, но немного отличается, проверяйте...

Для добавление и изменения правьте массив

private $url_list = array (
            'common/home'       => 'home',
            'checkout/cart'     => 'cart',
            'account/register'  => 'account/register'
            );
Кстати если изменить на

'account/register'  => 'register'
работать тоже должно

тестируйте.... о результатах отпишитесь

Работает огромное спасибо!!!

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


ещё возник вопрос можно ли сделать чтобы категории товара отображались не так:

/index.php?route=product/category&path=59

а так:

/category/59

Пробовал реализовать в том же массиве что и выше показано, но не работает

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


ещё возник вопрос можно ли сделать чтобы категории товара отображались не так:

/index.php?route=product/category&path=59

а так:

/category/59

Пробовал реализовать в том же массиве что и выше показано, но не работает

перед

foreach ($parts as $part) {
добавить

if ($parts[0] == 'category'){
				$this->request->get['path'] = $parts[1];
				for ( $i = 2 ; $i < count($parts); $i++) {	
					$this->request->get['path'] .= '_' . $parts[$i];
				}
			} else
после else закрывающейся скобки не должно быть, это уберёт лишний цикл с запросом к БД если выбрали категорию

Вот это

                                                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'];
                                                        }                                                       
                                                }
заменить на
$url .= '/category';
						foreach ($categories as $category) {
							$url .= '/'.$category;
						}

У меня работает... тестируйте...

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

Прошу прощенья

после else закрывающейся скобки не должно быть, это уберёт лишний цикл с запросом к БД если выбрали категорию

утверждение не верно, забыли про товары...

добавить

if ($parts[0] == 'category'){
                                $this->request->get['path'] = $parts[1];
                                for ( $i = 2 ; $i < count($parts); $i++) {      
                                        $this->request->get['path'] .= '_' . $parts[$i];
                                }
                        } 
оператор else вообще лишний.

теперь и категории работают и товары....

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

Прошу прощенья

утверждение не верно, забыли про товары...

добавить

if ($parts[0] == 'category'){
                                $this->request->get['path'] = $parts[1];
                                for ( $i = 2 ; $i < count($parts); $i++) {      
                                        $this->request->get['path'] .= '_' . $parts[$i];
                                }
                        } 
оператор else вообще лишний.

теперь и категории работают и товары....

товары сейчас отображаются так:

/category/59?product_id=65

а надо бы так:

/shop/item/65

И категории сейчас понадобилось не так как в предыдущем посте написал:

/category/59

а так:

/shop/category/59

Знаю может уже достал , Заранее спасибо!

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


товары сейчас отображаются так:

/category/59?product_id=65

а надо бы так:

/shop/item/65

И категории сейчас понадобилось не так как в предыдущем посте написал:

/category/59

а так:

/shop/category/59

Знаю может уже достал , Заранее спасибо!

<?php
class ControllerCommonSeoUrl extends Controller {
        /* SEO Custom URL */
        private $url_list = array (
            'common/home'       => 'home',
            'checkout/cart'     => 'cart',
            'account/register'  => 'account/register'
            );
        /* SEO Custom URL */

        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_']);
                        
						if ( count($parts) > 1 ) {
							if ($parts[1] == 'category'){
								$this->request->get['path'] = $parts[2];
								for ( $i = 3 ; $i < count($parts); $i++) {	
									$this->request->get['path'] .= '_' . $parts[$i];
								}
							}elseif( $parts[1] == 'item' ) {
								$this->request->get['product_id'] = $parts[2];
							}
						}
                        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];
                                        }       
                                } else {
                                        $this->request->get['route'] = 'error/not_found';       
                                }
                        }
                        /* SEO Custom URL */
                        if ( $_s = $this->setURL($this->request->get['_route_']) ) {
                                $this->request->get['route'] = $_s;
                        }/* SEO Custom URL */

                        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/product';
                        } elseif (isset($this->request->get['information_id'])) {
                                $this->request->get['route'] = 'information/information';
                        }
                        
                        if (isset($this->request->get['route'])) {
                                return $this->forward($this->request->get['route']);
                        }
                }
        }
        
        public function rewrite($link) {
                if ($this->config->get('config_seo_url')) {
                        $url_data = parse_url(str_replace('&', '&', $link));
                
                        $url = ''; 
                        
                        $data = array();
                        
                        parse_str($url_data['query'], $data);
                        
                        foreach ($data as $key => $value) {
                                if (isset($data['route'])) {
                                        if ( (($data['route'] == 'product/manufacturer/product' || $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 == 'product_id' ) {
						
						$url = '/shop/item/'.$value;
						unset($data[$key]);
						
					}elseif ($key == 'path') {
						
						$categories = explode('_', $value);
						$url = '/shop/category';
						foreach ($categories as $category) {
							$url .= '/'.$category;
						}
						unset($data[$key]);
						
					
                                        /* SEO Custom URL */
                                        if( $_u = $this->getURL($data['route']) ){
                                            $url .= $_u;
                                            unset($data[$key]);
                                        }/* SEO Custom URL */
                                }
                        }
                
                        if ($url) {
                                unset($data['route']);
                        
                                $query = '';
                        
                                if ($data) {
                                        foreach ($data as $key => $value) {
                                                $query .= '&' . $key . '=' . $value;
                                        }
                                        
                                        if ($query) {
                                                $query = '?' . trim($query, '&');
                                        }
                                }

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

        /* SEO Custom URL */
        public function getURL($route) {
                if( count($this->url_list) > 0) {
                     foreach ($this->url_list as $key => $value) {
                        if($route == $key) {
                            return '/'.$value;
                        }
                     }
                }
                return false;
        }
        public function setURL($_route) {
                if( count($this->url_list) > 0 ){
                     foreach ($this->url_list as $key => $value) {
                        if($_route == $value) {
                            return $key;
                        }
                     }
                }
                return false;
        }/* SEO Custom URL */
}
?>
Надіслати
Поділитися на інших сайтах

<?php
class ControllerCommonSeoUrl extends Controller {
        /* SEO Custom URL */
        private $url_list = array (
            'common/home'       => 'home',
            'checkout/cart'     => 'cart',
            'account/register'  => 'account/register'
            );
        /* SEO Custom URL */

        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_']);
                        
						if ( count($parts) > 1 ) {
							if ($parts[1] == 'category'){
								$this->request->get['path'] = $parts[2];
								for ( $i = 3 ; $i < count($parts); $i++) {	
									$this->request->get['path'] .= '_' . $parts[$i];
								}
							}elseif( $parts[1] == 'item' ) {
								$this->request->get['product_id'] = $parts[2];
							}
						}
                        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];
                                        }       
                                } else {
                                        $this->request->get['route'] = 'error/not_found';       
                                }
                        }
                        /* SEO Custom URL */
                        if ( $_s = $this->setURL($this->request->get['_route_']) ) {
                                $this->request->get['route'] = $_s;
                        }/* SEO Custom URL */

                        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/product';
                        } elseif (isset($this->request->get['information_id'])) {
                                $this->request->get['route'] = 'information/information';
                        }
                        
                        if (isset($this->request->get['route'])) {
                                return $this->forward($this->request->get['route']);
                        }
                }
        }
        
        public function rewrite($link) {
                if ($this->config->get('config_seo_url')) {
                        $url_data = parse_url(str_replace('&', '&', $link));
                
                        $url = ''; 
                        
                        $data = array();
                        
                        parse_str($url_data['query'], $data);
                        
                        foreach ($data as $key => $value) {
                                if (isset($data['route'])) {
                                        if ( (($data['route'] == 'product/manufacturer/product' || $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 == 'product_id' ) {
						
						$url = '/shop/item/'.$value;
						unset($data[$key]);
						
					}elseif ($key == 'path') {
						
						$categories = explode('_', $value);
						$url = '/shop/category';
						foreach ($categories as $category) {
							$url .= '/'.$category;
						}
						unset($data[$key]);
						
					
                                        /* SEO Custom URL */
                                        if( $_u = $this->getURL($data['route']) ){
                                            $url .= $_u;
                                            unset($data[$key]);
                                        }/* SEO Custom URL */
                                }
                        }
                
                        if ($url) {
                                unset($data['route']);
                        
                                $query = '';
                        
                                if ($data) {
                                        foreach ($data as $key => $value) {
                                                $query .= '&' . $key . '=' . $value;
                                        }
                                        
                                        if ($query) {
                                                $query = '?' . trim($query, '&');
                                        }
                                }

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

        /* SEO Custom URL */
        public function getURL($route) {
                if( count($this->url_list) > 0) {
                     foreach ($this->url_list as $key => $value) {
                        if($route == $key) {
                            return '/'.$value;
                        }
                     }
                }
                return false;
        }
        public function setURL($_route) {
                if( count($this->url_list) > 0 ){
                     foreach ($this->url_list as $key => $value) {
                        if($_route == $value) {
                            return $key;
                        }
                     }
                }
                return false;
        }/* SEO Custom URL */
}
?>

Пишет ошибку: Parse error: syntax error, unexpected T_ELSE in /var/www/*/data/www/*/catalog/controller/common/seo_url.php on line 156

<?php
class ControllerCommonSeoUrl extends Controller {
        /* SEO Custom URL */
        private $url_list = array (
            'common/home'       => 'home',
            'checkout/cart'     => 'cart',
            'account/register'  => 'register',
			'account/wishlist'  => 'wishlist',
			'checkout/checkout' => 'checkout',
			'account/login'     => 'login',
			'product/special'   => 'special',
			'affiliate/account' => 'affiliate',
			'checkout/voucher'  => 'voucher',
			'product/manufacturer' => 'brand',
			'account/newsletter'   => 'newsletter',
			'account/order'        => 'order',
			'account/account'      => 'account',
			'information/contact'  => 'contact',
			'account/return/insert' => 'return/insert',
			'information/sitemap'   => 'sitemap',
            );
        /* SEO Custom URL */

        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_']);
                        
                                                if ( count($parts) > 1 ) {
                                                        if ($parts[1] == 'category'){
                                                                $this->request->get['path'] = $parts[2];
                                                                for ( $i = 3 ; $i < count($parts); $i++) {      
                                                                        $this->request->get['path'] .= '_' . $parts[$i];
                                                                }
                                                        }elseif( $parts[1] == 'item' ) {
                                                                $this->request->get['product_id'] = $parts[2];
                                                        }
                                                }
                        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];
                                        }       
                                } else {
                                        $this->request->get['route'] = 'error/not_found';       
                                }
                        }
                        /* SEO Custom URL */
                        if ( $_s = $this->setURL($this->request->get['_route_']) ) {
                                $this->request->get['route'] = $_s;
                        }/* SEO Custom URL */

                        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/product';
                        } elseif (isset($this->request->get['information_id'])) {
                                $this->request->get['route'] = 'information/information';
                        }
                        
                        if (isset($this->request->get['route'])) {
                                return $this->forward($this->request->get['route']);
                        }
                }
        }
        
        public function rewrite($link) {
                if ($this->config->get('config_seo_url')) {
                        $url_data = parse_url(str_replace('&', '&', $link));
                
                        $url = ''; 
                        
                        $data = array();
                        
                        parse_str($url_data['query'], $data);
                        
                        foreach ($data as $key => $value) {
                                if (isset($data['route'])) {
                                        if ( (($data['route'] == 'product/manufacturer/product' || $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 == 'product_id' ) {
                                                
                                                $url = '/shop/item/'.$value;
                                                unset($data[$key]);
                                                
                                        }elseif ($key == 'path') {
                                                
                                                $categories = explode('_', $value);
                                                $url = '/shop/category';
                                                foreach ($categories as $category) {
                                                        $url .= '/'.$category;
                                                }
                                                unset($data[$key]);
                                                
                                        
                                        /* SEO Custom URL */
                                        if( $_u = $this->getURL($data['route']) ){
                                            $url .= $_u;
                                            unset($data[$key]);
                                        }/* SEO Custom URL */
                                }
                        }
                
                        if ($url) {
                                unset($data['route']);
                        
                                $query = '';
                        
                                if ($data) {
                                        foreach ($data as $key => $value) {
                                                $query .= '&' . $key . '=' . $value;
                                        }
                                        
                                        if ($query) {
                                                $query = '?' . trim($query, '&');
                                        }
                                }

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

        /* SEO Custom URL */
        public function getURL($route) {
                if( count($this->url_list) > 0) {
                     foreach ($this->url_list as $key => $value) {
                        if($route == $key) {
                            return '/'.$value;
                        }
                     }
                }
                return false;
        }
        public function setURL($_route) {
                if( count($this->url_list) > 0 ){
                     foreach ($this->url_list as $key => $value) {
                        if($_route == $value) {
                            return $key;
                        }
                     }
                }
                return false;
        }/* SEO Custom URL */
}
?>
Надіслати
Поділитися на інших сайтах


}elseif ($key == 'path') {

$categories = explode('_', $value);

$url = '/shop/category';

foreach ($categories as $category) {

$url .= '/'.$category;

}

unset($data[$key]);

}// Эта скобка пропущена

/* SEO Custom URL */

if( $_u = $this->getURL($data['route']) ){

$url .= $_u;

unset($data[$key]);

}/* SEO Custom URL */

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

товары сейчас отображаются так:

/category/59?product_id=65

а надо бы так:

/shop/item/65

И категории сейчас понадобилось не так как в предыдущем посте написал:

/category/59

а так:

/shop/category/59

А можно поинтересоваться зачем такие странные ссылки, почему бы не использовать ЧПУ?
Надіслати
Поділитися на інших сайтах

А можно поинтересоваться зачем такие странные ссылки, почему бы не использовать ЧПУ?

ИХМО миграция магазина с другого движка, хотят сохранить все труды по продвижению в поисковых и тд, чтоб визуально выглядело так же..
Надіслати
Поділитися на інших сайтах

ИХМО миграция магазина с другого движка, хотят сохранить все труды по продвижению в поисковых и тд, чтоб визуально выглядело так же..

Я думал об этом, но по вопросам не похоже... больше походит на то что человек потихоньку забрёл не в ту степь.

Кстати у тебя ещё не пропало желание заморочиться с модулем для управления ссылками вида

/index.php?route=common/home

/index.php?route=account/wishlist

/index.php?route=checkout/cart

и т.д.

У меня есть такой модуль для 0.2.x, но совсем нет времени перелопатить под 1.х.... Возмёшся за это дело?

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

Я думал об этом, но по вопросам не похоже... больше походит на то что человек потихоньку забрёл не в ту степь.

Кстати у тебя ещё не пропало желание заморочиться с модулем для управления ссылками вида

/index.php?route=common/home

/index.php?route=account/wishlist

/index.php?route=checkout/cart

и т.д.

У меня есть такой модуль для 0.2.x, но совсем нет времени перелопатить под 1.х.... Возмёшся за это дело?

Давай, тикет нарисуй, и сырцы выложи.
Надіслати
Поділитися на інших сайтах

}elseif ($key == 'path') {
                                                
                                                $categories = explode('_', $value);
                                                $url = '/shop/category';
                                                foreach ($categories as $category) {
                                                        $url .= '/'.$category;
                                                }
                                                unset($data[$key]);
                                                
					}// Эта скобка пропущена
                                        /* SEO Custom URL */
                                        if( $_u = $this->getURL($data['route']) ){
                                            $url .= $_u;
                                            unset($data[$key]);
                                        }/* SEO Custom URL */

Спасибо помогло)

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


Попробовал по аналогии ещё для information_id написать чпу , но не получилось ссылки вот так выглядят /information?information_id=3, вот так пробовал:

} elseif( $key == 'product_id' ) {
                                                
                                                $url = '/shop/item/'.$value;
                                                unset($data[$key]);
                                                
                                        } elseif( $key == 'information_id' ) {
												$url = '/information/'.$value;
												unset($data[$key]);
										
										} elseif ($key == 'path') {
                                                
                                                $categories = explode('_', $value);
                                                $url = '/shop/category';
                                                foreach ($categories as $category) {
                                                        $url .= '/'.$category;
                                                }
                                                unset($data[$key]);
                                                
                                        }
Надіслати
Поділитися на інших сайтах


Попробовал по аналогии ещё для information_id написать чпу , но не получилось ссылки вот так выглядят /information?information_id=3, вот так пробовал:

} elseif( $key == 'product_id' ) {
                                                
                                                $url = '/shop/item/'.$value;
                                                unset($data[$key]);
                                                
                                        } elseif( $key == 'information_id' ) {
												$url = '/information/'.$value;
												unset($data[$key]);
										
										} elseif ($key == 'path') {
                                                
                                                $categories = explode('_', $value);
                                                $url = '/shop/category';
                                                foreach ($categories as $category) {
                                                        $url .= '/'.$category;
                                                }
                                                unset($data[$key]);
                                                
                                        }
Для information всё есть в админке, там просто прописываете "Псевдоним" и всё работает из коробки...
Надіслати
Поділитися на інших сайтах

Это кажется последняя версия. Если возникнут вопросы - всё расскажу.

Файл забрал, как будет результат свяжусь..
Надіслати
Поділитися на інших сайтах

Файл забрал, как будет результат свяжусь..

Погоди... зачем со мной связываться?

Кажется ты меня не правильно понял... мне этот модуль нафиг не нужен. Я его писал для паблика и выкладывал в паблик...

Сделаеш - выкладывай как дополнение или просто в теме...

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

  • 3 weeks later...

costas, вопрос по теме, только касается меню.

У меня на сайте в горизонтальном меню (там где "главная", "вход") добавлены свои пункты. ссылки вида /information?information_id=3 поменял на чпу и появилась проблема. При переходе в эти пункты, выделение остается на пункте "Главная", а не на нужном.как это можно исправить, не подскажите? надеюсь понятно объяснил

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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