wake-up-neo.com

Holen Sie sich die Kategorien für Kinder

Versuchen, ein Kind einer bestimmten Kategorie zu erhalten, die aktiv ist. Bitte helfen Ich habe Probleme damit. Ich kann sie derzeit alle zeigen, aber nicht spezifisch. Würde mich über jede Hilfe freuen.

$category = Mage::getModel('catalog/category')->load(2);
$category->getChildCategories();
$tree = $category->getTreeModel();
$tree->load();
$ids = $tree->getCollection()->getAllIds();
10
Tonzkie

hier ist der Code zum Laden der aktiven Kategorie

/* Load category by id*/
$cat = Mage::getModel('catalog/category')->load($id);


/*Returns comma separated ids*/
$subcats = $cat->getChildren();

//Print out categories string
#print_r($subcats);

foreach(explode(',',$subcats) as $subCatid)
{
  $_category = Mage::getModel('catalog/category')->load($subCatid);
  if($_category->getIsActive())
  {
    $caturl     = $_category->getURL();
    $catname     = $_category->getName();
    if($_category->getImageUrl())
    {
      $catimg     = $_category->getImageUrl();
    }
    echo '<h2><a href="'.$caturl.'" title="View the products for this category"><img src="'.$catimg.'" alt="" />'.$catname.'</a></h2>';
  }
}
?>

hoffe das wird dir sicher helfen.

34
liyakat

Wie von mhaupt erwähnt, ist das Laden einer Sammlung schneller als jede Kategorie in einer Schleife. Aber für mich gibt es keine Notwendigkeit, die untergeordneten Kategorien manuell zu laden. Im Grunde ist das, was $category->getChildrenCategories() bereits macht.

Es gibt auch einen Filter, um nur aktive Kategorien zu erhalten. Rufen Sie einfach addIsActiveFilter() in der Sammlung auf.

a.) Aktive untergeordnete Kategorien über getChildren() laden

// 1. Get a list of all child category ids (e.g "12,23,11,42")
$subcategoryIds = $category->getChildren();

// 2. Create collection
$categoryCollection = Mage::getModel('catalog/category')->getCollection();

// 3. Add all attributes to select, otherwise you can not 
//    access things like $cat->getName() etc.
$categoryCollection->addAttributeToSelect('*');

// 4. Filter by ids
$categoryCollection->addIdFilter($subcategoryIds);

// 5. Add filter to collection to get active categories only
$categoryCollection->addIsActiveFilter();

b.) Aktive untergeordnete Kategorien mit getChildrenCategories()laden

// 1. Load collection
$categoryCollection= $category->getChildrenCategories();

// 2. Add filter to collection to get active categories only
$categoryCollection->addIsActiveFilter();

Die Sammlung wird aus der Datenbank geladen, sobald auf sie zugegriffen wird. Wenn die Sammlung nicht geladen wird und $subcategories->count() aufgerufen wird, wird nur ein "SELECT count (*)" gegen die Datenbank ausgelöst (im Gegensatz zu count($subcategories), das die Sammlung zwingt, sich selbst zu laden).

Iteration der Sammlung

foreach($categoryCollection as $category) {
    echo $category->getName();
}

Wenn Sie der Sammlung nach dem Zugriff weitere Filter hinzufügen, wird die Sammlung nicht automatisch erneut geladen. Um Änderungen an der Sammlung vorzunehmen, rufen Sie einfach $categoryCollection->load() auf, um die Sammlung aus der Datenbank neu zu laden.

12

Diejenigen, die sagen, dass sie getAllChildren () anstelle von getChildren () verwenden, sind einfach falsch. Beide Methoden geben genau dasselbe zurück. Mit einem Unterschied gibt getAllChildren (true) ein Array anstelle einer durch Kommas getrennten Zeichenfolge zurück. getAllChildren ($ bool asArray) ist standardmäßig auf false gesetzt. Mein Punkt ist, dass Sie beide Wege nutzen müssen 

Mage::getModel('catalog/category')->load($catId);

innerhalb einer Schleife, sofern Sie nicht die folgende Funktion verwenden.

private function fetchCatsById($onlyThese)
{
    $cats = Mage::getModel('catalog/category')
                ->getCollection(true)
                ->addAttributeToSelect('*')
                ->addIdFilter($onlyThese)
                ->addAttributeToFilter('level','2')
                ->addIsActiveFilter();

    return $cats;
}

$cats = $this->fetchCatsById($onlyThese);
5
oasisfleeting

Die einzige Antwort, die liyakat schrieb, sollte nicht in professionellen Läden verwendet werden, da dies ein Leistungsproblem aufwirft, da das Kategorienobjekt mehrere Male zeitabhängig geladen wird 

$cat->getAllChildren()

beschränken Sie dann die Kategoriesammlung auf die benötigten Kategorie-IDs, z 

$coll->addIdFilter($idFilter);

dann müssen Sie nicht n-mal gegen die Datenbank laden.

Bitte beachten Sie, dass Ladungen innerhalb von Schleifen eines der am häufigsten verwendeten schlechten Codebeispiele in Magento-Projekten sind und um sie zu vermeiden!

2
mhaupt

Hallo siehst du unter code 

$category_model = Mage::getModel('catalog/category'); 
  $_category = $category_model->load(13); 
  $all_child_categories = $category_model->getResource()->getAllChildren($_category);
  print_r($all_child_categories);
1
MagikVishal

Wenn Sie eine beliebige Anzahl von Unterkategorien der übergeordneten Kategorie wünschen, klicken Sie hier http://magentoo.blogspot.com/2014/01/get-all-subcategories-of-parent-category-magento.html

0
user3146094