![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/app/code/Cnc/Catalog/ViewModel/ |
<?php /** * Copyright (c) 2020 Kaliop Digital Commerce (https://digitalcommerce.kaliop.com) All Rights Reserved. * https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) * <[email protected]> */ declare(strict_types=1); namespace Cnc\Catalog\ViewModel; use Magento\Catalog\Api\CategoryListInterface; use Magento\Catalog\Api\Data\CategoryInterface; use Magento\Framework\Api\FilterBuilder; use Magento\Framework\Api\SearchCriteriaBuilder; use Magento\Framework\Registry; use Magento\Framework\View\Element\Block\ArgumentInterface; class ChildrenCategories implements ArgumentInterface { /** * @var Registry */ private $registry; /** * @var CategoryListInterface */ private $categoryListRepository; /** * @var SearchCriteriaBuilder */ private $searchCriteriaBuilder; /** * @var FilterBuilder */ private $filterBuilder; /** * ChildrenCategories constructor. * @param Registry $registry * @param CategoryListInterface $categoryListRepository * @param SearchCriteriaBuilder $searchCriteriaBuilder * @param FilterBuilder $filterBuilder */ public function __construct( Registry $registry, CategoryListInterface $categoryListRepository, SearchCriteriaBuilder $searchCriteriaBuilder, FilterBuilder $filterBuilder ) { $this->registry = $registry; $this->categoryListRepository = $categoryListRepository; $this->searchCriteriaBuilder = $searchCriteriaBuilder; $this->filterBuilder = $filterBuilder; } /** * @param CategoryInterface|null $parentCategory * @return array */ public function getChildrenCategories(CategoryInterface $parentCategory = null): array { if ($parentCategory === null) { $parentCategory = $this->getCurrentCategory(); } $pathFilter = $this->filterBuilder ->setField(CategoryInterface::KEY_PATH) ->setConditionType('like') ->setValue($parentCategory->getPath() . '/%') ->create(); $levelFilter = $this->filterBuilder ->setField(CategoryInterface::KEY_LEVEL) ->setConditionType('eq') ->setValue($parentCategory->getLevel() + 1) ->create(); $this->searchCriteriaBuilder->addFilters([$pathFilter]); $this->searchCriteriaBuilder->addFilters([$levelFilter]); $searchCriteria = $this->searchCriteriaBuilder->create(); $results = $this->categoryListRepository->getList($searchCriteria); return $results->getItems(); } /** * @return CategoryInterface */ public function getCurrentCategory(): CategoryInterface { return $this->registry->registry('current_category'); } }