Frage

Magento 1.7.0.2. Ich verwende keine flache Kategorie/Produktstruktur.

Schauen Sie sich Datei App/Code/Core/Mage/Catalog/Block/navigation.php an.

Funktion _renderCategoryMenuTemHtml:

// get all children
if (Mage::helper('catalog/category_flat')->isEnabled()) {
     $children = (array)$category->getChildrenNodes();
     $childrenCount = count($children);
} else {
     // category is instance of Mage_Catalog_Model_Category
     $children = $category->getChildren(); // return string
     $childrenCount = $children->count();
}

Funktion Get Children von mage_catalog_model_category Objekt:

/**
  * Retrieve children ids comma separated
  *
  * @return string
  */
  public function getChildren()
  {
      return implode(',', $this->getResource()->getChildren($this, false));
  }

Die Frage ist: Wie können wir $ Children-> count () nennen, wenn $ children eine Zeichenfolge ist? Ist das ein Fehler?

War es hilfreich?

Lösung

Dies ist kein Fehler. Wenn die flache Kategorie nicht aktiviert ist, dann ist die $category var, den Sie in dem von Ihnen angegebenen Block haben, ist keine Instanz von Mage_Catalog_Model_Category. Es ist eine Instanz von Varien_Data_Tree_Node und die Methode getChildren() sieht aus wie das:

/**
     * Retrieve node children collection
     *
     * @return Varien_Data_Tree_Node_Collection
     */
    public function getChildren()
    {
        return $this->_childNodes;
    }

Ich weiß, dass es nicht viel sagt, aber in dem Kommentar können Sie sehen, dass es eine Instanz zurückgibt Varien_Data_Tree_Node_Collection das hat a count() Methode ... also ist alles in Ordnung.
Übrigens, in CE 1.7+ wird dieser Block nicht mehr verwendet. Dies wird verwendet, um die Kategorien zum Menü hinzuzufügen: Mage_Catalog_Model_Observer::addCatalogToTopmenuItems().

Andere Tipps

Aus meinem Verständnis PHPs implode wird eine Zeichenfolge zurückgeben.

Gibt eine Zeichenfolge zurück, die eine String -Darstellung aller Array -Elemente in derselben Reihenfolge enthält, wobei die Kleberzeichenfolge zwischen jedem Element ist.

Wenn Sie eine Zählung wollen, explode der zurückgegebene implodierte Wert von getChildren() und dann die Array -Elemente zählen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top