Ich bekomme alle Kategorien in der System.xml
Verwendung der Klasse
Vender\Module\Model\Config\Source\Category
<?php
namespace Vender\Module\Model\Config\Source;
use Magento\Framework\Data\OptionSourceInterface;
class Category implements OptionSourceInterface{
protected $_categoryFactory;
protected $_categoryCollectionFactory;
public function __construct(
\Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory,
\Magento\Catalog\Model\CategoryFactory $categoryFactory
) {
$this->_categoryCollectionFactory = $categoryCollectionFactory;
$this->_categoryFactory = $categoryFactory;
}
/**
* Get category collection
*
* @param bool $isActive
* @param bool|int $level
* @param bool|string $sortBy
* @param bool|int $pageSize
* @return \Magento\Catalog\Model\ResourceModel\Category\Collection or array
*/
public function getAllCategoryCollection($isActive = true, $level = false, $sortBy = false, $pageSize = false)
{
$collection = $this->_categoryCollectionFactory->create();
$collection->addAttributeToSelect('*');
// select only active categories
if ($isActive) {
$collection->addIsActiveFilter();
}
// select categories of certain level
if ($level) {
$collection->addLevelFilter($level);
}
// sort categories by some value
if ($sortBy) {
$collection->addOrderField($sortBy);
}
// select certain number of categories
if ($pageSize) {
$collection->setPageSize($pageSize);
}
return $collection;
}
public function toOptionArray(){
$arr = $this->_toCheckArray();
$ret = [];
foreach ($arr as $key => $value){
$ret[] = [
'value' => $key,
'label' => $value
];
}
return $ret;
}
private function _toCheckArray(){
$categories = $this->getAllCategoryCollection(true, false, false, false);
$catagoryList = array();
foreach ($categories as $category){
$catagoryList[$category->getEntityId()] = __($this->_getCategoryParentName($category->getPath()) . $category->getName());
}
return $catagoryList;
}
private function _getCategoryParentName($path = ''){
$parentName = '';
$rootCats = array(1,2);
$catTree = explode("/", $path);
array_pop($catTree);
if($catTree && (count($catTree) > count($rootCats))){
foreach ($catTree as $catId){
if(!in_array($catId, $rootCats)){
$category = $this->_categoryFactory->create()->load($catId);
$categoryName = $category->getName();
$parentName .= $categoryName . ' -> ';
}
}
}
return $parentName;
}
}
Ich erhalte dieses Klassenformular Magento 2 - Kategorieliste für den benutzerdefinierten Magento-Systemkonfigurationsabschnitt.
Jetzt funktioniert es perfekt für mich und die Ausgabe ist wie folgt.
Aber wenn ich mein Modul an Magento QA sende, senden sie mir den Fehler.
Wie kann ich dieses Problem lösen? um das Problem zu identifizieren
Hinweis: Ich habe diese Erweiterung bereits zuvor gesendet, indem ich den Namen der Klasse geändert habe. Ich dachte, dass dies das Problem sein wird, da der Klassenname oder der Methodenname alle Methodennamen und Klassennamen geändert hat, aber sie senden mir erneut das gleiche Problem.
magento2
category
backend
system.xml
Asad Khan
quelle
quelle
Antworten:
Führen Sie die folgenden Schritte aus, um Ihr Problem zu beheben:
Befolgen Sie den obigen Schritt, um Ihr Problem zu lösen.
Ich hoffe es hilft! Danke.
quelle
Ich denke, das passiert, weil es Code gibt, der das bereits tut. Prüfen:
vendor/magento/module-catalog/Ui/Component/Product/Form/Categories/Options.php
quelle
system.xml
Verwendung dieser Klasse zeigen