Автор Тема: Как определить первую (основную),родительскую категорию товара.  (Прочитано 89 раз)

04 Апрель 2017, 13:02:47
  • Старожил
  • ****
  • Сообщений: 352
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Добрый день!

Возник такой вопрос..
Необходимо вывести основную родительскую категорию товара.
Есть товар,  Джинсы 001, который находиться в  категории:
Осень—Девочки—Джинсы—товар Джинсы 001
На странице карточки товара shopping-cart-product-line.tpl, получить категорию товара в которой он находиться нет проблем.
Добавить в Cart.php –
// Build SELECT
      $sql->select('………. cl.`name` AS categoryname

А затем в shopping-cart-product-line.tpl вывевсти
{$product.categoryname|escape:'html':'UTF-8'}
И получим наименование категории – Джинсы.

А как получить категорию – Осень.
Самую верхнюю категорию где он находиться, с условием что товар (Джинсы 001) находиться только в категории Джинсы, а не во всех верхних категориях.
Есть в таблице базы category, поле id_parent,  может  как-то при запросе его связать с товаром.
Спасибо!
04 Апрель 2017, 15:42:09
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 13999
  • Репутация: +14568/-2
  • Сообщество PrestaShop
    • Просмотр профиля
// Get the default id category from defined product object
$id_category_default = $product->getDefaultCategory();
   
// Get array of ids categories from the defined object product
$categories = $product->getCategories();
   
// Alternatively you can also Get array of id categories
$categories = Product::getProductCategories($product->id);

В шаблоне можно получить ид категории
{$product.category_default}
04 Апрель 2017, 16:12:02
Ответ #2
  • Старожил
  • ****
  • Сообщений: 352
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо большое буду смотреть.
Но вроде я уже пробовал default выводить..
Сейчас еще раз посмотрю..
04 Апрель 2017, 19:38:36
Ответ #3
  • Старожил
  • ****
  • Сообщений: 352
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Нет так не пойдет..
Я уже выше говорил что вывод нужен на странице заказа shopping-cart-product-line.tpl
То-есть запрос идет в Cart.php
// Build SELECT
$sql->select('cp.`id_product_attribute`, cp.`id_product`, cp.`quantity` AS cart_quantity, cp.id_shop, pl.`name`, p.`is_virtual`,
pl.`description_short`, pl.`available_now`, pl.`available_later`, product_shop.`id_category_default`, p.`id_supplier`,
p.`id_manufacturer`, product_shop.`on_sale`, product_shop.`ecotax`, product_shop.`additional_shipping_cost`,
product_shop.`available_for_order`, product_shop.`price`, product_shop.`active`, product_shop.`unity`, product_shop.`unit_price_ratio`,
stock.`quantity` AS quantity_available, p.`width`, p.`height`, p.`depth`, stock.`out_of_stock`, p.`weight`,
p.`date_add`, p.`date_upd`, IFNULL(stock.quantity, 0) as quantity, pl.`link_rewrite`,su.`position`,su.`id_parent`,su.`level_depth`,cl.`name` AS categoryname ,cl.`link_rewrite` AS category,
CONCAT(LPAD(cp.`id_product`, 10, 0), LPAD(IFNULL(cp.`id_product_attribute`, 0), 10, 0), IFNULL(cp.`id_address_delivery`, 0)) AS unique_id, cp.id_address_delivery,
product_shop.`wholesale_price`, product_shop.advanced_stock_management, ps.product_supplier_reference supplier_reference, IFNULL(sp.`reduction_type`, 0) AS reduction_type');
// Build FROM
$sql->from('cart_product', 'cp');
и тд....
В этом запросе сделаны переменные поля su.`id_parent`,su.`level_depth`
Которые по запросу
$sql->leftJoin('category', 'su', 'su.`id_category` = cl.`id_category`');
в итоге в заказе
 shopping-cart-product-line.tpl можно вывести
{$product.level_depth|escape:'html':'UTF-8'} - определяет глубину вложенности подкатегории
{$product.id_parent|escape:'html':'UTF-8'} - субкатегория продукта
{$product.categoryname|escape:'html':'UTF-8'} - наименование субкатегории продукта

Глубина вложенности продукта 4.
Выводит последнюю 4 категорию, а основная то 1.
Если бы у товара была указана категория по умолчанию, и указана основная категория самая верхняя, то и вопрос бы отпал.
Но по умолчанию у товара стоит конечная котегория.
В таблице ps_category есть данные для получения основной первой категории товара, только вот как ее получить.
Этот запрос
$sql->leftJoin('category', 'su', 'su.`id_category` = cl.`id_category`');берет соответственно ИД категории из ИД продукта, ну и получаем категорию где товар.
Но если мы посмотрим вложение то,
ИД Категории товара 29, ИД id_parent у него 28
ИД Категории 28, ИД id_parent у него 27
и тд. в итоге верхняя основная категория у этого товара 2.
Вот ее и надо как-то запросом получить, или перебором.
Спасибо!
05 Апрель 2017, 21:04:14
Ответ #4
  • Старожил
  • ****
  • Сообщений: 352
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля