Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Перегруппировка категорий


Recommended Posts

Господа программисты!

Кто сталкивался или имеет предложения для решения задачи:

Реализовать перегруппировку двухуровневой иерархии категорий (по клику можно с перезагрузкой страницы)

1) Фирма -> Товарная группа -> Товар

2) Товарная группа -> Фирма -> Товар

т.е. в БД задана двухуровневая структура категорий типа:

Фирма А
====> Товарная Группа 1
-----------> Товар 1
-----------> Товар 2
-----------> Товар 3
====> Товарная Группа 2
-----------> Товар 4
-----------> Товар 5
====> Товарная Группа 3
-----------> Товар 6
-----------> Товар 7
Фирма B
====> Товарная Группа 1
-----------> Товар 8
-----------> Товар 9
====> Товарная Группа 2
-----------> Товар 10
-----------> Товар 11
====> Товарная Группа 3
-----------> Товар 12

Нужно перегруппировать категории в следующую структуру:

Товарная Группа 1
====> Фирма А
-----------> Товар 1
-----------> Товар 2
-----------> Товар 3
====> Фирма B
-----------> Товар 8
-----------> Товар 9
Товарная Группа 2
====> Фирма А
-----------> Товар 4
-----------> Товар 5
====> Фирма B
-----------> Товар 10
-----------> Товар 11
Товарная Группа 3
====> Фирма А
-----------> Товар 6
-----------> Товар 7
====> Фирма B
-----------> Товар 12

Прошу порекомендовать способ решения указанной задачи.

Заранее благодарен.

Надіслати
Поділитися на інших сайтах


Господа программисты!

Кто сталкивался или имеет предложения для решения задачи:

Реализовать перегруппировку двухуровневой иерархии категорий (по клику можно с перезагрузкой страницы)

1) Фирма -> Товарная группа -> Товар

2) Товарная группа -> Фирма -> Товар

т.е. в БД задана двухуровневая структура категорий типа:

Фирма А
====> Товарная Группа 1
-----------> Товар 1
-----------> Товар 2
-----------> Товар 3
====> Товарная Группа 2
-----------> Товар 4
-----------> Товар 5
====> Товарная Группа 3
-----------> Товар 6
-----------> Товар 7
Фирма B
====> Товарная Группа 1
-----------> Товар 8
-----------> Товар 9
====> Товарная Группа 2
-----------> Товар 10
-----------> Товар 11
====> Товарная Группа 3
-----------> Товар 12

Нужно перегруппировать категории в следующую структуру:

Товарная Группа 1
====> Фирма А
-----------> Товар 1
-----------> Товар 2
-----------> Товар 3
====> Фирма B
-----------> Товар 8
-----------> Товар 9
Товарная Группа 2
====> Фирма А
-----------> Товар 4
-----------> Товар 5
====> Фирма B
-----------> Товар 10
-----------> Товар 11
Товарная Группа 3
====> Фирма А
-----------> Товар 6
-----------> Товар 7
====> Фирма B
-----------> Товар 12

Прошу порекомендовать способ решения указанной задачи.

Заранее благодарен.

навскидку.. дописать в модель категории метод выбора производителей для конекретной категории по наличю товара, для выбора самого товара уже есть в модели фильтр по производителю, просто нужно включить его как обязательный фильтр ну и помудрить с ЧПУ.

Что то похожее видел, но там ещё были изменения в структуре БД (таблица product_to_category) с привязкой товар-категория-производитель (три поля), в дефолтной поставке идёт товар-категория (два поля).

Надіслати
Поділитися на інших сайтах

навскидку.. дописать в модель категории метод выбора производителей для конекретной категории по наличю товара, для выбора самого товара уже есть в модели фильтр по производителю, просто нужно включить его как обязательный фильтр ну и помудрить с ЧПУ.

Здесь "фишка" в том, что в настоящий момент товары сгруппированы по типу: КатегорияПроизводитель -> КатегорияТоварнаяГруппа, а нужно перегруппировать в КатегорияТоварнаяГруппа -> КатегорияПроизводитель и этой новой структуры физически нет в БД, её нужно сгенерировать на основании данных исходной структуры. Что касается отбора товаров, то фильтр должен быть не только по Производителю, но и по ТоварнойГруппе, а значит стандартный не пойдет.

Что то похожее видел, но там ещё были изменения в структуре БД (таблица product_to_category) с привязкой товар-категория-производитель (три поля), в дефолтной поставке идёт товар-категория (два поля).

Изменения в структуре БД не обязательны, хотя если задать ее, то задача существенно упростится.

Нужны еще идеи!

Спасибо.

Надіслати
Поділитися на інших сайтах


Что касается отбора товаров, то фильтр должен быть не только по Производителю, но и по ТоварнойГруппе, а значит стандартный не пойдет.

Нужны еще идеи!

Спасибо.

		if (isset($data['filter_tag']) && $data['filter_tag']) {
			$sql .= " AND p.product_id IN (SELECT pt.product_id FROM " . DB_PREFIX . "product_tag pt WHERE pt.language_id = '" . (int)$this->config->get('config_language_id') . "' AND LOWER(pt.tag) LIKE '%" . $this->db->escape(strtolower($data['filter_tag'])) . "%')";
		}
									
		if (isset($data['filter_category_id']) && $data['filter_category_id']) {
			if (isset($data['filter_sub_category']) && $data['filter_sub_category']) {
				$implode_data = array();
				
				$this->load->model('catalog/category');
				
				$categories = $this->model_catalog_category->getCategoriesByParentId($data['filter_category_id']);
				
				foreach ($categories as $category_id) {
					$implode_data[] = "p2c.category_id = '" . (int)$category_id . "'";
				}
				
				$sql .= " AND p.product_id IN (SELECT p2c.product_id FROM " . DB_PREFIX . "product_to_category p2c WHERE " . implode(' OR ', $implode_data) . ")";			
			} else {
				$sql .= " AND p.product_id IN (SELECT p2c.product_id FROM " . DB_PREFIX . "product_to_category p2c WHERE p2c.category_id = '" . (int)$data['filter_category_id'] . "')";
			}
		}
		
		if (isset($data['filter_manufacturer_id'])) {
			$sql .= " AND p.manufacturer_id = '" . (int)$data['filter_manufacturer_id'] . "'";
		}
Это из модели товара, конкретно из метода getProducts, это стандартный фильтр в котором есть - Теги, Категория, Производитель и т.д. Выбор группы товара попадает под условия Категория = category_id и Производитель = filter_manufacturer_id, собственно внутри это будет именно так и ни как по другому, стандартный фильтр есть и он работает, причём превосходно.

Всё что требуется это добавить в существующую модель категорий в виде второго уровня категорий КатегорияПроизводитель, решается это формированием подкатегории в виде КатегорияПроизводитель на основании фильтрации по товару (не путать с фильтрацией самого товара).

В работе для Товарная группа -> Фирма -> Товар:

1) Выбираете категории (все, ибо они у вас все родительские для КатегорияПроизводитель, других нет)

2) Выбираете для каждой выбранной категории Производителей на основании наличия товара в КатегорияТоварнаяГруппа и КатегорияПроизводитель, то есть если есть товар в Категории и Производителе зн КатегорияТоварнаяГруппа -> КатегорияПроизводитель присутствует. Механизм выборки сего списка основная головная боль.

3) Имеете КатегорияТоварнаяГруппа_ID -> КатегорияПроизводитель_ID = список товара по стандартному фильтру.

4) ЧПУ - возможно придётся допиливать чтоб для клиента выглядело именно как категория

обе схемы

1) Фирма -> Товарная группа -> Товар

2) Товарная группа -> Фирма -> Товар

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

Модель категорий пилить неизбежно, до кучи все контроллеры где светятся списки товаров (если хотите причёсанные ссылки)...

ЗЫ забыл упомянуть что всё это проделывается с Родительсими категориями и встроенным функционалом Производители, тоесть вложенность она визуальная, на деле есть категории и есть производители завязанные через товар... ИХМО изменение в схеме БД, хотябы изменение вышеобозначенной таблицы, упростило бы всё в разы...

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.