Hat mage_catalog_block_navigation einen Fehler?
-
16-10-2019 - |
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?
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.