leny Posted November 7, 2014 Report Share Posted November 7, 2014 Чтобы поменять стандартный вид 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/. Все. Мы ничего не удаляли, поэтому при необходимости мой код удаляем и снимаем комментарии со старого. Quote Link to post Share on other sites
infinity178 Posted November 7, 2014 Report Share Posted November 7, 2014 Простите может я что то не понимаю - но в первом изменении в htaccess - но мы меняем "яблоко" на "яблоко" В чем засекреченный смысл? Quote Link to post Share on other sites
Kosjak76 Posted November 7, 2014 Report Share Posted November 7, 2014 В первом изменении мы ЗАКОММЕНТИРУЕМ старый код # в htaccess используется для комментариев. Quote Link to post Share on other sites
Юрий17 Posted November 10, 2014 Report Share Posted November 10, 2014 Добрый день. Подскажите новичку, для того что бы убрать из URL слово "catalog/" можно сделать по такому же принципу? Подскажите где нужно копать, буду очень благодарен! Quote Link to post Share on other sites
leny Posted November 10, 2014 Author Report Share Posted November 10, 2014 (edited) Юрий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 November 16, 2014 by leny Quote Link to post Share on other sites
qu0dez Posted November 11, 2014 Report Share Posted November 11, 2014 Было бы не плохо убрать и то и другое.Не подскажете как ? Quote Link to post Share on other sites
leny Posted November 11, 2014 Author Report Share Posted November 11, 2014 (edited) Было бы не плохо убрать и то и другое.Не подскажете как ? .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 January 6, 2015 by leny Quote Link to post Share on other sites
qu0dez Posted November 12, 2014 Report Share Posted November 12, 2014 Cпасибо, все очень круто) Quote Link to post Share on other sites
Vince Posted December 6, 2014 Report Share Posted December 6, 2014 .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/" эти все строки нужно удалить? Quote Link to post Share on other sites
leny Posted December 6, 2014 Author Report Share Posted December 6, 2014 Vince, нет. Это урезанный мануал по установке. Открываете свои файлы, ищите в них примерно такой же код и меняете на мой. Например, открываем "view/ProductView.php", ищем строчку "//Меняем вид URL" (лучше всего будет искать по комментариям) и меняем этот участок кода на мой. "...." - это прочий код, который мы не трогаем. Quote Link to post Share on other sites
Vince Posted December 6, 2014 Report Share Posted December 6, 2014 Vince, нет. Это урезанный мануал по установке. Открываете свои файлы, ищите в них примерно такой же код и меняете на мой. Например, открываем "view/ProductView.php", ищем строчку "//Меняем вид URL" (лучше всего будет искать по комментариям) и меняем этот участок кода на мой. "...." - это прочий код, который мы не трогаем. Спасибо!А если их не удалять а заменить на др url, заместо products например news, а вместо catalog allnews Quote Link to post Share on other sites
leny Posted December 7, 2014 Author Report Share Posted December 7, 2014 Спасибо!А если их не удалять а заменить на др url, заместо products например news, а вместо catalog allnewsНе совсем по теме. Мы тут убираем products. Если Вам нужно сделать так: "site.ru/news/name-news", то тогда нужно отредактировать .htaccess, заменив products на news и catalog на allnews, и ссылки поменять с products/.... на news/.... . Как-то так. Если нужно сделать новостной сайт, то можно же редактировать только блог. Quote Link to post Share on other sites
Vince Posted December 7, 2014 Report Share Posted December 7, 2014 Не совсем по теме. Мы тут убираем products. Если Вам нужно сделать так: "site.ru/news/name-news", то тогда нужно отредактировать .htaccess, заменив products на news и catalog на allnews, и ссылки поменять с products/.... на news/.... . Как-то так. Если нужно сделать новостной сайт, то можно же редактировать только блог.Спасибо! Поменял получилось Quote Link to post Share on other sites
Callback Posted December 24, 2014 Report Share Posted December 24, 2014 Спасибо! Вещь нужная. Помогите настроить в .htaccess редирект старых страниц /catalog/... на /... Quote Link to post Share on other sites
leny Posted December 24, 2014 Author Report Share Posted December 24, 2014 Спасибо! Вещь нужная. Помогите настроить в .htaccess редирект старых страниц /catalog/... на /...Как-то так RedirectMatch /catalog/(.*) /$1 Quote Link to post Share on other sites
Callback Posted December 24, 2014 Report Share Posted December 24, 2014 К сожалению не помогает. Если вводить старый адрес формата: домен/catalog/название_категории, то перенаправляет на несуществующую страницу: домен/название_категории?module=ProductsView&page_url=catalog&brand=название_категории Quote Link to post Share on other sites
Json Posted December 25, 2014 Report Share Posted December 25, 2014 можно глупые вопросы:1. Для чего это нужно убирать catalog и тп?2. Не портите ли вы структура сайта, так как у вас все в одной куче?3. Что даст данные изменения для поисковика? Quote Link to post Share on other sites
yoshkin Posted December 25, 2014 Report Share Posted December 25, 2014 Отличное решение!А как сделать автозамену в URL, чтобы было не "/название_товара", а "/артикул_товара" ?Насколько я понимаю, в данном случае уже нужно менять функцию формирования "page_url" в view/View.php Quote Link to post Share on other sites
leny Posted December 25, 2014 Author Report Share Posted December 25, 2014 Отличное решение!А как сделать автозамену в URL, чтобы было не "/название_товара", а "/артикул_товара" ?Насколько я понимаю, в данном случае уже нужно менять функцию формирования "page_url" в view/View.php Меняете в ссылках имя на артикул и редактируете ProductView.php и Products.php Quote Link to post Share on other sites
leny Posted December 25, 2014 Author Report Share Posted December 25, 2014 К сожалению не помогает. Если вводить старый адрес формата: домен/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] Quote Link to post Share on other sites
Callback Posted December 26, 2014 Report Share Posted December 26, 2014 Огромное спасибо! Все прекрасно работает!Если дадите кошелек, закину на мороженку Quote Link to post Share on other sites
nonsen Posted January 5, 2015 Report Share Posted January 5, 2015 Подскажите, пожалуйста, сделал все по инструкции для версии 2.3.6, все работает шикарно, но при переходе в 3-ю вложенность(категорию) пишет, что страница не найдена. Если поставить htaccess не измененный и добавлять к 3-му уровню категорий приставка site.ru/category/название, то все работает. В чем может быть костыль? Заранее благодарю за ответ. Quote Link to post Share on other sites
leny Posted January 6, 2015 Author Report Share Posted January 6, 2015 Представленные решения предназначены для того, чтобы убрать /catalog или /products. Т.е. сделать site.ru/название или site.ru/категория, но не site.ru/категория/название (можно site.ru/категория/бренд). Нужно смотреть код, чтобы сказать, почему работает или не работает. Quote Link to post Share on other sites
Des Posted January 7, 2015 Report Share Posted January 7, 2015 Leny, здравствуйте! Может вы знаете, как заставить поиск работать, в следующей теме: Переименовать /products/ в адресе Quote Link to post Share on other sites
leny Posted January 8, 2015 Author Report Share Posted January 8, 2015 Leny, здравствуйте! Может вы знаете, как заставить поиск работать, в следующей теме: Переименовать /products/ в адресеТам уже есть ответ. Меняйте action="products" Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.