Oscommerce - изменение номеров (идентификаторов) категорий

Несмотря на наличие быстрого easypopulate импорта товаров у OsCommerce, не всегда удаётся “гладко” импортировать товары и категории. Некоторые особенности работы импорта рассмотрены по ссылке. Остановлюсь лишь на том, что в случае удаления старой категории (или нескольких), возможно (а, скорее всего, именно так и будет) несовпадение ID (идентификаторов категорий). То есть, если раньше, например, категория шайбы имела идентификатор 53, то заново созданная категория с таким же именем может отличаться. Особенно критично это, когда так называемые id-шники используются в адресах страниц (несмотря на распространение и пропаганду ЧПУ, далеко не все сайты ими пользуются.. в т.ч. и help.yandex.ru кстати..):

Oscommerce - как поменять номера категорий?

Таким образом, желательно (по ряду причин.. - наверняка, если вы это читаете, объяснять не нужно), было бы неплохо, чтобы вместо нового адреса, например,

shopshop.tld/index.php/cPath/5971

наша старая добрая категория имела старый добрый адрес

shopshop.tld/index.php/cPath/6374

Хранение информации о каталоге в OsCommerce организовано довольно просто:

`categories`.`categories_id` - PK, идентификатор категории
`categories`.`parent_id` - FK, идентификатор категории
`categories_description`.`categories_id` - FK (является частью PK categories_id + lang_id) - информация о категории
`products_to_categories`.`categories_id` - FK, связь многие-ко-многим с товарами

Для замены (т.к. Id может быть занят) воспользуемся заменой A -> B; B->A. Но, поскольку в категории с нужным нам ID также могуть быть товары, заменять будем через промежуточный ID. Чтобы попасть на наверняка не занятый номер, сделаем “просто” - будем использовать отрицательный номер категории (на момент написания статьи Unsigned не использовался.. Однако, даже если он будет введён - почти наверняка останется 0). В таком подходе есть один плюс - при использовании “заведомо большого числа” может увеличиваться AUTO_INCREMENT, что приведёт к тому, что “Заведомо большое число” будет не таким уж большим.

Меняем местами категории в OsCommerce

Собственно, для изменения местами категорий выполним SQL-запрос:

UPDATE categories_description
SET categories_id = -6374 WHERE categories_id = 6374;

UPDATE categories
SET categories_id = -6374 WHERE categories_id = 6374;

UPDATE categories
SET parent_id = -6374 WHERE parent_id = 6374;

UPDATE products_to_categories
SET categories_id = -6374 WHERE categories_id = 6374;

UPDATE categories_description
SET categories_id = 6374 WHERE categories_id = 5971;

UPDATE categories
SET categories_id = 6374 WHERE categories_id = 5971;

UPDATE categories
SET parent_id = 6374 WHERE parent_id = 5971;

UPDATE products_to_categories
SET categories_id = 6374 WHERE categories_id = 5971;

UPDATE categories_description
SET categories_id = 5971 WHERE categories_id = -6374;

UPDATE categories
SET categories_id = 5971 WHERE categories_id = -6374;

UPDATE categories
SET parent_id = 5971 WHERE parent_id = -6374;

UPDATE products_to_categories
SET categories_id = 5971 WHERE categories_id = -6374;

Очень простой скрипт замены категорий в OSCommerce для автоматической генерации SQL-запроса (не забываем сделать Backup!)

Метки:

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

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