Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Скажем, вы находитесь в файле шаблона корневого блока 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');

Итак, семантика

  • Получить мой дочерний блок с именем 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);
}