Skip to content

Instantly share code, notes, and snippets.

@gartes
Last active November 27, 2021 22:54
Show Gist options
  • Save gartes/c7d77edc5c35842dc4295b62c427f60f to your computer and use it in GitHub Desktop.
Save gartes/c7d77edc5c35842dc4295b62c427f60f to your computer and use it in GitHub Desktop.
Получить дерево категорий товар (OpenCart)
/**
* Создать дерево категорий для товара
* Использовано для CMS - OpenCart
*
* @param int $product_id
* @param int $categoryId
* @param string $categoryTreeArray
*
* @return array|mixed|string
* @since 3.9
* @auhtor Gartes | sad.net79@gmail.com | Skype : agroparknew | Telegram : @gartes
* @date 28.11.2021 00:30
*
* @use $CategoriesTree = $this->getCategoryTree( $result['product_id'] );
*/
public function getCategoryTree($product_id , $categoryId = 0 , $categoryTreeArray = '' ){
if (!is_array($categoryTreeArray)) $categoryTreeArray = array();
# При первом обращении получаем ID категории для товара
if( !$categoryId )
{
$Categories = $this->getCategories( $product_id );
$categoryId = $Categories[0]['category_id'] ;
}#END IF
$parentCategory = $this->getParentCategory( $categoryId );
if( !empty($parentCategory) )
{
$categoryTreeArray['category_idArr'][] = $parentCategory['category_id'] ;
$categoryTreeArray['category_nameArr'][] = $parentCategory['name'] ;
$categoryTreeArray['categoryArr'][] = $parentCategory ;
if( $parentCategory['parent_id'] )
{
return $this->getCategoryTree($product_id , $parentCategory['parent_id'] , $categoryTreeArray );
}#END IF
}#END IF
$categoryTreeArray['category_nameArr'] = array_reverse($categoryTreeArray['category_nameArr']);
# Обработка названий категорий в виде дерева
$spacing = '' ;
foreach ( $categoryTreeArray['category_nameArr'] as &$item)
{
$item = $spacing . $item ;
$spacing .= '-' ;
}#END FOREACH
/**
* Создать путь из ID Categories for OpenCart Shop
* e.x - 111_114_33
*/
$categoryTreeArray['path'] = implode('_' , array_reverse( $categoryTreeArray['category_idArr'] ) );
return $categoryTreeArray ;
}
/**
* Получить родительскую категорию
*
* @param $category_id
*
* @return array
* @since 3.9
* @auhtor Gartes | sad.net79@gmail.com | Skype : agroparknew | Telegram : @gartes
* @date 27.11.2021 23:38
*/
public function getParentCategory( $category_id ): array
{
$data = $this->db->query("
SELECT *
FROM " . DB_PREFIX . "category AS c
LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id)
WHERE c.category_id = '" . (int)$category_id . "'");
return $data->row ;
}
/**
* Получить категорию товара
* @param int $product_id
*
* @return array
* @since 3.9
* @auhtor Gartes | sad.net79@gmail.com | Skype : agroparknew | Telegram : @gartes
* @date 27.11.2021 23:43
*
*/
public function getCategories($product_id): array
{
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'");
return $query->rows;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment