Небольшая инструкция по добавлению автоматического создания урлов для товаров при их добавлении. Необходимо будет внести правку в один файл - модель товара в админке, после чего будет формироваться урл вида "id товара"-"название товара в транслите".html (можно сменить на что то свое)
ID товара решил использовать, что бы не допустить одинаковых ссылок.
Изменения. Откроем для редактирования файл /admin/model/catalog/product.php
Здесь, в функции addProduct (в конце данной функции), найдем следующее:
if ($data['keyword']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
}
И заменим на:
if ($data['keyword']) {
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . $this->db->escape($data['keyword']) . "'");
} else {
$tr = array ("А"=>"a","Б"=>"b","В"=>"v","Г"=>"g","Д"=>"d","Е"=>"e","Ж"=>"zh","З"=>"z","И"=>"i","Й"=>"j","К"=>"k","Л"=>"l",
"М"=>"m","Н"=>"n","О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t","У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch",
"Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"y","Ь"=>"","Э"=>"e","Ю"=>"yu","Я"=>"ja","а"=>"a","б"=>"b","в"=>"v","г"=>"g",
"д"=>"d","е"=>"e","ж"=>"j","з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l","м"=>"m","н"=>"n","о"=>"o","п"=>"p",
"р"=>"r","с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y","ы"=>"yi",
"ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya","."=>"-"," "=>"-","?"=>"-","/"=>"-","\\"=>"-","("=>"",")"=>"",
"*"=>"x",":"=>"-",","=>"-","\""=>"","№"=>"n",";"=>"","%"=>"","_"=>"-",">"=>"-","|"=>"-","'"=>"","--"=>"");
$my_seo_url = strtr($value['name'] ,$tr);
$seo_url = $product_id . '-' . $my_seo_url . '.html';
$this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . strtolower($seo_url) . "'");
}
Как бы и все изменения.. Теперь если урл прописан - он и будет вставлен, если же не прописали - будет создан из ID и имени товара + в конце будет добавлено .html
Если есть желание что то поменять, в следующей строке как раз и формируется урл:
$seo_url = $product_id . '-' . $my_seo_url . '.html';
к примеру, можно сделать так:
$seo_url = strtr($data['model'] ,$tr) . '-' . $my_seo_url;
В таком варианте урл будет сформирован из модели и названия.
Если по поводу транслита есть альтернативные мнения - пишите.
Добрый день! А не подскажете ли — в информационных страницах, например, в стороннем модуле новостей, который лежит в папках где и information — так же делать? Просто если так же, то не выходит. Ничего не генерируется, увы.
Здравствуйте! Должно работать, все так же. Посмотреть бы этот модуль… Как вариант, там уже есть подобное, на более раннем этапе и url приходит не пустой (один из модулей блога точно создает ссылки с помощью js)
Здравствуйте, Владимир, а Вы случайно не подскажете sql запрос к БД чтобы заменить в урлах % на —
у меня в магазине больше 1000 товаров и урлы заполнены с пробелами, оупенкарт заменил их на % и вручную это очень долго менять, я подозреваю что можно запросом к БД это поправить… но у меня проблемы с синтакисом, боюсь поломать всё.
Доброй ночи! Попробуйте вот так, в phpmyadmin:
Здравствуйте, как сделать чтобы URL формировался с имени продукта?
Не работает на осторе 2
Проверял на чистом опенкарте, хотя в оссторе в этой части различий не вижу, другое дело что здесь для opencart 1.5… Попробуйте заменить «if ($data['keyword']) {» на «if (isset($data['keyword'])) {», как это сделано в оригинале.
Спасибо за доработку! Просто и функционально!
Можно ли как-то сделать чтобы в URL была категория товара, хотя бы первая присвоенная.
Вариант есть.. вопрос только что должно быть в итоге:
categoria-tovar001 или categoria/tovar001?