So zeigen Sie Kategorien in System.xml in Magento 2 an

7

Ich bekomme alle Kategorien in der System.xmlVerwendung 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. Geben Sie hier die Bildbeschreibung ein 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 identifizierenGeben Sie hier die Bildbeschreibung ein

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.

Asad Khan
quelle
Ihre Erweiterung wird aufgrund von doppeltem Code abgelehnt oder Sie verwenden eine öffentliche Funktion anstelle einer privaten Funktion. Dieses Modul hilft Ihnen dabei, doppelten Code zu entfernen. github.com/mconnectmedia/…
Chirag Patel
@ChiragPatel es funktioniert nicht ... Als Antwort gibt es mir "Keine Code-Duplikation in Ihrem Code gefunden"
Asad Khan
Wenn Sie keine Fehlermeldung erhalten oder Ihre Ablehnung nicht klar ist, können Sie eine E-Mail an den Magento-Marktplatz senden. Ich habe E-Mail in Mai Antwort erwähnt
Chirag Patel
Ja, ich sende ihnen bereits eine E-Mail, aber sie geben mir keine Antwort
Asad Khan

Antworten:

3

Führen Sie die folgenden Schritte aus, um Ihr Problem zu beheben:

  1. Richtlinien für die technische Überprüfung
  2. Sie können bei Problemen mit der Übermittlung von Marketplace eine E-Mail an [email protected] senden. Sie können Ihnen helfen.
  3. marketplacesupport.magento.com Von hier aus können Sie ein Support-Ticket erstellen, um Ihre Frage zu stellen. Außerdem finden Sie weitere Informationen zum Magento Marketplace.
  4. Dies sind die wenigen Dinge, die ich gefunden habe, um die Ablehnung zu reduzieren und den EQP-Prozess zu bestehen.

Befolgen Sie den obigen Schritt, um Ihr Problem zu lösen.

Ich hoffe es hilft! Danke.

Chirag Patel
quelle
0

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

Luci
quelle
1
Ja, ich bekomme alle Kategorien in dieser Klasse, aber wenn ich versucht habe, alle Kategorien in der Konfiguration (system.xml) anzuzeigen , wird nur die Standardkategorie angezeigt. Wie kann ich alle Kategorien in der system.xmlVerwendung dieser Klasse zeigen
Asad Khan