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

Recommended Posts

Добрый день,
КАК привести ссылки с товаром к виду mysiteTEST.com/zzzz/keyword

где zzzz не название категории, а просто префикс у всех одинаковый.

 

(ЧПУ товаров с категориями:/category/subcategory/product) отключен.

 

Спасибо.

Змінено користувачем leperrR
Надіслати
Поділитися на інших сайтах


Решение для SeoPro.

Я вообще не понимаю зачем это вам. Вы используете это решение на свой страх и риск, и не факт, что оно у Вас сработает!!!
 
Теория.

При обработке GET переменной product_id необходимо добавить перед запросом seo-url товара предзапрос для получения суффикса zzzz. Чтобы получилось так:

$quires[] = 'product_suffix';
$quires[] = 'product_id=42';

А в БД, в таблице oc_url_alias значения запросов равны:

'product_suffix' = 'zzzz'
'product_id=42' = 'test'

Т.е. у нас должна сформироваться ссылка /zzzz/test.html

Решение.

Файл controller/catalog/common/seo_pro.php, ищем:

$queries = array();
foreach ($data as $key => $value) {
	switch ($key) {
		case 'product_id':
		case 'manufacturer_id':
		case 'category_id':
		case 'information_id':
			$queries[] = $key . '=' . $value;
			unset($data[$key]);
			$postfix = 1;
			break;

		case 'path':
			$categories = explode('_', $value);
			foreach ($categories as $category) {
				$queries[] = 'category_id=' . $category;
			}
			unset($data[$key]);
			break;

		default:
			break;
	}
}

 
Добавляем:
 

$queries = array();
foreach ($data as $key => $value) {
	switch ($key) {
		case 'product_id':
			// Добавляем предзапрос на поиск суффикса zzzz
			$queries[] = 'product_suffix';
			$queries[] = $key . '=' . $value;
			unset($data[$key]);
			$postfix = 1;
			break;
			// конец
		case 'manufacturer_id':
		case 'category_id':
		case 'information_id':
			$queries[] = $key . '=' . $value;
			unset($data[$key]);
			$postfix = 1;
			break;

		case 'path':
			$categories = explode('_', $value);
			foreach ($categories as $category) {
				$queries[] = 'category_id=' . $category;
			}
			unset($data[$key]);
			break;

		default:
			break;
	}
} 

Все готово. Могут быть разные версии seo_pro, но я в них не разбираюсь, так что у некоторых на странице товаров может возникать ошибка Undefined offset:  1 in catalog\controller\common\seo_pro.php on line 42 Тем, у кого возникает эта ошибка необходимо заменить:

reset($parts);
foreach ($parts as $part) {
	$url = explode('=', $queries[$part], 2);

	if ($url[0] == 'category_id') {
		if (!isset($this->request->get['path'])) {
			$this->request->get['path'] = $url[1];
		} else {
			$this->request->get['path'] .= '_' . $url[1];
		}
	} else {
		$this->request->get[$url[0]] = $url[1];
	}
}

На:

reset($parts);
foreach ($parts as $part) {
	$url = explode('=', $queries[$part], 2);

	if ($url[0] == 'category_id') {
		if (!isset($this->request->get['path'])) {
			$this->request->get['path'] = $url[1];
		} else {
			$this->request->get['path'] .= '_' . $url[1];
		}
	} else {
		// Добавляем проверку 
		if ($url[0] !== 'product_suffix') {
			$this->request->get[$url[0]] = $url[1];
		}
		// конец
	}
}

Теперь в таблицу oc_url_alias нужно добавить poduct_suffix=zzzz, это можно сделать с помощью запроса:

INSERT INTO `oc_url_alias` (`query`, `keyword`) VALUES
('product_suffix', 'zzzz');
  • +1 1
Надіслати
Поділитися на інших сайтах

 

Решение для SeoPro....

Спасибо за решение!

Для чего ВЫ спрашивали? Чтобы не потерять проиндексированные ссылки действующего ИМ, не потерять рейтинг.

 

Протестил способ, не каких ошибок пока не заметил...... "не по теме" но когда заливаю больше 1 тыс товара очень долго начинает грузится странички товара и  категорий порядка 10-30 сек, даже когда отключаю этот метод product_suffix  все равно весит... использую на  "Шаблон RUBBER".

 

вот еще один метод Change Product Url

он для базового чуть переделанного seo_url

вот код замена SeoPro:

<?php 
class ControllerCommonSeoUrl extends Controller {
    /* SEO Custom URL */
    private $url_list = array (
        'common/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',
                    '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_']);

        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/info';
        } 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) {
    $url_info = parse_url(str_replace('&', '&', $link));

    $url = ''; 

    $data = array();

    parse_str($url_info['query'], $data);

    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]);
            }
                                    /* 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_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . $query;
    } 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 */
}
?>

заменяем 99 строку:

 

parse_str($url_info['query'], $data);
    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) {
       // Добавляем суффикс zzzz
                    $url .= '/zzzz/' . $query->row['keyword'];
      // конец
                    unset($data[$key]);
                }                   

в итоге выходит домен/категория/подкатегория/zzzz/test

только остается убрать категория/подкатегория (без родителя) - чтобы было домен/zzzz/test

как убрать категорию я еще думаю...

 

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


Гість
Ця тема закрита для публікації повідомлень.
  • Зараз на сторінці   0 користувачів

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

×
×
  • Створити...

Important Information

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