Перейти к содержанию
Официальный форум поддержки Simpla

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

Чтобы поменять стандартный вид 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/. Все. Мы ничего не удаляли, поэтому при необходимости мой код удаляем и снимаем комментарии со старого.

Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 96
  • Дата создания
  • Последний ответ

Лучшие авторы в теме

Лучшие авторы в теме

Простите может я что то не понимаю - но в первом изменении в htaccess - но мы меняем "яблоко" на "яблоко"  В чем засекреченный смысл? :)

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

В первом изменении мы ЗАКОММЕНТИРУЕМ старый код # в htaccess используется для комментариев.

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

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

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

Юрий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/", то другой код будет.

Изменено пользователем leny
Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

Изменено пользователем leny
Ссылка на сообщение
Поделиться на другие сайты
  • 4 недели спустя...

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

 

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

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

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

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

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

Спасибо!

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

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

Спасибо!

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

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...

Спасибо! Вещь нужная.

 

Помогите настроить в .htaccess редирект старых страниц /catalog/...  на  /...

Как-то так

RedirectMatch /catalog/(.*) /$1
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

К сожалению не помогает. Если вводить старый адрес формата: домен/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]
Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

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

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

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

 

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

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

Leny, здравствуйте! Может вы знаете, как заставить поиск работать, в следующей теме:

 

Переименовать /products/ в адресе

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

Leny, здравствуйте! Может вы знаете, как заставить поиск работать, в следующей теме:

 

Переименовать /products/ в адресе

Там уже есть ответ.  Меняйте

 

action="products"
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...