Sign in to follow this  
support

Как sql запросом прописать всем товарам и статья SEO URL с транслитерацией названия из кириллицы в латиницу?!

Recommended Posts

support

Иногда есть необходимость прописать всем уже созданным товарам, категориям SEO URL товара.

Одним SQL запросов.

В данной заметке покажу как это делается.

 

Пропишем массово всем категориям и товарам в VamShop адреса вида:

http://магазин.ру/nazvanie-tovara-p-1.html

nazvanie-tovara - это название товара, указанное в админке, переведённое в транслит.

p-1 - это id номер товара.

Категории будет выглядеть так:

http://магазин.ру/nazvanie-kategorii-c-1.html

nazvanie-kategorii - это название категории, указанное в админке, переведённое в транслит.

c-1 - это id номер категории.

 

1. Заходите в свою базу данных в phpMyAdmin, в закладке SQL выполняем следующий код:

DELIMITER $$

DROP FUNCTION IF EXISTS `_fs_transliterate_ru` $$
CREATE DEFINER=`root`@`localhost`
FUNCTION `_fs_transliterate_ru`(str TEXT CHARSET utf8)
  RETURNS text CHARSET utf8
DETERMINISTIC SQL SECURITY INVOKER
  BEGIN
    DECLARE strlow TEXT CHARSET utf8;
    DECLARE sym VARCHAR(3) CHARSET utf8;
    DECLARE prevsub VARCHAR(3) CHARSET utf8;
    DECLARE sub VARCHAR(3) CHARSET utf8;
    DECLARE res TEXT CHARSET utf8;
    DECLARE len INT(11);
    DECLARE i INT(11);
    DECLARE pos INT(11);
    DECLARE alphabeth VARCHAR(37) CHARSET utf8;

    SET i = 0;
    SET res = '';
    SET strlow = LOWER(str);
    SET len = CHAR_LENGTH(str);
    SET alphabeth = ' _.абвгдеёжзийклмнопрстуфхцчшщъыьэюя';

    /* идем циклом по символам строки */

    WHILE i < len DO

      SET i = i + 1;
      SET sym = SUBSTR(strlow, i, 1);
      SET pos = INSTR(alphabeth, sym);

      /*выполняем преобразование припомощи ф-ии ELT */

      IF sym >= '0' AND sym <= '9' OR sym >= 'a' AND sym <= 'z' OR sym = '-' THEN
        SET sub = sym;
      ELSE
        SET sub = elt(pos, '-', '-', '-',
                    'a','b','v','g', 'd', 'e', 'yo','zh', 'z',
                    'i','j','k','l', 'm', 'n', 'o', 'p', 'r',
                    's','t','u','f', 'h', 'c','ch','sh','sch',
                    '', 'y', '','e','yu','ya');

      END IF;

      IF sub IS NOT NULL AND NOT(sub = '-' AND prevsub = '-') THEN
        SET res = CONCAT(res, sub);
      END IF;

      SET prevsub = sub;

    END WHILE;

    RETURN res;
  END $$

DELIMITER ;

2. Мы создали функцию для транслитерации кириллицы.

Теперь просто прописывает адреса категориям и товарам, в закладке SQL выполняем запрос:

UPDATE products,products_description SET products.products_page_url=concat(_fs_transliterate_ru(products_description.products_name),"-p-",products.products_id,".html")
WHERE products.products_id=products_description.products_id;

Всё, мы прописали адреса на транслите.

К примеру,  товар - Название товара на русском

С помощью данного запроса у товара получится такой SEO URL адрес: nazvanie-tovara-na-russkom-p-10.html

 

Аналогичный запрос для категорий:

UPDATE categories,categories_description SET categories.categories_url=concat(_fs_transliterate_ru(categories_description.categories_name),"-c-",categories.categories_id,".html")
WHERE categories.categories_id=categories_description.categories_id;

Если название категории Смартфоны.

То адрес получится такой: smartfony-c-3.html

Share this post


Link to post
Share on other sites
support

Если необходимо задать такие адреса только тем товарам, у которых не был установлен seo url, тогда запрос будет такой.

Для товаров:

UPDATE products,products_description SET products.products_page_url=concat(_fs_transliterate_ru(products_description.products_name),"-p-",products.products_id,".html")
WHERE products.products_id=products_description.products_id and products.products_page_url='';

Для категорий:

UPDATE categories,categories_description SET categories.categories_url=concat(_fs_transliterate_ru(categories_description.categories_name),"-c-",categories.categories_id,".html")
WHERE categories.categories_id=categories_description.categories_id and categories.categories_url = '';

 

Share this post


Link to post
Share on other sites
support

Для статей:

UPDATE articles,articles_description SET articles.articles_page_url=concat(_fs_transliterate_ru(articles_description.articles_name),"-a-",articles.articles_id,".html")
WHERE articles.articles_id=articles_description.articles_id and articles.articles_page_url='';

 

Share this post


Link to post
Share on other sites
Sign in to follow this