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","."=>"-"," "=>"-","?"=>"-","/"=>"-","\\"=>"-","("=>"",")"=>"",
"*"=>"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;

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

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

Сказать $пасибо

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

  1. Мария 05 июня 2020, 20:50
    0

    Здравствуйте, Владимир, а Вы случайно не подскажете sql запрос к БД чтобы заменить в урлах % на —
    у меня в магазине больше 1000 товаров и урлы заполнены с пробелами, оупенкарт заменил их на % и вручную это очень долго менять, я подозреваю что можно запросом к БД это поправить… но у меня проблемы с синтакисом, боюсь поломать всё.

    1. Владимир 05 июня 2020, 22:15
      0

      Доброй ночи! Попробуйте вот так, в phpmyadmin:

      UPDATE `oc_url_alias` SET `keyword`= REPLACE(`keyword`, '%', '-');

    2. Валерий 04 августа 2016, 20:13
      0

      Здравствуйте, как сделать чтобы URL формировался с имени продукта?

      1. Татьяна 16 февраля 2016, 12:46
        0

        Не работает на осторе 2

        1. Владимир 16 февраля 2016, 13:13
          0

          Проверял на чистом опенкарте, хотя в оссторе в этой части различий не вижу, другое дело что здесь для opencart 1.5… Попробуйте заменить «if ($data['keyword']) {» на «if (isset($data['keyword'])) {», как это сделано в оригинале.

        2. Сергей 01 февраля 2016, 09:00
          +1

          Спасибо за доработку! Просто и функционально!

          1. Руслан 08 июня 2015, 17:53
            +1

            Можно ли как-то сделать чтобы в URL была категория товара, хотя бы первая присвоенная.

            1. Владимир 09 июня 2015, 05:52
              +1

              Вариант есть.. вопрос только что должно быть в итоге:
              categoria-tovar001 или categoria/tovar001?