Opencart - автоматическое создание SEO URL для товаров

Небольшая инструкция по добавлению автоматического создания урлов для товаров при их добавлении. Необходимо будет внести правку в один файл - модель товара в админке, после чего будет формироваться урл вида "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","."=>"-"," "=>"-","?"=>"-","/"=>"-","\\"=>"-","("=>"",")"=>"","*"=>"-",":"=>"-","*"=>"-",
">"=>"-","|"=>"-","'"=>"");
$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 = '" . $seo_url . "'");
}

Как бы и все изменения.. Теперь если урл прописан - он и будет вставлен, если же не прописали - будет создан из ID и имени товара + в конце будет добавлено .html

Если есть желание что то поменять, в следующей строке как раз и формируется урл:

$seo_url  = $product_id . '-' . $my_seo_url . '.html';

к примеру, можно сделать так:

$seo_url  = strtr($data['model'] ,$tr) . '-' . $my_seo_url;

В таком варианте урл будет сформирован из модели и названия.

Если по поводу транслита есть альтернативные мнения - пишите.

Еще 4 материала, которые возможно Вам понравятся:

Добавить комментарий

Комментарии (6)

  1. Валерий 04 августа 2016, 20:13
    Здравствуйте, как сделать чтобы URL формировался с имени продукта?
    1. Татьяна 16 февраля 2016, 12:46
      Не работает на осторе 2
      1. Владимир 16 февраля 2016, 13:13
        Проверял на чистом опенкарте, хотя в оссторе в этой части различий не вижу, другое дело что здесь для opencart 1.5… Попробуйте заменить «if ($data['keyword']) {» на «if (isset($data['keyword'])) {», как это сделано в оригинале.
      2. Сергей 01 февраля 2016, 09:00
        Спасибо за доработку! Просто и функционально!
        1. Руслан 08 июня 2015, 17:53
          Можно ли как-то сделать чтобы в URL была категория товара, хотя бы первая присвоенная.
          1. Владимир 09 июня 2015, 05:52
            Вариант есть.. вопрос только что должно быть в итоге:
            categoria-tovar001 или categoria/tovar001?