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

Сменит урлы на сайте


Recommended Posts

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

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

/index.php?route=product/product&path=18&product_id=43

на такие как здесь (категория, продукт)

http://demo.inveostore.com/opencart/de/desktops-20/

http://demo.inveostore.com/opencart/de/canon-eos-5d-30

ткните пожалуйста в каких файлах нужно покапаться, чтобы сделать так же

опенкарт версия 1.5.0.5

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


про сео урл я знаю, мне надо без него, чтобы в зависимости от языка формировля урл, например для ру /telefon-iphone, для en /phone-iphone, ipnone - продукт из таблица продукт-дескрипшион, причем это бралось не из аллиасов, а из этой таблицы

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


ткните пожалуйста в каких файлах нужно покапаться, чтобы сделать так же

Копать надо в файле catalog/controller/common/seo_url.php

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

Попробуй в адресной строке изменить en на de или fr... получается что ты не можеш дать ссылку на конкретную языковую версию сайта и быть уверенным что будет отображена заданная языковая версия.

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

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

Копать надо в файле catalog/controller/common/seo_url.php

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

Попробуй в адресной строке изменить en на de или fr... получается что ты не можеш дать ссылку на конкретную языковую версию сайта и быть уверенным что будет отображена заданная языковая версия.

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

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

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


Или ссылку дай или опиши что делал и приведи пример ЧПУ для товара.

А вообще хотелось бы понять не только что, но и для чего ты это делаеш.

Зачастую задают вопрос как сделать конкретно вот это... объясняеш... в итоге выясняется что хотел человек совсем другого и залез в какие-то дебри не подозревая что есть другие методы решения.

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

мне нужно чтобы на разных языках для категорий и продуктов были свои урлы, например для ру - домен/отдых-в-таиланде, для en - домен/thailand-travel

менял в файле seo_url.php вот так

<?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];

}

}

/********* my code start *********/

elseif(strpos($this->request->get['_route_'], 'r-') != false)

{

//echo '<pre>'; print_r($this); echo '</pre>';

//echo $this->request->get['_route_'].'<br>';

//$this->request->get['route'] = 'product/product';

$x2 = explode('-', $this->request->get['_route_']);

$this->request->get['product_id'] = $x2[1];

//$this->request->get['path'] = $x2[1];

}

/********* my code finish *********/

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' && $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]);

}

/********* my code start *********/

elseif ($data['route'] == 'product/product' && $key == 'product_id')

{

$product_info = $this->model_catalog_product->getProduct((int)$value);

$url = '/pr-' . (int)$value.'-'.$this->language->get('code').'-'.str_replace(' ', '-', $product_info['name']);

unset($data[$key]);

}

/********* my code finish *********/

} 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'];

}

/********* my code *********/

else

{

$category_info = $this->model_catalog_category->getCategory((int)$category);

$url .= '/cat-' . (int)$category.'-'.$this->language->get('code').'-'.str_replace(' ', '-', $category_info['name']);

}

/********* my code finish *********/

}

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;

}

}

}

?>

при таких изменениях на странице продукта неотображается категория, ссылки работают

в фале catalog/controller/product/product.php не определена $this->request->get['path'] по которой определяется category id

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


Я бы по другому решал задачу... что-бы в URL не было /cat- /pr-и т.д. и что-бы нагрузка на БД была поменьше...

В таблицу url_alias добавить колонку language_id, и при записи товара, производителя, категории или статьи автоматом генерить для каждого языка псевдоним в эту таблицу. С учетом SEO URL который я залил сегодня в SVN, можно просто заголовок почистить от знаков препинания, непечатаемых символов и вся генерация...

в SEO URL к запросам добавить условие по language_id и ЧПУ будет чистенькое: domain.tld/отдых в тайланде

Признак языка делать не в URL, а разными доменами... так и продвигать будет легче...

Единственное прийдётся повозиться с переключением языка... но это в любом случае и не зависит от алгоритма построения ЧПУ. Так как у тебя разные URL то с редиректом будет заморочка...

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

да кстати, рано я обрадовался, если набрать урл с недефолтным языком открывается не то что надо,

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

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


Так я же написал что с переключением языка это отдельная песня... и на том сайте, на который ты давал ссылку, этот момент не реализован.

Я пока не получил от тебя ответа на вопрос: сайт многоязычный или мультирегиональный? В зависимости от этого надо принимать решение как поступать с языком...

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

Да на том сайте это нереализована, как-раз в этом и проблема

Сайт с несколькими языками, у всех языков одинаковый набор страниц (одни и теже товары, категории), просто на разных языках (свои названия категорий, описания категорий/продуктов, страницы FAQ, Contact ...). Нужно чтобы для каждого языка страницы были со своими урлами, т.е. однозначно по урлу определялся язык - открывался сайт с таким языком, ну и соответственно поисковики индексировали разные языки с разными урлами

например

для ру site.ru/телефон-iphone,

для en site.ru/phone-iphone,

где ipnone - продукт из таблица продукт,

для гугла пытаясь найти по запросу "site:site.ru телефон iphone" показывался урл site.ru/телефон-iphone,

для "site:site.ru phone iphone" - site.ru/phone-iphone

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


  • 1 month later...

Я бы по другому решал задачу... что-бы в URL не было /cat- /pr-и т.д. и что-бы нагрузка на БД была поменьше...

В таблицу url_alias добавить колонку language_id, и при записи товара, производителя, категории или статьи автоматом генерить для каждого языка псевдоним в эту таблицу. С учетом SEO URL который я залил сегодня в SVN, можно просто заголовок почистить от знаков препинания, непечатаемых символов и вся генерация...

в SEO URL к запросам добавить условие по language_id и ЧПУ будет чистенькое: domain.tld/отдых в тайланде

Признак языка делать не в URL, а разными доменами... так и продвигать будет легче...

Единственное прийдётся повозиться с переключением языка... но это в любом случае и не зависит от алгоритма построения ЧПУ. Так как у тебя разные URL то с редиректом будет заморочка...

По совету сделал данную модификацию. Если кого-то может заинтересовать - в личку.

Так-же из наработанного есть возможность автоматического создания мета-ключевиков и мета-описания с поддержкой морфологии практически любого языка. Интересно - снова в личку.

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

По совету сделал данную модификацию. Если кого-то может заинтересовать - в личку.

Так-же из наработанного есть возможность автоматического создания мета-ключевиков и мета-описания с поддержкой морфологии практически любого языка. Интересно - снова в личку.

Если Хотите что-то продавать так выложите на сайте и все.

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


Если Хотите что-то продавать так выложите на сайте и все.

Я же сказал - есть пока только наработки. Будет спрос - определимся с ценой и функциональностью.
Надіслати
Поділитися на інших сайтах

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

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

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

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

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

Вхід

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

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

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

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

Important Information

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