разница между getChildHtml () и getChildChildHtml () в Magento

17

Я хочу знать различия между этими двумя функциями. Я понимаю поведение getChildHtml (). Он возвращает html блока или всех блоков, если вы не передаете какие-либо параметры. И я вижу

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

на первый взгляд я использую параметр $ useCache, который, как я полагаю, использует кеш.

    
задан davidselo 18.01.2012 в 20:40
источник

1 ответ

41

Предположим, вы находитесь в файле шаблона 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. Затем получите дочерний блок с помощью Y
  3. Отобразить 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);
}
    
ответ дан Alan Storm 18.01.2012 в 21:00
  • очень полезно для меня, спасибо Алан –  davidselo 18.01.2012 в 21:21
  • Удивительное объяснение. Спасибо Алан. –  Ricky Sharma 23.08.2013 в 07:33