Jump to content

Меняем URL товара


Recommended Posts

Чтобы поменять стандартный вид URL товара т.е. сделать вот так: sire.ru/name_tovar, нужно:

 

Открыть файл .htaccess

найти строчку:

RewriteRule ^products/([^/]+)/?$    index.php?module=ProductView&product_url=$1 [L,QSA]

и заменить на:

#RewriteRule ^products/([^/]+)/?$    index.php?module=ProductView&product_url=$1 [L,QSA]

идем ниже и находим строчку:

RewriteRule ^([^/]*)/?$    index.php?module=PageView&page_url=$1 [L,QSA]

и меняем на:

RewriteRule ^([^/]*)/?$ index.php?page_url=$1 [L,QSA]
#RewriteRule ^([^/]*)/?$ index.php?module=PageView&page_url=$1 [L,QSA]

Сохраняем и закрываем.

 

Открываем файл view/IndexView.php

Находим строчки:

// Текущий модуль (для отображения центрального блока)
$module = $this->request->get('module', 'string');
$module = preg_replace("/[^A-Za-z0-9]+/", "", $module);

и вставляем после них:

//Меняем вид URL
$module_url = $this->request->get('page_url', 'string');
		
foreach($pages as $p){
	$array_pages[$p->url] = $p->url;
}

if(!empty($module_url)){
	if(!in_array($module_url,$array_pages))
		$module = 'ProductView';
	else
		$module = 'PageView';
}
//Конец

сохраняем и закрываем.

 

Открываем файл view/ProductView.php

Находим строку:

$product_url = $this->request->get('product_url', 'string');

и меняем ее на:

//Меняем вид URL
//$product_url = $this->request->get('product_url', 'string');
$product_url = $this->request->get('page_url', 'string');

сохраняем и закрываем.

 

Теперь осталось только найти все ссылки вида

href="products/{$product->url}"

и убрать products/. Все. Мы ничего не удаляли, поэтому при необходимости мой код удаляем и снимаем комментарии со старого.

Link to post
Share on other sites
  • Replies 96
  • Created
  • Last Reply

Top Posters In This Topic

Юрий17, on 10 Nov 2014 - 15:45, said:

Добрый день. Подскажите новичку, для того что бы убрать из URL слово "catalog/" можно сделать по такому же принципу? Подскажите где нужно копать, буду очень благодарен!

Если убрать только "catalog/", то:

 

.htaccess

....

# Каталог товаров
#RewriteRule ^catalog/([^/]+)/?$	index.php?module=ProductsView&category=$1 [L,QSA]
#RewriteRule ^catalog/([^/]+)/([^/]+)/?$	index.php?module=ProductsView&category=$1&brand=$2 [L,QSA]

....

# Статические страницы
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule ^([^/]*)/?$	index.php?module=PageView&page_url=$1 [L,QSA]
RewriteRule ^([^/]+)/([^/]+)/?$	index.php?module=ProductsView&page_url=$1&brand=$2 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/?$	index.php?page_url=$1 [L,QSA]
RewriteRule ^/?$	index.php?module=MainView&page_url= [L,QSA]

....

view/ProductsView.php

....

//$category_url = $this->request->get('category', 'string');
$category_url = $this->request->get('page_url', 'string');

....

view/IndexView.php

....

// Страницы
$pages = $this->pages->get_pages(array('visible'=>1));		
$this->design->assign('pages', $pages);
					
// Текущий модуль (для отображения центрального блока)
$module = $this->request->get('module', 'string');
$module = preg_replace("/[^A-Za-z0-9]+/", "", $module);

//Меняем вид URL
$module_url = $this->request->get('page_url', 'string');
		
foreach($pages as $p){
	$array_pages[$p->url] = $p->url;
}
		
if(!empty($module_url)){
	if(!in_array($module_url,$array_pages))
		$module = 'ProductsView';
	else
		$module = 'PageView';
}
//Конец

....

 

Не тестировал :) Если нужно убрать и "products/" и "catalog/", то другой код будет.

Edited by leny
Link to post
Share on other sites

Было бы не плохо убрать и то и другое.

Не подскажете как ?

 

.htaccess

....

# Каталог товаров
#RewriteRule ^catalog/([^/]+)/?$	index.php?module=ProductsView&category=$1 [L,QSA]
#RewriteRule ^catalog/([^/]+)/([^/]+)/?$	index.php?module=ProductsView&category=$1&brand=$2 [L,QSA]

....

#RewriteRule ^products/([^/]+)/?$	index.php?module=ProductView&product_url=$1 [L,QSA]
RewriteRule ^products/?$	index.php?module=ProductsView [L,QSA]

....

# Статические страницы
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$	index.php?module=ProductsView&page_url=$1&brand=$2 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/?$	index.php?page_url=$1 [L,QSA]
#RewriteRule ^([^/]*)/?$	index.php?module=PageView&page_url=$1 [L,QSA]
RewriteRule ^/?$	index.php?module=MainView&page_url= [L,QSA]

....

 

api/Categories.php

....

public function get_all_categories()
{
	$query = $this->db->placehold("SELECT url FROM __categories WHERE visible=1 ORDER BY position");
	$this->db->query($query);
	return $this->db->results();
}

....

 

view/IndexView.php

....

// Категории товаров
$categories = $this->categories->get_categories_tree();
$this->design->assign('categories', $categories);

....

//Меняем вид URL
$module_url = $this->request->get('page_url', 'string');
$all_category = $this->categories->get_all_categories();
        
foreach($all_category as $c)
    $array_category[$c->url] = $c->url;


foreach($pages as $p)
    $array_pages[$p->url] = $p->url;
        
if(!empty($module_url)){
    if(in_array($module_url,$array_category)){
        $module = 'ProductsView';
    } elseif(in_array($module_url,$array_pages)) {
        $module = 'PageView';
    } else {
        $module = 'ProductView';
    }
}
//Конец
 

 

view/ProductsView.php

....

// GET-Параметры
//$category_url = $this->request->get('category', 'string');
$category_url = $this->request->get('page_url', 'string');

....

 

view/ProductView.php

....

//Меняем вид URL
//$product_url = $this->request->get('product_url', 'string');
$product_url = $this->request->get('page_url', 'string');

....

 

И убираем из ссылок "catalog/" и "products/"

Edited by leny
Link to post
Share on other sites
  • 4 weeks later...

.htaccess

....

# Каталог товаров
#RewriteRule ^catalog/([^/]+)/?$	index.php?module=ProductsView&category=$1 [L,QSA]
#RewriteRule ^catalog/([^/]+)/([^/]+)/?$	index.php?module=ProductsView&category=$1&brand=$2 [L,QSA]

....

#RewriteRule ^products/([^/]+)/?$	index.php?module=ProductView&product_url=$1 [L,QSA]
RewriteRule ^products/?$	index.php?module=ProductsView [L,QSA]

....

# Статические страницы
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/([^/]+)/?$	index.php?module=ProductsView&page_url=$1&brand=$2 [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/?$	index.php?page_url=$1 [L,QSA]
#RewriteRule ^([^/]*)/?$	index.php?module=PageView&page_url=$1 [L,QSA]
RewriteRule ^/?$	index.php?module=MainView&page_url= [L,QSA]

....

 

view/IndexView.php

....

// Категории товаров
$categories = $this->categories->get_categories_tree();
$this->design->assign('categories', $categories);

....

//Меняем вид URL
$module_url = $this->request->get('page_url', 'string');
		
foreach($categories as $c){
	if(isset($c->subcategories)){
		foreach($c->subcategories as $sub)
			$array_category[$sub->url] = $sub->url;
	}
	$array_category[$c->url] = $c->url;
}

foreach($pages as $p)
	$array_pages[$p->url] = $p->url;
		
if(!empty($module_url)){
	if(in_array($module_url,$array_category)){
		$module = 'ProductsView';
	} elseif(in_array($module_url,$array_pages)) {
		$module = 'PageView';
	} else {
		$module = 'ProductView';
	}
}
//Конец

....

 

view/ProductsView.php

....

// GET-Параметры
//$category_url = $this->request->get('category', 'string');
$category_url = $this->request->get('page_url', 'string');

....

 

view/ProductView.php

....

//Меняем вид URL
//$product_url = $this->request->get('product_url', 'string');
$product_url = $this->request->get('page_url', 'string');

....

 

И убираем из ссылок "catalog/" и "products/"

 

эти все строки нужно удалить?

Link to post
Share on other sites

Vince, нет. Это урезанный мануал по установке. :)  Открываете свои файлы, ищите в них примерно такой же код и меняете на мой. Например, открываем "view/ProductView.php", ищем строчку "//Меняем вид URL" (лучше всего будет искать по комментариям) и меняем этот участок кода на мой. "...." - это прочий код, который мы не трогаем. 

Link to post
Share on other sites

Vince, нет. Это урезанный мануал по установке. :)  Открываете свои файлы, ищите в них примерно такой же код и меняете на мой. Например, открываем "view/ProductView.php", ищем строчку "//Меняем вид URL" (лучше всего будет искать по комментариям) и меняем этот участок кода на мой. "...." - это прочий код, который мы не трогаем. 

Спасибо!

А если их не удалять а заменить на др url, заместо products например news, а вместо catalog allnews

Link to post
Share on other sites

Спасибо!

А если их не удалять а заменить на др url, заместо products например news, а вместо catalog allnews

Не совсем по теме. Мы тут убираем products. Если Вам нужно сделать так: "site.ru/news/name-news", то тогда нужно отредактировать .htaccess, заменив products на news и catalog на allnews, и ссылки поменять с products/.... на news/.... . Как-то так. :) Если нужно сделать новостной сайт, то можно же редактировать только блог.

Link to post
Share on other sites

Не совсем по теме. Мы тут убираем products. Если Вам нужно сделать так: "site.ru/news/name-news", то тогда нужно отредактировать .htaccess, заменив products на news и catalog на allnews, и ссылки поменять с products/.... на news/.... . Как-то так. :) Если нужно сделать новостной сайт, то можно же редактировать только блог.

Спасибо! Поменял получилось

Link to post
Share on other sites
  • 3 weeks later...

К сожалению не помогает. Если вводить старый адрес формата: домен/catalog/название_категории, то перенаправляет на несуществующую страницу: домен/название_категории?module=ProductsView&page_url=catalog&brand=название_категории

Link to post
Share on other sites

можно глупые вопросы:

1. Для чего это нужно убирать catalog и тп?

2. Не портите ли вы структура сайта, так как у вас все в одной куче?

3. Что даст данные изменения для поисковика?

Link to post
Share on other sites

Отличное решение!

А как сделать автозамену в URL, чтобы было не "/название_товара", а "/артикул_товара" ?

Насколько я понимаю, в данном случае уже нужно менять функцию формирования "page_url" в view/View.php 

Link to post
Share on other sites

Отличное решение!

А как сделать автозамену в URL, чтобы было не "/название_товара", а "/артикул_товара" ?

Насколько я понимаю, в данном случае уже нужно менять функцию формирования "page_url" в view/View.php 

Меняете в ссылках имя на артикул и редактируете ProductView.php и Products.php

Link to post
Share on other sites

К сожалению не помогает. Если вводить старый адрес формата: домен/catalog/название_категории, то перенаправляет на несуществующую страницу: домен/название_категории?module=ProductsView&page_url=catalog&brand=название_категории

Тогда это

#RewriteRule ^catalog/([^/]+)/?$	index.php?module=ProductsView&category=$1 [L,QSA]
#RewriteRule ^catalog/([^/]+)/([^/]+)/?$    index.php?module=ProductsView&category=$1&brand=$2 [L,QSA]

Меняем на это

RewriteRule ^catalog/([^/]+)/?$    http://site.ru/$1 [L,QSA,R=301]
RewriteRule ^catalog/([^/]+)/([^/]+)/?$    http://site.ru/$1/$2 [L,QSA,R=301]
Link to post
Share on other sites
  • 2 weeks later...

Подскажите, пожалуйста, сделал все по инструкции для версии 2.3.6, все работает шикарно, но при переходе в 3-ю вложенность(категорию) пишет, что страница не найдена. Если поставить htaccess не измененный и добавлять к 3-му уровню категорий приставка site.ru/category/название, то все работает. В чем может быть костыль? Заранее благодарю за ответ.

Link to post
Share on other sites

Представленные решения предназначены для того, чтобы убрать /catalog или /products. Т.е. сделать site.ru/название или site.ru/категория, но не site.ru/категория/название (можно site.ru/категория/бренд).

 

Нужно смотреть код, чтобы сказать, почему работает или не работает.

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

Loading...
×
×
  • Create New...