Templates Magento中getChildHtml()和getChildHtml()之间的差异

Templates Magento中getChildHtml()和getChildHtml()之间的差异,templates,magento,Templates,Magento,我想知道这两个函数之间的区别。我理解getChildHtml()的行为。如果不传递任何参数,它将返回块或所有块的html。 我看得出来 getChildHtml($name, $useCache, $sorted) getChildChildHtml($name, $childName,$useCache, $sorted) 乍一看,我使用了一个$useCache参数来使用cache。假设您在根块的phtml模板文件中,您有一个简化的块结构,如下所示 root left

我想知道这两个函数之间的区别。我理解getChildHtml()的行为。如果不传递任何参数,它将返回块或所有块的html。 我看得出来

getChildHtml($name, $useCache, $sorted)
getChildChildHtml($name, $childName,$useCache, $sorted)

乍一看,我使用了一个$useCache参数来使用cache。

假设您在根块的phtml模板文件中,您有一个简化的块结构,如下所示

root
    left
        promo_top
        navigation
        promo_bottom
    center
    right
$left = $this->getChildBlock('left')
echo $left->getChildHtml('promo_top')
从根块的模板文件中,要打印左块,可以使用
getChildHtml

echo $this->getChildHtml('left');
但是,如果出于某种原因,您希望在根模板中打印促销顶部块,则必须执行以下操作

root
    left
        promo_top
        navigation
        promo_bottom
    center
    right
$left = $this->getChildBlock('left')
echo $left->getChildHtml('promo_top')
getchildhtml
方法允许您在一个简单的方法调用中完成这类事情。同样,从根模板

echo $this->getChildChildHtml('left','promo_top');
因此,语义是

  • 使用名称X获取我的子块
  • 然后,用Y键获得它是子块
  • 呈现HTML
  • 如果您查看源代码,您会发现,最终,这个方法只是包装了对
    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);
    }
    

    真棒的解释。谢谢你,艾伦。