Уважаемые форумчане! Не могу разобраться с ЧПУ в модуле новостей. (сам модуль брал отсюда http://fresh-warez.ru/skripty-i-cms/modul-novostej-news-module-dlya-opencart-v-1-5-1.html). В принципе все ЧПУ на сайте работают, активно этим пользуюсь. Но вот когда я его прописываю в этом модуле, ничего работать не хочет, а именно создают страницу вида http://benkoni.com/index.php?route=information/news&news_id=1 Ничего не могу понять, что я сделал не так?
kuklev, Файл catalog/controller/common/seo_url.php в сиудию, тогда помогу. Или catalog/controller/common/seo_pro.php, в зависимости от того какой мод используете
PHP: <?phpclass ControllerCommonSeoUrl extends Controller {public function index() {// Add rewrite to url classif ($this->config->get('config_seo_url')) {$this->url->addRewrite($this);} // Decode URLif (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] == 'news_id') {$this->request->get['news_id'] = $url[1];}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 {if ($parts[0] == 'news') { $this->request->get['route'] = 'information/news';} 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/info';} elseif (isset($this->request->get['news_id'])) {$this->request->get['route'] = 'information/news';} 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); if ($data['route'] == 'information/news' AND !isset($data['news_id'])) {$url .= '/' . 'news';unset($data['route']);} foreach ($data as $key => $value) {if (isset($data['route'])) {if (($data['route'] == 'information/news' && $key == 'news_id') || ($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]);}}} 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;}}}?>
может и мне поможите примерна та-же история Сделал все как сказано все работает и главная и товары и категории и статьи, но все равно остаются странички без чпу например карта сайта, производители и другие не редактируемые из админки страницы с путем типа /index.php?route=information/contact не пойму ( пользуюсь сео про
PapaLama, Выполните запрос к БД PHP: INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('common/home', '');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/wishlist', 'wishlist');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/account', 'my-account');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('checkout/cart', 'shopping-cart');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('checkout/checkout', 'checkout');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/login', 'login');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/logout', 'logout');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/order', 'order-history');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/newsletter', 'newsletter');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('product/special', 'specials');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('affiliate/account', 'affiliates');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('checkout/voucher', 'gift-vouchers');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('product/manufacturer', 'brands');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('information/contact', 'contact-us');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/return/insert', 'request-return');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('information/sitemap', 'sitemap');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/forgotten', 'forgot-password');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/download', 'downloads');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/return', 'returns');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/transaction', 'transactions');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/register', 'create-account');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('product/compare', 'compare-products');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('product/search', 'search');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/edit', 'edit-account');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/password', 'change-password');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/address', 'address-book');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('account/reward', 'reward-points');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('affiliate/edit', 'edit-affiliate-account');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('affiliate/password', 'change-affiliate-password');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('affiliate/payment', 'affiliate-payment-options');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('affiliate/tracking', 'affiliate-tracking-code');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('affiliate/transaction', 'affiliate-transactions');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('affiliate/logout', 'affiliate-logout');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('affiliate/forgotten', 'affiliate-forgot-password');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('affiliate/register', 'create-affiliate-account');INSERT INTO Префикс_БД_url_alias (query, keyword) VALUES ('affiliate/login', 'affiliate-login'); Где Префикс_БД_ ето префикс к БД(если его нет тогда просто удалите Префикс_БД_) Если нужно постоянно редактировать урл тогда установите етот модуль
Я понимаю что надо sql запрос в myphpadmin сделать, но не понятно как правильно его составить? Надо заменить всю строчку "Префикс_БД_url_alias" на то что у меня в базе прописано ? и где смотреть какой префикс и есть он или нет ? http://clip2net.com/s/53QrYO если таблица выглядит вот так то префикса нету ? он ведь должен стоять перед названием таблицы ?
У вас нет префикса. Строчки в запросе должны быть в виде: INSERT INTO url_alias (query, keyword) VALUES ......... но насколько я помню, со стандартным seopro это работать не будет, нужно его модификацию ставить.
Создайте файл в корне сайта например seo_url.php со следующим содержымым PHP: <?phprequire_once(dirname(__FILE__)."/config.php");require_once(DIR_SYSTEM . 'startup.php');require_once(DIR_DATABASE . 'mysql.php');$need_configs = array( 'config_url', 'config_ssl', 'config_customer_group_id', 'config_language');$config = new Config();$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);$db->query("INSERT INTO `" . DB_PREFIX . "url_alias` (`query`, `keyword`) VALUES ('common/home', ''), ('account/wishlist', 'wishlist'), ('account/account', 'my-account'), ('checkout/cart', 'cart'), ('checkout/checkout', 'checkout'), ('account/login', 'login'), ('account/logout', 'logout'), ('account/order', 'order-history'), ('account/newsletter', 'newsletter'), ('product/special', 'specials'), ('affiliate/account', 'affiliates'), ('checkout/voucher', 'vouchers'), ('product/manufacturer', 'manufacturer'), ('information/contact', 'contact-us'), ('account/return/insert', 'request-return'), ('information/sitemap', 'sitemap'), ('account/forgotten', 'forgot-password'), ('account/download', 'downloads'), ('account/return', 'returns'), ('account/transaction', 'transactions'), ('account/register', 'register'), ('product/compare', 'compare'), ('product/search', 'search'), ('account/edit', 'edit-account'), ('account/password', 'change-password'), ('account/address', 'address-book'), ('account/reward', 'reward-points'), ('affiliate/edit', 'edit-affiliate-account'), ('affiliate/password', 'change-affiliate-password')");?>Сделано. Только пры условии что вы не устанавливали СЕО менеджер! Потом запустите его перейдя по ссылке ваш_домен/seo_url.php
это надо сделать вместо запросов в БД ? или надо сделать и то и то? Да стоит стандартная версия русского остора 1.5.4.1 со встроенным в него модулем seo pro, что лучше сделать может его вовсе отключить и сделать правки самостоятельно ? Или посоветуете новую версию сео про поставить ? или аналог ?
Вот тут скачайте и замените только свой файл catalog/controller/common/seo_pro.php на новый И вместо запросов просто выполните скрипт
Да все заработало!! Супер!! только чертов сайтмап все равно перенаправляет на http://сайт.ru/index.php?route=feed/google_sitemap при том что прописано http://сайт.ru/sitemap везде (( не пойму где то ошибся или надо копать в другом месте (
http://сайт.ru/sitemap ето визуальная карта сайта для пользователей а карта сайта для гугла и прочих http://сайт.ru/sitemap.xml Для етого В файле .htaccess PHP: RewriteRule ^sitemap.xml$ index.php?route=feed/google_sitemap [L] Ну и посмотрите ничего ли нет лишнего в директиве
Да прошу прощения не то что то получилось заработали только производители я на радостях уже думал все окей ( вставлял файл сео про из предложенного вами не внося изменений в БД (. прописано но так понимаю по смыслу для гугла а может лучше поменять для всех поисковиков путь на http://сайт.ru/sitemap.xml как это прописывается? Да просто висел кэш теперь стали работать другие изменения которые я вносил в БД, остается вопрос с правильным путем к http://сайт.ru/sitemap.xml для робота яндекса и прочее.
Да пришлось так и сделать(. Получилось сделать все урл на сайте чпу но при этом вновь добавленные товары перестали делаться с чпу урлом, вернул на сайт старый seo_pro.php все урл всяких личных кабинетов и тп окракозябрились, зато новые товары приобрели нормальный вид... получаеться либо так либо так ?
Нет, получается не так и не так, а получается что советов не читали а делали по своему! Могу только предположить что вы скачали кешырованый сео про и после добавления товара страница была не найдена потому что в кеш ее еще не было, для етого нужно чистить кеш Полно статей на форуме по поводу избавления rout вот только читать всем нет смысла....
После создания новых позиций, seourl обновится в течение часа. Где-то видел решение, чтобы кеш сразу скидывался при создании новых seourl.