Magento2 系统配置中的Magento 2类别选择器
如何在magento 2中的系统配置中获取类别选择器 我需要得到所有级别的类别在管理配置部分作为多选选项。我已经添加了以下代码,并得到了预期的结果。但我想用递归函数来实现。请帮我做同样的事Magento2 系统配置中的Magento 2类别选择器,magento2,Magento2,如何在magento 2中的系统配置中获取类别选择器 我需要得到所有级别的类别在管理配置部分作为多选选项。我已经添加了以下代码,并得到了预期的结果。但我想用递归函数来实现。请帮我做同样的事 namespace Vendor\Productslider\Model\Config\Source; use Magento\Framework\Option\ArrayInterface; use Magento\Catalog\Helper\Category; class Categorylist
namespace Vendor\Productslider\Model\Config\Source;
use Magento\Framework\Option\ArrayInterface;
use Magento\Catalog\Helper\Category;
class Categorylist implements ArrayInterface
{
protected $_categoryHelper;
protected $categoryRepository;
public function __construct(
\Magento\Catalog\Helper\Category $catalogCategory,
\Magento\Catalog\Model\CategoryRepository $categoryRepository
)
{
$this->_categoryHelper = $catalogCategory;
$this->categoryRepository = $categoryRepository;
}
/*
* Return categories helper
*/
public function getStoreCategories($sorted = false, $asCollection = false, $toLoad = true)
{
return $this->_categoryHelper->getStoreCategories($sorted , $asCollection, $toLoad);
}
/*
* Option getter
* @return array
*/
public function toOptionArray()
{
$arr = $this->toArray();
$ret = [];
foreach ($arr as $key => $value)
{
$ret[] = [
'value' => $key,
'label' => $value
];
}
return $ret;
}
/*
* Get options in "key-value" format
* @return array
*/
public function toArray()
{
$categories = $this->getStoreCategories(true,false,true);
$categoryList = $this->renderCategories($categories);
return $categoryList;
}
public function renderCategories($_categories)
{
$categoryList = array();
foreach ($_categories as $category){
$categoryList[$category->getEntityId()] = __($category->getName()); // Main categories
$categoryObj = $this->categoryRepository->get($category->getId());
$subcategories = $categoryObj->getChildrenCategories();
foreach($subcategories as $subcategory) {
$categoryList[$subcategory->getEntityId()] = __('--'.$subcategory->getName()); // 1st level Sub categories
if($subcategory->hasChildren()) {
$childCategoryObj = $this->categoryRepository->get($subcategory->getId());
$childSubcategories = $childCategoryObj->getChildrenCategories();
foreach($childSubcategories as $childSubcategory) {
$categoryList[$childSubcategory->getEntityId()] = __('----'.$childSubcategory->getName()); // 2nd level Sub categories
}
}
}
}
return $categoryList;
}
}
感谢上帝!!
我已经找到了解决办法
namespace Vendor\Productslider\Model\Config\Source;
use Magento\Framework\Option\ArrayInterface;
use Magento\Catalog\Helper\Category;
class Categorylist implements ArrayInterface
{
protected $_categoryHelper;
protected $categoryRepository;
protected $categoryList;
public function __construct(
\Magento\Catalog\Helper\Category $catalogCategory,
\Magento\Catalog\Model\CategoryRepository $categoryRepository
)
{
$this->_categoryHelper = $catalogCategory;
$this->categoryRepository = $categoryRepository;
}
/*
* Return categories helper
*/
public function getStoreCategories($sorted = false, $asCollection = false, $toLoad = true)
{
return $this->_categoryHelper->getStoreCategories($sorted , $asCollection, $toLoad);
}
/*
* Option getter
* @return array
*/
public function toOptionArray()
{
$arr = $this->toArray();
$ret = [];
foreach ($arr as $key => $value)
{
$ret[] = [
'value' => $key,
'label' => $value
];
}
return $ret;
}
/*
* Get options in "key-value" format
* @return array
*/
public function toArray()
{
$categories = $this->getStoreCategories(true,false,true);
$categoryList = $this->renderCategories($categories);
return $categoryList;
}
public function renderCategories($_categories)
{
foreach ($_categories as $category){
$i = 0;
$this->categoryList[$category->getEntityId()] = __($category->getName()); // Main categories
$list = $this->renderSubCat($category,$i);
}
return $this->categoryList;
}
public function renderSubCat($cat,$j){
$categoryObj = $this->categoryRepository->get($cat->getId());
$level = $categoryObj->getLevel();
$arrow = str_repeat("---", $level-1);
$subcategories = $categoryObj->getChildrenCategories();
foreach($subcategories as $subcategory) {
$this->categoryList[$subcategory->getEntityId()] = __($arrow.$subcategory->getName());
if($subcategory->hasChildren()) {
$this->renderSubCat($subcategory,$j);
}
}
return $this->categoryList;
}
}