我想知道这两个功能之间的区别。我理解getChildHtml()的行为。如果你没有传递任何参数,它会返回块的html或所有块。 我可以看到
getChildHtml($name, $useCache, $sorted)
getChildChildHtml($name, $childName,$useCache, $sorted)
乍一看,我所使用的$ useCache参数是使用缓存。
答案 0 :(得分:43)
假设您在根块的phtml模板文件中,并且您有一个简化的块结构,看起来像这样
root
left
promo_top
navigation
promo_bottom
center
right
从根块的模板文件中,要打印左侧块,您将使用getChildHtml
。
echo $this->getChildHtml('left');
但是,如果由于某种原因你想在根模板中打印promo_top块 ,你必须做这样的事情
$left = $this->getChildBlock('left')
echo $left->getChildHtml('promo_top')
getChildChildHtml
方法允许您在一个简单的方法调用中执行此类操作。再次,从根模板
echo $this->getChildChildHtml('left','promo_top');
所以,语义是
如果您查看源代码,您可以看到,最终,此方法只包含对getChildHtml
的调用
#File: app/code/core/Mage/Core/Block/Abstract.php
public function getChildChildHtml($name, $childName = '', $useCache = true, $sorted = false)
{
if (empty($name)) {
return '';
}
$child = $this->getChild($name);
if (!$child) {
return '';
}
return $child->getChildHtml($childName, $useCache, $sorted);
}