Files
2025-06-24 14:14:35 +02:00

111 lines
3.1 KiB
PHP

<?php
/**
* Since 2013 Ovidiu Cimpean.
*
* Ovidiu Cimpean - Newsletter Pro © All rights reserved.
*
* DISCLAIMER
*
* Do not edit, modify or copy this file.
* If you wish to customize it, contact us at addons4prestashop@gmail.com.
*
* @author Ovidiu Cimpean <addons4prestashop@gmail.com>
* @copyright Since 2013 Ovidiu Cimpean
* @license Do not edit, modify or copy this file
*
* @version Release: 4
*/
namespace PQNP;
use Category;
use Context;
use Db;
class CategoryTree
{
public function getTree()
{
$root = Category::getRootCategory();
$root_id = $root->id;
$categories = Db::getInstance()->executeS('
SELECT c.`id_category`, cl.`name`, c.`id_parent`, c.`level_depth`, c.`active`
FROM `'._DB_PREFIX_.'category` c
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (
c.`id_category` = cl.`id_category`
AND cl.`id_lang` = '.(int) Context::getContext()->language->id.'
AND cl.`id_shop` = '.(int) Context::getContext()->shop->id.'
)
');
$categories_ids = [];
foreach ($categories as $category) {
$categories_ids[$category['id_category']] = $category;
}
unset($categories);
$tree = [];
$tree = $categories_ids[$root_id];
$this->addTreeChildrens($categories_ids, $tree);
return $tree;
}
public function getRoot()
{
$root = Category::getRootCategory();
return [
'id_category' => (int) $root->id,
'name' => $root->name,
'id_parent' => (int) $root->id_parent,
'level_depth' => (int) $root->level_depth,
'active' => (int) $root->active,
'childrens' => count($root->getChildrenWs()),
];
}
public function getChildrens($id_category)
{
$results = Db::getInstance()->executeS('
SELECT c.`id_category`, cl.`name`, c.`id_parent`, c.`level_depth`, c.`active`,
(
SELECT COUNT(gc_c.`id_category`)
FROM `'._DB_PREFIX_.'category` gc_c
WHERE gc_c.`id_parent` = c.`id_category`
) AS `childrens`
FROM `'._DB_PREFIX_.'category` c
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (
c.`id_category` = cl.`id_category`
AND cl.`id_lang` = '.(int) Context::getContext()->language->id.'
AND cl.`id_shop` = '.(int) Context::getContext()->shop->id.'
)
WHERE c.`id_parent` = '.(int) $id_category.'
');
return $results;
}
private function addTreeChildrens(&$categories_ids, &$node)
{
if (!isset($node['childrens'])) {
$node['childrens'] = [];
}
foreach ($categories_ids as $id_category => $category) {
if ($node['id_category'] == $category['id_parent']) {
$node['childrens'][] = $category;
if (count($node['childrens']) > 0) {
$category_ref = &$node['childrens'][count($node['childrens']) - 1];
$this->addTreeChildrens($categories_ids, $category_ref);
}
}
}
}
}