Magento中getChildHtml()和getChildChildHtml()之间的区别

时间:2012-01-18 19:40:42

标签: templates magento

我想知道这两个功能之间的区别。我理解getChildHtml()的行为。如果你没有传递任何参数,它会返回块的html或所有块。 我可以看到

getChildHtml($name, $useCache, $sorted)
getChildChildHtml($name, $childName,$useCache, $sorted)
乍一看,我所使用的$ useCache参数是使用缓存。

1 个答案:

答案 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');

所以,语义是

  1. 使用名称X
  2. 获取我的子阻止
  3. 然后,使用Y
  4. 获取它的子块
  5. 渲染HTML
  6. 如果您查看源代码,您可以看到,最终,此方法只包含对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);
    }