Оценок: 1

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
Надежный хостинг VPS серверов
  • Свои ISO образы
  • VDS с оплатой раз и навсегда
  • Аренда VDS на любой срок, с оплатой по дням
  • Большое разнообразие конфигураций
  • Дата-центры в ЕС и России
+ скидка 10%

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

  1. Добрый день! А не подскажете ли — в информационных страницах, например, в стороннем модуле новостей, который лежит в папках где и information — так же делать? Просто если так же, то не выходит. Ничего не генерируется, увы.

    Ольга Ермакова 30 июля 2020, 15:33 0
    • Здравствуйте! Должно работать, все так же. Посмотреть бы этот модуль… Как вариант, там уже есть подобное, на более раннем этапе и url приходит не пустой (один из модулей блога точно создает ссылки с помощью js)

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

      Мария 05 июня 2020, 20:50 0
      • Доброй ночи! Попробуйте вот так, в phpmyadmin:

        Показать код
        UPDATE `oc_url_alias` SET `keyword`= REPLACE(`keyword`, '%', '-');

        Владимир 05 июня 2020, 22:15 0
      • Здравствуйте, как сделать чтобы URL формировался с имени продукта?

        Валерий 04 августа 2016, 20:13 0
        • Не работает на осторе 2

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

            Владимир 16 февраля 2016, 13:13 0
          • Спасибо за доработку! Просто и функционально!

            Сергей 01 февраля 2016, 09:00 +1
            • Можно ли как-то сделать чтобы в URL была категория товара, хотя бы первая присвоенная.

              Руслан 08 июня 2015, 17:53 +1
              • Вариант есть.. вопрос только что должно быть в итоге:
                categoria-tovar001 или categoria/tovar001?

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