Перейти к содержимому


Фото
- - - - -

Товар в нескольких категориях и хлебные крошки


Best Answer phukortsin , 12.01.2019 - 12:28

Последние 2 запроса можно заменить одним:

UPDATE `s_products_categories` SET `position` = 0 WHERE `category_id` IN ( SELECT `id` FROM `s_categories` WHERE `parent_id` like '%149%' );

Тогда не придется ручками формировать  длинный список...


 

Перейти к посту


  • Чтобы отвечать, сперва войдите на форум
10 ответов в теме

#1 question

question
  • Пользователь
  • 267 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 11.01.2019 - 12:19

Здравствуйте. Столкнулся со следующей проблемой: каждый товар (например, возьмём абстрактный, "стол малютка") размещён одновременно в трёх категориях:

 

Модульная мебель -> малютка

Детская мебель -> малютка

Элементы мебели ->Столы

 

Товаров очень много, и хлебные крошки в них выводятся как им вздумается. У стола первой категорией будет Модульная мебель -> малютка, а у комода - Детская мебель -> малютка

 

Пройтись по всем товарам и привести их к единому виду не представляется возможным. Как это сделать программно?

Мне не нужно готовое решение, просто подскажите алгоритм или в какую сторону копать.



#2 shooroop

shooroop
  • Фрилансер
  • 822 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Antarktida

Опубликовано 11.01.2019 - 12:21

не очень понятно что вы хотите.

 

укажите точный пример как на вашем сайте сейчас и как вам надо



#3 question

question
  • Пользователь
  • 267 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 11.01.2019 - 12:42

У товаров, добавленных в разное время, разная "первая категория".

В итоге сейчас у двух разных столов в хлебных крошках отображается

 

Детская мебель -> малютка -> Стол1

Элементы мебели ->Столы -> Стол2

 

Хочу, чтобы у всех столов хлебные крошки были одинаковыми:

Элементы мебели ->Столы -> Стол1

Элементы мебели ->Столы -> Стол2

Элементы мебели ->Столы -> Стол3


Изменено: question, 11.01.2019 - 12:42


#4 Kosjak76

Kosjak76
  • Модератор
  • 3 817 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 11.01.2019 - 13:58

Ну так зайдите в товары и укажите ПРАВИЛЬНУЮ первую категорию...

В чем, собственно, проблема?

Если товаров МНОГО - сделайте экспорт - поправьте категории и сделайте импорт

Лучше это конечно делать не со всеми сразу, а по категориям или брендам



#5 phukortsin

phukortsin
  • Фрилансер
  • 793 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 11.01.2019 - 14:01

У товаров, добавленных в разное время, разная "первая категория".

В итоге сейчас у двух разных столов в хлебных крошках отображается

 

Детская мебель -> малютка -> Стол1

Элементы мебели ->Столы -> Стол2

 

Хочу, чтобы у всех столов хлебные крошки были одинаковыми:

Элементы мебели ->Столы -> Стол1

Элементы мебели ->Столы -> Стол2

Элементы мебели ->Столы -> Стол3

 

Пробуйте, например, так:

1. Экспортировать в CSV,

2. В полученном файле в колонке категории заменить 'Детская мебель/малютка' на 'Элементы мебели/Столы',

3. Импортировать измененный файл.


Изменено: phukortsin, 11.01.2019 - 14:17


#6 Kosjak76

Kosjak76
  • Модератор
  • 3 817 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 11.01.2019 - 14:02

Ну, или писать какой-то скрипт, который будет менять позицию у категорий в таблице s_product_categories



#7 question

question
  • Пользователь
  • 267 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 11.01.2019 - 14:38

Пока думал и гадал, залез в БД и в голову пришло вот такое решение.


 

Позиция находится в столбце position таблицы s_products_categories.

Нужно просто определённым категориям назначить position минимальное значение


Изменено: question, 11.01.2019 - 14:45


#8 Kosjak76

Kosjak76
  • Модератор
  • 3 817 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 11.01.2019 - 14:43

По-моему, проще не списком это делать, а менять позиции

И причем тут parent_id?



#9 question

question
  • Пользователь
  • 267 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 12.01.2019 - 11:27

Для упорядочивания хлебных крошек и приведения их к единому стандарту, было решено сделать следующее:

Для начала увеличиваем позицию всех категорий на 1.

UPDATE `s_products_categories` SET `position` = `position` +1;
 

Затем либо выписываем вручную категории, которые должны быть "основными" в хлебных крошках, либо (в моём случае) выбираем дочерние категории из той категории, которая у нас основная (в моём случае "элементы мебели")

SELECT `id` FROM `s_categories` WHERE `parent_id` like '%149%'
 

Далее полученным id категорий присваиваем позицию равную 0 для того, чтобы эти категории были "основными". В моём случае это выглядит так

UPDATE `s_products_categories` SET `position` = 0 WHERE `category_id` IN (64,67,71, и ещё куча категорий);
 

Всё.


Изменено: question, 12.01.2019 - 12:01


#10 phukortsin

phukortsin
  • Фрилансер
  • 793 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 12.01.2019 - 12:28   Best Answer

Последние 2 запроса можно заменить одним:

UPDATE `s_products_categories` SET `position` = 0 WHERE `category_id` IN ( SELECT `id` FROM `s_categories` WHERE `parent_id` like '%149%' );

Тогда не придется ручками формировать  длинный список...


 



#11 question

question
  • Пользователь
  • 267 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 14.01.2019 - 12:11

Последние 2 запроса можно заменить одним:

UPDATE `s_products_categories` SET `position` = 0 WHERE `category_id` IN ( SELECT `id` FROM `s_categories` WHERE `parent_id` like '%149%' );

Тогда не придется ручками формировать  длинный список...


 

Спасибо.






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых